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"
作者:木木mei錦
链接:https://www.jianshu.com/p/c3edbb0b8e83