Docker Compose 概述和基本命令

Docker Compose简介

Docker Compose 能够在Docker结点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理,Docker Compose并不是通过脚本和冗余的docker命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署

基本命令

命令作用
docker-compose --version查看Docker Compose 版本
docker-compose up &使用docker-compose.yml构建应用并启动,由于使用&参数启动,所以是前台运行
docker-compose up -d使用docker-compose.yml构建应用并启动,使用-d参数后台启动Docker Compose应用
docker-compose down删除Docker Compose应用,删除对应容器和对应用的定义,仅留下镜像、卷和源码(指的是yaml文件和容器外的文件)
docker-compose ps查看Docker Compose应用状态
docker-compose top列出Docker Compose应用各个容器内运行的进程
docker-compose stop停止Docker Compose应用,但并不会删除资源
docker-compose restart重新启动Docker Compose应用
docke network ls查看docker中的网络
docker volume ls查看docker中的卷

Docker Compose 使用YAML文件定义应用

  1. Docker Compose 使用YAML文件来定义多服务应用,YAML是JSON的的一个子集,因此也可以使用JSON
  2. Docker Compose 默认使用文件名 docker-compose.yml,也可以使用-f参数指定具体文件
version: "3.5"
services:
	web-fe:
		build: .
		command: python app.py
		ports:
			- target: 5000
			  published: 5000
		networks:
			- counter-net
		volumes:
			- type: volumen
			  source: counter-vol
			  target: /code
	redis:
		image: "redis:alpine"
		networks:
			counter-net:
networks:
	counter-net:
volumes:
	counter-vol:
  1. 这里包含了四个一级key,包括version、services、networks、volumes
  2. version是必须指定的,而且总是位于文件的第一行,它定义了Compose文件格式(主要是API)的版本,注意version并非定义Docker Compose 或 Docker 引擎的版本号
  3. services 用于定义不同的应用服务,上面定义了两个服务,一个是名为web-fe的Web前端服务以及一个名为redis的内存数据库服务。Docker Compose 会将每个服务部署在各自的容器中
  4. networks 用于指引 Docker 创建新的网络,默认情况下,Docker Compose 会创建 bridge网络,这是一种单主机网络,只能够实现同一主机上容器的连接,当然也可以使用driver属性来指定不同的网络类型,如下:
networks:
	over-net:
		driver: overlay
		attachable: true

这里表示创建了一个名为over-net的Overlay网络,允许独立容器(standalone container)连接(attachable)到该网络上

  1. volumes 用于指引Docker来创建新的卷
  2. services部门定义了两个二级key,包括web-fe和redis,它们各自定义了一个应用程序服务,Docker Compose会将每个服务部署为一个容器,并且会使用key作为容器名字的一部分

服务定义

  1. web-fe的服务定义中,包含如下指令,build: .(点) 指定Docker基于当前目录(.)下Dockerfile中定义的指令来构建一个新镜像。该镜像被用于启动该服务的容器
  2. command: python app.py 指定Docker在容器中执行名为 app.py 的Python脚步作为主程序,因此镜像中必须包含app.py文件以及Python,这一点在Dockerfile中可以得到满足
  3. ports: 指定Docker将容器内(-target)的5000端口映射到主机(published)的5000端口。这意味着发送到Docker主机5000端口的流量被转发到容器的5000端口,容器中的应用监听端口5000
  4. networks:使得Docker可以将服务连接到指定的网络上,这个网络应该是已经存在的,或者是在networks一级key中定义的网络。对于Overlay网络来说,它还需要定义一个attachable标志,这样独立的容器才可以连接上它(这时Docker Compose 会部署独立的容器而不是 Docker 服务)
  5. volumes:指定Docker 将 counter-vol 卷(source:) 挂载到容器内的 /code(target:),counter-vol卷应该是已存在的,或者是在文件下方的volumes一级key中定义的
  6. 综上所述,Docker Compose会调用Docker来为web-fe服务部署一个独立的容器,该容器基于与 Compose 文件位于同一目录的 Dockerfile 构建的镜像。基于该镜像启动的容器会运行app.py作为其主程序,将5000端口暴露给宿主机,连接到counter-net网络上,并挂载一个卷到/code
  7. 从技术上讲,并不需要配置 command: python app.py,因为镜像的Dockerfile 已经将python app.py 定义为默认的启动程序,但是在yaml定义的command也可以负载Dockerfile中配置的CMD指令
  8. redis服务的定义如下,image: redis:alpine 使得Docker可以基于redis:alpine 镜像启动一个独立的名为redis的容器,这个镜像会从Docker Hub拉取下来
  9. networks:配置redis容器连接到counter-net网络
    10.由于两个废物都连接到counter-net网络,因此它们可以通过名称解析到对方的地址

使用Docker Compose 部署应用

docker-compose up &
  1. 启动一个Compose应用的常用方式就是docker-compose up 命令,通过Compose文件定义的多容器应用称为Compose应用,它会根据 docker-compose.yml 和 Dockerfile构建所需的镜像,根据 docker-compose.yml 创建网络和卷,并启动容器
  2. 默认情况下docker-compose up会查找名为 docker-compose.yml 或 docker-compose.yaml 的Compose文件,如果Compose文件是其他文件名,则需要通过-f参数来指定,如下命令会基于prod-equus-bass.yml 的Compse文件部署应用
docker-compose -f prod-equus-bass.yml up
docker-compose  up -d
docker-compose -f prod-equus-bass.yml up -d

也可以使用-d在后台启动应用

使用Docker Compose管理应用

docker-compose down
  1. 先尝试关闭web-fe和redis两个服务
  2. 关闭两个服务成功后,会删除两个服务,删除counter-net网络,然后docker-compose up进程退出
  3. counter-vol卷并没有被删除,因为卷是应该用于数据的长期持久化存储的,因此卷的生命周期是与相应的容器完全解耦的,卷就主机上的文件和容器内文件进行映射,改变主机上的文件会影响容器内文件,改变容器内文件也会影响主机内文件,但是删除了容器,主机上的文件也不会删除,所以是持久化的

参考

《 深入浅出 Docker 》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lolxxs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值