简介:docker-compose基本介绍
假设我们以dockerfile的形式部署一个wordpress应用,需要使用 docker build 一个nginx镜像,一个mysql镜像以及一个php环境的wordpress镜像,然后再启动三个镜像对应的容器。操作上及其的麻烦,而且三个dockerfile文件也不利于管理。
因此docker提供了另一种批量管理镜像的方式【docker-compose】
docker-compose文件以 .yml 为后缀,文件名可以根据自己的喜好定义。docker-compose主要分为三部分:services、networks及volumes
docker-compose文件的参数定义
1. 全局networks
如果两个容器之前的网络不在同一个网络桥段上时,无法相互访问。当然我们可以通过docker run --link 指定网络,那么在docker-compose如何定义网络呢?
networks就是解决两个容器间无法直接访问的问题,network下面定义网络相关的信息,包括名称及使用哪个网卡,具体格式如下:
networks:
my_bridge:
driver: bridge
my_bride:是自定义的网络名称,后面用于容器指定网络
2. 全局volumes
volumes主要就是定义数据持久化的本地目录。其作用等同于 docker run -d -v 本地目录:docker容器的目录 中的本地目录。其格式如下:
volumes:
my_volume:
driver: local
driver_opts:
type: none
device: /data
o: bind
my_volume:是我们自定义的持久化名称
my_volume.driver:同步的驱动类型。local表示本地驱动
myvolume.driver_opts:传递给驱动的选项。例如,type: none表示无类型,device: /data表示宿主机的路径为/data,o: bind表示以bind模式挂载
如果驱动及宿主机路径为当前路径可以直接省略后面,格式如下:
volumes:
my_volume:
3. services
services主要定义容器列表,services下面的都是容器,容器下面可以定义容器的别名以及镜像等。
services下的每一个service都是一个容器,service的启动类似 docker run ,我们可以给其指定network和volume。
具体格式如下:
services:
nginx:
container_name: likeadmin-nginx
image: nginx:1.23.1
restart: always
volumes:
- ./config/nginx/conf.d:/etc/nginx/conf.d
- ./log/nginx/logs:/logs
networks:
- likeadmin
ports:
- "80:80"
3.1 service定义容器的别名
通过container_name定义容器的别名。类似于 docker run --name 设置的容器别名
services:
nginx:
container_name: likeadmin-nginx
3.2 定义容器基础镜像
通过image定义容器的基础镜像,这个镜像可以是 dockerhub上面的镜像,也可以是本地build出来的镜像。类似于dockerfile中的FROM的作用
services:
nginx:
image: nginx:1.23.1
3.3 设置容器同步目录或者说共享目录
在service中通过volumes设置同步目录。其实就是之前文章中提到的bind mounting方式数据持久化的参数
services:
nginx:
image: nginx:1.23.1
volumes:
- ./config/nginx/conf.d:/etc/nginx/conf.d
- ./log/nginx/logs:/logs
本地同步可以在全局的volumes中定义,在某个服务中可以直接使用全局volumes定义的别名代替。具体格式如下:
services:
nginx:
image: nginx:1.23.1
volumes:
- my_volume:/etc/nginx/conf.d
3.4 设置当前容器的网络
在service中,可以同过networks定义网络,具体格式如下:
services:
nginx:
image: nginx:1.23.1
networks:
- likeadmin
注意:这里的likeadmin是全局networks定义的网络别名
3.5 设置环境变量
在部署wordpress时需要部署MySQL服务容器,而MySQL服务容器需要设置root账号密码,数据库等环境变量已启动MySQL容器。在 docker-compose 中可以在 environment 来定义环境变量,具体格式如下:
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
4. docker-compose 命令
4.1 启动某个docker-compose文定义的所有容器
这个命令一般用于初始化某个docker-compose服务,初始化时会创建docker-compose配置相关的网络以及容器等
docker-compose up -f docker-compose.yml
注意:如果docker-compose的配置文件名就是 docker-compose.yml 时可以忽略 -f ,直接使用 docker-compose up 即可
docker-compose up 命令启动不能退出,退出可以使用 ctrl+c 退出。如果想要通过后台启动,可以使用 -d 实现
4.2 关闭所有docker-compose相关的容器
docker-compose stop
4.3 重启所有docker-compose相关的容器
docker-compose start
4.4 删除docker-compose配置的所有容器以及网络
docker-compose down
注意:这个命令只会删除容器及网络,容器使用到的镜像不会删除
有遗漏或者不对的可以在我的公众号留言哦