一、Docker-Compose简介
- Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
- Compose是一个定义和管理多容器的工具,也是一种容器编排工具,前身是Pig,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,build使用什么镜像,数据卷,映射端口等;然后一条命令管理所有服务,比如启动,停止,重启。简化部署多个容器的操作。
- Docker-compose是一个定义和管理多容器的工具,主要用来编排相关联的容器。
- Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
二、Docker-Compose安装
最新下载地址:https://docs.docker.com/compose/install/
(1)下载二进制文件安装Compose
[root@Centos7 ~]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 633 100 633 0 0 86 0 0:00:07 0:00:07 --:--:-- 131 100 12.1M 100 12.1M 0 0 32848 0 0:06:27 0:06:27 --:--:-- 81655 [root@Centos7 ~]# cd /usr/local/bin/ [root@Centos7 bin]# ll | grep docker-compose -rw-r--r-- 1 root root 12737304 7月 29 17:20 docker-compose [root@Centos7 bin]# chmod a+x docker-compose [root@Centos7 bin]# docker-compose -version #查看版本 docker-compose version 1.29.2, build 5becea4c
(2)使用pip下载Compose
******(1)配置yum源,下载pip # 更新yum源 yum update # 安装扩展yum源 yum -y install epel-release # 下载python pip yum -y install python-pip ******(2)安装Docker Compose pip install docker-compose • 软件版本:pip版本8.1.2,但是版本18.1是可用的。 • 可以通过:pip install—upgrade pip'命令进行升级。
三、Docker-Compose常用命令
(1)Compose常用选项
- SERVICE是Compose文件中定义的,类似于ansible的主机组,SERVICE中定义的是镜像的名称
-docker-compose
#docker-compose主命令后面跟其他命令 语法:docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] 选项: -f 指定Compose配置文件,默认docker-compose.yml -p 指定项目名称,默认目录名 --verbose 显示更多的输出
-build
#重新构建服务 语法:build [options] [--build-arg key=val...] [SERVICE...] 选项: --no-cache 不使用缓存构建镜像 --build-arg key=val 指定镜像构建时的变量
-config
#验证和查看Compose文件语法是否正确 语法:config [options] 选项: -q, --quiet 只验证不打印 --services 只打印服务名称,每行一个 --volumes 打印数据卷名称,每行一个
-exec
#在运行的容器里运行命令 语法:exec [options] SERVICE COMMAND [ARGS...] 选项: -d 在后台运行命令 --privileged 给这个进程赋予特权权限 -u, --user USER 作为该用户运行该命令 -T 禁用分配伪终端,默认分配一个终端 --index=index 多个容器时的索引数字,默认1
-port
#打印绑定的开放端口 语法:port [options] SERVICE PRIVATE_PORT 选项: --protocol=proto tcp或udp,默认tcp --index=index 多个容器时的索引数字,默认1
-ps
#列出容器 语法:ps [options] [SERVICE...] 选项: -q 只显示ID
-rm
#删除停止的服务容器 语法:rm [options] [SERVICE...] 选项: -f, --force 强制删除 -s, --stop 删除容器时如果需要先停止容器 -v 删除与容器相关的任何匿名卷
-scale
#指定一个服务启动容器 语法:scale [options] [SERVICE=NUM...]
-up
#创建和启动容器 语法:up [options] [--scale SERVICE=NUM...] [SERVICE...] 选项: -d 在后台运行容器 -t 指定超时时间 -no-deps 不启动连接服务 --no-recreate 如果容器存在,不重建他们 --no-build 不构建镜像,即使它丢失 --build 启动容器下构建镜像 --scale SERVICE=NUM 指定一个服务(容器)的启动数量
-stop、start、restart
#停止服务 语法:stop [SERVICE...] #启动服务 语法:start [SERVICE...] #重启服务 语法:restart [options] [SERVICE...]
-top
#显示容器运行进程 语法:top [SERVICE...]
-logs
#显示容器的输出 -f, --follow 实时输出日志 -t, --timestamps 显示时间戳 --tail="all" 从日志末尾显示行数
其他选项
停止容器和删除容器、网络、数据卷和镜像:down
创建一个服务:create
接收容器输出的事件:events
查看命令帮助:help
列出本地Docker的镜像:images
杀死一个容器,可以发送信号:kill
挂起容器:pause
指定发布绑定的端口:port
下载镜像:pull
推送镜像:push
注意事项
- 通常docker-compose命令只在含有docker-compose.yml文件目录下执行。只去找该文件内的服务,所以当批量部署服务时尽量将所有服务器写入到一个目录结构下
(2)Docker Compose 配置文件常用指令
-YAML文件格式及编写注意事项
- YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多。
- YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来。
-YAML文件格式注意事项
- 不支持制表符tab键缩进,需要使用空格缩进
- 通常开头缩进2个空格
- 字符后缩进1个空格
-build
#构建镜像的上下文路径 两种写法都可以 build build: ./dir #路径是从docker-compose.yml文件目录下开始的相对路径,一般都是./,后面写目录 build: context: ./dir
-Dockerfile
#指定Dockerfile文件名称 build: context: . #这个就是指定路径在当前目录 dockerfile: Dockerfile-alternate #指定dockerfile的文件名称
-images
#选择基础镜像 image: redis #镜像名称,没有版本名称默认版本为latest image: ubuntu:14.04 #镜像名称+版本名称 image: tutum/influxdb image: example-registry.com:4000/postgresql #指定镜像仓库的镜像 image: a4bc65fd #指定镜像id号
-args
#构建参数,在Dockerfile中指定的参数(定义变量,可以一次指定多个变量) 下面两种写法不管是:还是=都可以 build: context: . args: buildno: 1 #定义变量buildno为1 gitcommithash: cdc3b19 build: context: . args: - buildno=1 - gitcommithash=cdc3b19
-command
#指定命令,会覆盖默认命令 command: bundle exec thin -p 3000 command: ["bundle", "exec", "thin", "-p", "3000"]
-container_name
#自定义容器名称。如果自定义名称,则无法将服务scale到1容器之外 container_name: my-web-container #默认使用compose创建的镜像名称都是以compose_开头的,而这个可以指定镜像的名称
-deploy
#指定与部署和运行相关的配置。限版本3 version: '3' services: redis: #创建镜像为redis image: redis:alpine #指定基础镜像 deploy: replicas: 6 update_config: #用于配置滚动更新配置 parallelism: 2 #一次性更新的容器数量 delay: 10s #更新一组容器之间的间隔时间 restart_policy: #定义容器重启策略, 用于代替 restart 参数 condition: on-failure #只有当容器内部应用程序出现问题才会重启 #要注意空行,每个选项的内容都会空两个字符串的位置
-depends_on
#服务之间的依赖,控制服务启动顺序。正常是按顺序启动服务,例如构建lnmp这种,就需要排序一下启动的顺序 version: '3' services: web: #创建镜像web build: . #指定构建镜像获取dockerfile的目录 depends_on: - db #指定顺序等待db和redis都启动之后,web才会启动 - redis redis: #创建镜像redis image: redis db: #创建镜像db image: postgres
-dns
#自定义DNS服务器,可以使单个值或者列表 单个值: dns: 8.8.8.8 列表: dns: - 8.8.8.8 - 9.9.9.9
-entrypoint
#在 Dockerfile 中有一个指令叫做 ENTRYPOINT 指令,用于指定接入点 entrypoint: /code/entrypoint.sh entrypoint: - php - -d - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so - -d - memory_limit=-1 - vendor/bin/phpunit