本文仅用于对不熟悉Docker & Docker Compose的用户进行科普,并不代表任何个人意见
本文主要介绍Docker Compose的基础配置的修改,包括其中常用部分的修改等操作
案例
这是一个基本的
docker-compose
yml
配置文件,在使用时,可以通过创建一个docker-compose.yml
文件,将下面的代码复制进去,然后在同级目录下执行docker-compose up -d
命令,即可运行该配置。
version: '3'
services:
redis:
image: redis:5.0.14
container_name: my-cache
restart: always
networks:
- my-net
ports:
- "16379:6379"
nginx:
image: nginx
container_name: my-web
restart: always
networks:
- my-net
ports:
- "80:8000"
volumes:
- ./data/nginx/conf/conf.d:/etc/nginx/conf.d
- ./data/nginx/html:/var/www/html
networks:
my-net:
driver: bridge
1. version
version: '3'
: 指定Docker Compose文件的版本。在这里,使用的是版本3的语法。一般也是比较常用的一个版本,没有特殊需求的情况下不必修改。
2. services
services:
是docker compose配置文件的主要部分,定义了将要运行的服务列表的部分的开始。类似于一个数组。
2.1 redis
定义了一个redis服务,这个名称是可以自定义的,要注意的是不能和其他服务名重复。
image: redis:5.0.14
代表此服务使用的镜像,此处我们使用了redis官方的5.0.14版本
container_name: my-cache
代表此服务创建容器名称,实际上服务和Docker容器是有对应关系的,这里可以控制docker容器的名称
restart: always
代表出错的重启策略,主要有以下几种情况:
no
:不采取措施,不配置情况下的默认值always
:始终重启,不关心什么原因退出的on-failure
:仅非正常退出情况下重启(退出的code不是0)unless-stopped
:容器退出时自动重启,除非是用户手动停止的
networks:
指定当前服务使用的网络,也就是下面我们创建的那个
- mynet
指定使用的网络,可以同时使用多个
ports:
指定主机端口和容器端口间的映射关系
- "16379:6379"
顺序:宿主:容器
将容器的6379端口映射到宿主机的16379端口上
2.2 nginx
image: nginx
使用了nginx镜像
container_name: my-web
容器名称为my-web
restart: always
重启策略为始终重启
ports:
映射的端口
- "80:8000"
将容器的8000端口映射到80
volumes:
文件卷挂载,用户可以将容器中的文件夹挂载到宿主机上,一般因为下面两种情况下需要配置:
运行数据(数据持久化)
配置文件
因为docker一般都用于运行无状态的应用,所以容器重启,其中的数据也会丢失,这时可以通过将重要数据挂载出来的方式,来实现有状态的容器应用;另外对于很多的配置文件,特别是经常修改的内容,也可以将其挂载出来,便于修改。
关于有状态应用和无状态应用的具体说明,请参阅《容器化:有状态&无状态》
- ./data/nginx/conf/conf.d:/etc/nginx/conf.d
将容器中的/etc/nginx/conf.d文件夹挂载到宿主机中,此处用的是相对路径,也就是docker-compose文件所在目录下的data/nginx/conf/conf.d文件夹
- ./data/nginx/html:/var/www/html
将容器的/var/www/html文件夹挂载到宿主机的./data/nginx/目录,也就是当前目录下的data/nginx/html文件夹中
3. network
定义了docker compose实例的自定义网络,在此网络中的所有容器可以通过服务名直接通讯
3.1 my-net
定义了一个名为my-net的自定义网络。
3.1.1 driver: bridge
这行代码指定了网络的驱动程序为bridge,即使用桥接网络模式。类似于虚拟机中的桥接概念。
参与讨论
(Participate in the discussion)
参与讨论