Docker Compose 简介、命令语法和使用演示

Docker Compose 简介、命令语法和使用演示

1、简介

Docker Compose 是 Docker 官方的开源项目编排(Orchestration)项目之一,负责实现对 Docker 容器集群的快速编排。

Compose 中有两个重要的概念:

  • 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

如图中所示:Nginx,Tomcat、MySQL等,是属于一个项目中所需要的服务,这几个服务,就组成了一个完整的项目。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

2、安装

Docker for MacDocker for Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。这里主要说下linux下的安装。

[]: https://github.com/docker/compose/releases

curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

直接github上的地址上,下载就可以了,不演示了;下载完成后,查看版本号

docker-compose --version
3、简单演示,以Tomcat为例

创建docker-compose.yml文件模板

touch docker-compose.yml

写入一下内容

version: '3'
services:
  tomcat:
    restart: always
    image: tomcat
    container_name: tomcat
    ports:
      - 8080:8080

执行启动命令语法

docker-compose up

可以看到,tomcat的容器启动成功了

查看容器,也可以看到启动了一个tomcat镜像的实例,也可以猜测到,docker-compose其实也是对docker run命令的加强版。

4、docker-compose命令语法详解

直接使用帮助命令

docker-compose --help

得到如下输入,然后我简单翻译下和用国语叙说,如下(只做部分的翻译吧,毕竟外文不好)

Define and run multi-container applications with Docker.
##基本的使用命令的方式 docker-compose -h(<arg>参数) 
##后面可以是[options(选项)] [COMMAND(命令)] [ARGS...(参数列表)]
Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             #指定使用的 Compose 模板文件,默认为 docker-compose.yml
  -p, --project-name NAME     #指定项目名称,默认将使用所在目录名称作为项目名
  --verbose                   #显示更多的输出
  --log-level LEVEL           #设置日志级别(DEBUG, INFO, WARNING, ERROR, CRITICAL)
  --no-ansi                   #不打印ANSI控制字符
  -v, --version               #打印版本并且退出
  -H, --host HOST             #守护进程的socket连接(Daemon socket to connect to)
  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the
                              name specified in the client certificate
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)
  --compatibility             If set, Compose will attempt to convert deploy
                              keys in v3 files to their non-Swarm equivalent

Commands:
  build              #构建(重新构建)项目中的服务容器。可选参数如下:
  					--force-rm #删除构建过程中的临时容器。
                    --no-cache #构建镜像过程中不使用 cache(这将加长构建过程)。
                    --pull #始终尝试通过 pull 来获取更新版本的镜像。
  bundle             #从docker-compose文件中合成docker包
  config             #验证docker-compose文件格式是否正确,使用视图展示
  create             #创建服务
  down               #停止并且删除容器、网络、镜像和卷
  events             #从容器中实时接收到的事件(Receive real time events from containers)
  exec               #进入指定的运行中的容器
  help               #获得一个命令帮助
  images            #列出 Compose 文件中包含的镜像。
  kill               #kill 容器
  logs               #输出容器的日志;可以通过 --no-color 来关闭颜色
  pause              #暂停容器
  port               #打印某个容器端口所映射的公共端口
  ps                 #列出项目中目前的所有容器
  pull               #拉取服务依赖的镜像
  push               #推送服务依赖的镜像到 Docker 镜像仓库
  restart            #重启服务Restart services
  rm                 #删除停止的容器 Remove stopped containers
                     -f, --force #强制直接删除。
					 -v #删除容器所挂载的数据卷
  run                #在指定服务上执行一个命令
  scale              #设置指定服务运行的容器个数。通过 service=num(tomcat=3) 的参数来设置数量。
  start              #启动 services
  stop               #停止 services
  top                #查看各个服务容器内运行的进程。
  unpause            #恢复处于暂停状态中的服务
  up                 #创建并且执行容器
  version            #打印版本信息

这里主要说下docker-compose up命令,其他的命令,都很好理解,照着打就可以了。

这个命令自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。

链接的服务都将会被自动启动,除非已经处于运行状态。

默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。

当通过 Ctrl-C 停止命令时,所有容器将会停止。

docker-compose up -d,将会在后台启动并运行所有的容器。

默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(继续使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。

如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。

如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

选项:

  1. -d 在后台运行服务容器。
  2. --no-color 不使用颜色来区分不同的服务的控制台输出。
  3. --no-deps 不启动服务所链接的容器。
  4. --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
  5. --no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
  6. --no-build 不自动构建缺失的服务镜像。
  7. -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
5、docker-compose模板语法

默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

version: "3"
services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。

如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中再次设置。

注意:version :’3‘ 是固定的写法,下面所有的命令都是基于services节点下的容器名称(或者编号,自定义的)下的节点开始写的,例如下面都是webapp节点下写的

version: '3'
services:
  webapp: #容器的节点,自定义

下面分别介绍各个指令的用法(只列举一些常用的)。

build自动构建这个镜像,然后使用这个镜像
webapp: #容器的节点,自定义
  build: ./dir  #指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径);Compose 将会利用它自动构建这个镜像,然后使用这个镜像。

也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。

使用 dockerfile 指令指定 Dockerfile 文件名。

使用 arg 指令指定构建镜像时的变量。

webapp:
  build:
    context: ./dir
    dockerfile: Dockerfile-alternate
    args:
      buildno: 1

使用 cache_from 指定构建镜像的缓存

build:
  context: .
  cache_from:
    - tomcat:latest
restart 指定容器退出后的重启策略为始终重启。

该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped

restart: always
command 覆盖容器启动后默认执行的命令。
command: java -jar xxx.jar
container_name 指定容器名称。
container_name: docker_web_tomcat
depends_on解决容器的依赖、启动先后的问题。

以下例子中会先启动db redis 再启动 web;注意:web 服务不会等待 redis db 「完全启动」之后才启动

version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: mysql
dns自定义 DNS 服务器、dns_search配置 DNS 搜索域、tmpfs挂载一个 tmpfs 文件系统到容器。
dns:
  - 8.8.8.8
  - 119.119.119.119
dns_search:
  - test.example.com
  - test.example.com
tmpfs:
  - /run
  - /tmp
environment设置环境变量
environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

k-v形式的参数,两种写法都可以

image指定为镜像名称或镜像 ID。

如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

image: mysql
ports暴露端口信息。

使用宿主端口:容器端口;仅仅指定容器的端口(宿主将会随机选择端口)

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"
volumes数据卷所挂载路径设置。

该指令中路径支持相对路径。

volumes:
 - cache/:/tmp/cache
extra_hosts 类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。
extra_hosts:
 - "test:8.8.8.8"
 - "dockerhub:52.1.157.61"

会在启动后的服务容器中 /etc/hosts 文件中添加如下两条条目。

8.8.8.8 test
52.1.157.61 dockerhub
cap_add, cap_drop`指定容器的内核容量分配。
#容器有所有的资源
cap_add:
  - ALL
#去掉 NET_ADMIN 能力
cap_drop:
  - NET_ADMIN
devices 指定设备映射关系。
devices:
  - "/dev/ttyUSB1:/dev/ttyUSB0"
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

葵花下的獾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值