Docker-Compose
Docker Compose
Docker Compose是一个用来定义和运行复杂应用的docker工具。
可以通过使用Compose在一个文件中定义一个多容器应用,使用docker-compose up命令来启动应用。
Compose的指令
- build 构建或重建服务
- help 帮助指令
- kill 结束容器
- logs 记录容器输出日志
- port 打印容器绑定的端口
- ps 列出容器列表
- pull 从仓库拉取服务镜像
- restart 重启
- rm 删除已经停止的容器
- run 运行容器
- scale 设置服务的容器数目
- stop 停止
- start 开启
- up 创建并启动容器
以上都是compose的一些基础指令,但是Docker Compose最为重要的是docker-compose.yml配置的设置。
docker-compose.yml配置文件
一份标准的配置文件由version、services、networks三部分组成,其中最关键的是services和networks。
以下介绍services的书写规则:
一、image
services:
db:
image: "mysql:5.7.15"
在services标签下的第二级标签db是用户给当前这个服务自定义的名字。
image是指定服务的镜像名称或者镜像ID(如果镜像在本地不存在,就会到仓库中去pull)。
二、build
services除了可以基于指定的image,还可以基于一份Dockerfile,在docker-compose up启动的时候执行构建。
services:
nginx:
build: /path/nginx
build就是用来指定Dockerfile所在的文件路径,这里的路径可以是绝对路径亦可是相对路径。
注:
如果同时指定了image和build两个标签,那么Compose会在构建镜像时使用iamge的名称来命名。
三、command
使用command可以覆盖容器启动后默认执行的命令。
如:
command: bundle exec thin -p 3000
# 或
command: [bundle,exec,thin,-p,3000]
四、container_name
container_name: app #指定容器名称
五、depends_on
一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。
为了避免这一情况,可使用depends_on。
depends_on标签是用来规定容器启动的先后顺序。
如:
version: ’2‘
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
以上配置中的depends_on规定的启动顺序为:db、redis、web。
六、tmpfs
挂载临时目录到容器内部,与run的参数效果一样。
tmpfs: /run
tmpfs:
- /run
- /tmp
七、entrypoint
与Dockerfile中的ENTRYPOINT一样,在容器启动时有效。
entrypoint: /usr/sbin/nginx #启动时运行nginx
八、expose
与Dockerfile中的EXPOSE一样,用于暴露接口。
expose:
- "3500"
- "5000"
九、links
解决容器链接问题。
links:
- db
- redis
以上配置是指,当前服务将要链接数据库和redis方可正常运行。
十、ports
映射端口。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
注:
当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。
建议采用字符串格式。
十一、volumes
挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。
volumes:
# 指定一个文件目录,用来存放容器数据。
# $PWD 表示当前路径
- $PWD/data:/var/lib/mysql
以上是个人感觉相对重要的标签,其它详解。
实例
version: '2'
# 指定网络模式
networks:
ghost:
# 配置服务
services:
ghost-app:
# 使用当前路径下ghost中的Dockerfile构建容器
build: ghost
networks:
- ghost
# 指定当前服务依赖服务
depends_on:
- db
# 端口映射
ports:
- "2368:2368"
nginx:
build: nginx
networks:
- ghost
depends_on:
- ghost-app
ports:
- "80:80"
db:
image: "mysql:5.7.15"
networks:
- ghost
# 配置环境变量
environment:
MYSQL_ROOT_PASSWORD: mysqlroot
MYSQL_USER: ghost
MYSQL_PASSWORD: ghost
# 设置数据路径,容器销毁任然有效
volumes:
- $PWD/data:/var/lib/mysql
ports:
- "3306:3306"
网友评论