这篇文章主要围绕dockercompose编排和dockercompose编排服务异常停止展开,旨在为您提供一份详细的参考资料。我们将全面介绍dockercompose编排的优缺点,解答dockerc
这篇文章主要围绕docker compose 编排和dockercompose编排服务异常停止展开,旨在为您提供一份详细的参考资料。我们将全面介绍docker compose 编排的优缺点,解答dockercompose编排服务异常停止的相关问题,同时也会为您带来Docker - 03 编排容器 Docker Compose 指令速查表、Docker compose 编排工具详解、Docker Compose编排容器、Docker | 第七章:Docker Compose服务编排介绍及使用的实用方法。
本文目录一览:- docker compose 编排(dockercompose编排服务异常停止)
- Docker - 03 编排容器 Docker Compose 指令速查表
- Docker compose 编排工具详解
- Docker Compose编排容器
- Docker | 第七章:Docker Compose服务编排介绍及使用
docker compose 编排(dockercompose编排服务异常停止)
Compose 是 Docker 的服务编排工具,主要用来构建基于 Docker 的复杂应用,Compose 通过一个配置文件来管理多个 Docker 容器,非常适合组合使用多个容器进行开发的场景。
说明:Compose 是 Fig 的升级版,Fig 已经不再维护。Compose 向下兼容 Fig,所有 fig.yml
只需要更名为 docker-compose.yml
即可被 Compose 使用。
服务编排工具使得 Docker 应用管理更为方便快捷。 Compose 网站:https://docs.docker.com/compose/
安装 Compose:
# 方法一:
$ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose # Linux下等效于 $ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose; chmod +x /usr/local/bin/docker-compose # 方法二:使用pip安装,版本可能比较旧 $ yum install python-pip python-dev $ pip install docker-compose # 方法三:作为容器安装 $ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose # 方法四:离线安装 # 下载[docker-compose-Linux-x86_64](https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64),然后重新命名添加可执行权限即可: $ mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose; $ chmod +x /usr/local/bin/docker-compose # 百度云地址: http://pan.baidu.com/s/1slEOIC1 密码: qmca # docker官方离线地址:https://dl.bintray.com/docker-compose/master/
安装完成后可以查看版本:
# docker-compose --version
docker-compose 1.8.1
升级
如果你使用的是 Compose 1.2 或者早期版本,当你升级完成后,你需要删除或者迁移你现有的容器。这是因为,1.3 版本, Composer 使用 Docker 标签来对容器进行检测,所以它们需要重新创建索引标记。
卸载
$ rm /usr/local/bin/docker-compose
# 卸载使用pip安装的compose $ pip uninstall docker-compose
Compose 区分 Version 1 和 Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2 支持更多的指令。Version 1 没有声明版本默认是 "version 1"。Version 1 将来会被弃用。
版本 1 指的是忽略
version
关键字的版本;版本 2 必须在行首添加version: ''2''
。
入门示例
一般步骤
1、定义 Dockerfile,方便迁移到任何地方;
2、编写 docker-compose.yml 文件;
3、运行 docker-compose up
启动服务
示例
准备工作:提前下载好镜像:
docker pull mysql
docker pull wordpress
需要新建一个空白目录,例如 wptest。新建一个 docker-compose.yml
version: ''2''
services:
web:
image: wordpress:latest links: - db ports: - "8002:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: 123456 db: image: mysql environment: - MYSQL_ROOT_PASSWORD=123456
以上命令的意思是新建 db 和 wordpress 容器。等同于:
$ docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql
$ docker run --name some-wordpress --link db:mysql -p 8002:80 -d wordpress
注意,如果你是直接从 fig 迁移过来的,且
web
里links
是- db:mysql
,这里会提示没有给 wordpress 设置环境变量,这里需要添加环境变量WORDPRESS_DB_HOST
和WORDPRESS_DB_PASSWORD
。
好,我们启动应用:
# docker-compose up
Creating wptest_db_1...
Creating wptest_wordpress_1...
Attaching to wptest_db_1, wptest_wordpress_1
wordpress_1 | Complete! WordPress has been successfully copied to /var/www/html
就成功了。浏览器访问 http://localhost:8002(或 http://host-ip:8002)即可。
默认是前台运行并打印日志到控制台。如果想后台运行,可以:
docker-compose up -d
服务后台后,可以使用下列命令查看状态:
# docker-compose ps
Name Command State Ports ----------------------------------------------------------------------------------- figtest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp figtest_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8002->80/tcp # docker-compose logs Attaching to wptest_wordpress_1, wptest_db_1 db_1 | 2016-10-14T14:38:46.498030Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). db_1 | 2016-10-14T14:38:46.499974Z 0 [Note] mysqld (mysqld 5.7.15) starting as process 1 ... db_1 | 2016-10-14T14:38:46.727191Z 0 [Note] InnoDB: PUNCH HOLE support available
停止服务:
# docker-compose stop
Stopping wptest_wordpress_1...
Stopping wptest_db_1...
重新启动服务:
docker-compose restart
docker-compose.yml 参考
每个 docker-compose.yml 必须定义 image
或者 build
中的一个,其它的是可选的。
image
指定镜像 tag 或者 ID。示例:
image: redis
image: ubuntu:14.04
image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd
注意,在
version 1
里同时使用image
和build
是不允许的,version 2
则可以,如果同时指定了两者,会将build
出来的镜像打上名为image
标签。
build
用来指定一个包含 Dockerfile
文件的路径。一般是当前目录.
。Fig 将 build 并生成一个随机命名的镜像。
注意,在
version 1
里bulid
仅支持值为字符串。version 2
里支持对象格式。
build: ./dir
build:
context: ./dir
dockerfile: Dockerfile-alternate args: buildno: 1
context
为路径,dockerfile
为需要替换默认 docker-compose
的文件名,args
为构建 (build) 过程中的环境变量,用于替换 Dockerfile 里定义的 ARG
参数,容器中不可用。示例:
Dockerfile:
ARG buildno
ARG password
RUN echo "Build number: $buildno" RUN script-requiring-password.sh "$password"
docker-compose.yml:
build:
context: .
args:
buildno: 1 password: secret build: context: . args: - buildno=1 - password=secret
command
用来覆盖缺省命令。示例:
command: bundle exec thin -p 3000
command
也支持数组形式:
command: [bundle, exec, thin, -p, 3000]
links
用于链接另一容器服务,如需要使用到另一容器的 mysql 服务。可以给出服务名和别名;也可以仅给出服务名,这样别名将和服务名相同。同 docker run --link
。示例:
links:
- db
- db:mysql
- redis
使用了别名将自动会在容器的 /etc/hosts
文件里创建相应记录:
172.17.2.186 db
172.17.2.186 mysql 172.17.2.187 redis
所以我们在容器里就可以直接使用别名作为服务的主机名。
ports
用于暴露端口。同 docker run -p
。示例:
ports:
- "3000"
- "8000:8000"
- "49100:22" - "127.0.0.1:8001:8001"
expose
expose 提供 container 之间的端口访问,不会暴露给主机使用。同 docker run --expose
。
expose:
- "3000"
- "8000"
volumes
挂载数据卷。同 docker run -v
。示例:
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
volumes_from
挂载数据卷容器,挂载是容器。同 docker run --volumes-from
。示例:
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
container:container_name
格式仅支持version 2
。
environment
添加环境变量。同 docker run -e
。可以是数组或者字典格式:
environment:
RACK_ENV: development
SESSION_SECRET:
environment: - RACK_ENV=development - SESSION_SECRET
depends_on
用于指定服务依赖,一般是 mysql、redis 等。
指定了依赖,将会优先于服务创建并启动依赖。
links
也可以指定依赖。
external_links
链接搭配 docker-compose.yml
文件或者 Compose
之外定义的服务,通常是提供共享或公共服务。格式与 links
相似:
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
注意,
external_links
链接的服务与当前服务必须是同一个网络环境。
extra_hosts
添加主机名映射。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
将会在 /etc/hosts
创建记录:
162.242.195.82 somehost
50.31.209.229 otherhost
extends
继承自当前 yml 文件或者其它文件中定义的服务,可以选择性的覆盖原有配置。
extends:
file: common.yml
service: webapp
service
必须有,file
可选。service
是需要继承的服务,例如 web
、database
。
net
设置网络模式。同 docker 的 --net
参数。
net: "bridge"
net: "none"
net: "container:[name or id]" net: "host"
dns
自定义 dns 服务器。
dns: 8.8.8.8
dns: - 8.8.8.8 - 9.9.9.9
cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir
这些命令都是单个值,含义请参考 docker run。
cpu_shares: 73
cpu_quota: 50000
cpuset: 0,1
user: postgresql working_dir: /code domainname: foo.com hostname: foo ipc: host mac_address: 02:42:ac:11:65:43 mem_limit: 1000000000 mem_limit: 128M memswap_limit: 2000000000 privileged: true restart: always read_only: true shm_size: 64M stdin_open: true tty: true
命令行参考
$ docker-compose
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
--verbose Show more output
-v, --version Print version and exit
-H, --host HOST 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 (for example if your docker host
is an IP address)
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pulls service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
批处理脚本
# 关闭所有正在运行容器
docker ps | awk ''{print $1}'' | xargs docker stop
# 删除所有容器应用 docker ps -a | awk ''{print $1}'' | xargs docker rm # 或者 docker rm $(docker ps -a -q)
Docker - 03 编排容器 Docker Compose 指令速查表
目录
- 01 Docker 常用指令、参数配置速查表
- 02 Dockerfile 指令速查表
- 03 Docker Compose 指令速查表
Docker - 03 编排容器 Docker Compose 指令速查表
1 docker-compose CLI 命令
1.1 主要
命令 | 说明 | 使用 |
---|---|---|
up | 创建并运行作为服务的容器 | ![]() |
down | 停止服务容器并清除 | ![]() |
1.2 其它
命令 | 说明 | 使用 |
---|---|---|
bind | build需要的镜像 | build [options] [--build-arg key=val...] [SERVICE...] |
config | 验证脚本 | config [options] |
create | 创建镜像不启动 | create [options] [SERVICE...] |
events | 监听容器事件 | events [options] [SERVICE...] |
exec | 执行指定容器执行程序 | exec [options] [-e KEY=VAL...] SERVICE COMMAND [ARGS...] |
run | 运行容器一次性的程序 | run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...] SERVICE [COMMAND] [ARGS...] |
kill | 强行停止服务 | kill [options] [SERVICE...] |
pause | 暂停服务 | pause [SERVICE...] |
unpause | 恢复被暂停的服务 | unpause [SERVICE...] |
stop | 停止运行一个服务的所有容器 | stop [options] [SERVICE...] |
start | 启动运行某个服务的所有容器 | start [SERVICE...] |
restart | 重启某个服务的所有容器 | restart [options] [SERVICE...] |
rm | 删除停止的服务(容器) | rm [options] [SERVICE...] |
logs | 展示service的日志 | logs [options] [SERVICE...] |
top | 容器资源占用 | top [SERVICE...] |
ps | 容器列表 | ps [options] [SERVICE...] |
port | 查看服务中的端口被映射到了宿主机的哪个端口上 | port [options] SERVICE PRIVATE_PORT |
pull | 拉取服务依赖的镜像 | pull [options] [SERVICE...] |
push | 提交镜像 | push [options] [SERVICE...] |
bundle | 打包 DAB 文件 | bundle [options] |
scale | 指定某一个服务启动的容器的个数 | scale [SERVICE=NUM...] |
2 docker-compose 指令速查表
按字母排列
命令 | 说明 | 用法 |
---|---|---|
build | 编译Dockerfile生成镜像 | ![]() |
command | 覆盖容器启动后默认执行的命令 | ![]() |
container_name | 容器的名字 | ![]() |
cap_add,cap_drop | 加入或者去掉容器能力 | ![]() |
depends_on | 容器的依赖 | ![]() |
configs | 导入配置 | ![]() |
dns | 设置DNS | ![]() |
dns_search | 自定义DNS搜索范围 | ![]() |
devices | 设备映射列表 | ![]() |
driver_opts | 给驱动传值 | ![]() |
entrypoint | 指定接入点 | ![]() |
env_file | 导入环境变量文件 | ![]() |
environment | 设置环境变量 | ![]() |
expose | 暴露的端口 | ![]() |
external_links | 连接单独启动的容器 | ![]() |
extra_hosts | 修改 /etc/hosts | ![]() |
healthcheck | 检查状态 | ![]() |
image | 镜像 | ![]() |
labels | 向容器添加元数据 | ![]() |
links | 连接容器 | ![]() |
logging | 配置日志服务 |
![]() ![]() |
network_mode | 网络模式 | ![]() |
networks | 加入指定网络 | ![]() |
pid | 跟主机系统共享进程命名空间 | ![]() |
ports | 映射端口 |
![]() ![]() |
restart | 出错重启方式 | ![]() |
stop_signal | 设置另一个信号来停止容器 | ![]() |
tmpfs | 挂载临时目录到容器内部 | ![]() |
volumes | 挂载一个目录 | ![]() |
3 例子 - 运行容器服务 WordPress
- 编写
docker-compose.yml
version: ''3.3''
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
- 运行
docker-compose up
参考
- docker-compose CLI
- Docker Compose
- Get started with WordPress
- Compose file version 3 reference
© 会煮咖啡的猫咪
Docker compose 编排工具详解
Docker Compose
Docker Compose是一个定义及运行多个Docker容器的工具,通过 Compose,无需用shell脚本来启动容器,而使用 YAML 文件来配置应用程序需要的所有服务,然后使用命令,根据 YAML 的文件配置创建并启动所有服务,非常适合于多个容器进行开发的场景。
Compose非常适合开发,测试和登台环境以及CI工作流程。
YAML
YAML是一个可读性高,用来表达数据序列化的格式
相关命令及格式
version:指定此yml文件基于的compase的版本 services:指定创建容器的服务选项 服务名:例如nginx等 hostname:容器主机名 build :指定构建镜像上下文路径 context:上下文路径 dockerfile:指定构建镜像的 Dockerfile 文件名 ports:暴露容器端口,与-p相同,但端口不能低于60;例如:- 1234:80 networks:加入顶级networks下配置的网络 deploy:指定部署和运行服务相关配置,只能在Swarm模式使用 volumes:挂载宿主机路径或命令卷 image:指定容器运行的镜像 command:执行命令,覆盖默认命令 container_name:指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法 scale(扩展) environment:添加环境变量 restart:重启策略,定义是否重启容器;no(默认,不重启),always(总是重启), no-failure(退出状态非0时重启),unless-stoped(容器退出时,忽略守护进程启动前停止 的容器) networks:配置网络,指定网卡设备等
Compose命令
基本使用格式 docker-compose [options] [COMMAND][ARGS...] 选项 --verbose:输出更多调试信息 --version:打印版本并退出 -f,--file FILE:使用特定的compose模板文件,默认为docker-compose.yml -p, --project-name NAME:指定项目名称,默认使用目录名称 常用命令 build 重新构建服务 ps 列出容器 up 创建和启动容器 exec 在容器里面执行命令 scale 指定一个服务容器启动数量 top 显示正在运行的容器进程 logs 查看服务容器的输出 down 删除容器、网络、数据卷和镜像 stop/start/restart 停止/启动/重启服务
Compose安装
#环境部署所有主机安装docker环境(内容为docker基础) yum install docker-ce -y #下载compose,可通过curl直接链接下载,或在外下载好后拖进linux crul ...... #赋予docker compose执行权限 cp -p docker-compose /usr/local/bin/ chmod +x /usr/local/bin/docker-compose mkdir /root/compose_nginx #使用compose编排创建容器 #编写yml文件 vim /root/compose_nginx/docker-compose.yml version: ''3'' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1216:80 - 1217:443 networks: - cluster volumes: - ./wwwroot:/usr/local/nginx/html networks: cluster: #放入相关文件 mkdir nginx mkdir wwwroot echo "this is nginx" > wwwroot/index.html #执行yml文件创建容器 docker-compose -f docker-compose.yml up -d
到此这篇关于Docker compose 编排工具详解的文章就介绍到这了,更多相关Docker compose 编排工具内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
- Docker-Compose 容器集群的快速编排方法
- IDEA中使用Docker Compose容器编排的实现
- Docker.v19安装和配置Docker Compose编排工具的方法
- 详解Docker之Compose服务编排
- 使用Docker compose编排Laravel应用的方法
- Docker 容器编排利器Compose(起步篇)
- Docker系列之使用Docker Compose编排容器
- docker-compose实现容器任务编排的方法步骤
Docker Compose编排容器
1. 前言
Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。
使用Compose 基本上分为三步:
-
Dockerfile 定义应用的运行环境
-
docker-compose.yml 定义组成应用的各服务
-
docker-compose up 启动整个应用
Compose和Docker兼容性
compose文件格式版本 | docker版本 |
---|---|
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
2. 安装Compose
直接从github下载即可,前提要先安装Docker,版本要1.9.1以上
Note that Compose 1.8.0 requires Docker Engine 1.10.0 or later for version 2 of the Compose File format, and Docker Engine 1.9.1 or later for version 1.
# curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
也可以用pip或官网的run.sh脚本安装
安装后确认
# docker-compose --version
3. 使用Compose
3.1 创建一个Python应用, 使用Flask,将数值记入Redis
3.1.1 建立一个应用的目录,创建Python文件


# mkdir python
# cd python
# vi app.py
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host=''redis'', port=6379)
@app.route(''/'')
def hello():
redis.incr(''hits'')
return ''Hello World! I have been seen %s times.'' % redis.get(''hits'')
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
# vi requirements.txt
flask
redis


3.1.2 创建 Dockerfile
在同一目录下,创建Dockerfile

# vi Dockerfile
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py

对上面的Dockerfile做一下简单说明:
- 容器使用Python 2.7的镜像
- 将当前目录下文件拷贝到容器内/code
- 指定工作目录为/code
- 安装python需要的库:flask, redis
- 容器执行命令 python app.py
3.1.3 创建编排脚本
在同一目录下,创建 docker-compose.yml


# cat docker-compose.yml
version: ''2''
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis


对上面的编排脚本做一下简单说明:
- 这个应用定义了两个服务:web, redis
- web容器通过当前路径下的Dockerfile生成
- web容器内的5000端口映射到主机的5000端口
- 将当前目录挂载到web容器内/code
- web容器依赖于redis容器
- redis容器从Docker Hub获取镜像
3.1.4 启动应用
会执行编排脚本,分别制作和抓取web,redis镜像,启动容器
# docker-compose up
3.1.5 访问应用
http://localhost:5000/
3.2 其他命令
3.2.1 daemon模式启动/停止
# docker-compose up -d
# docker-compose stop
3.2.2 查看信息
# docker-compose ps
3.2.3 对容器执行命令(一次)
#docker-compose run services cmd
例如:查看web容器环境变量
# docker-compose run web env
3.3 创建一个Wordpress应用
3.3.1 建立一个应用的目录
# mkdir wordpress
# cd wordpress
3.3.2 创建 docker-compose.yml


# cat docker-compose.yml
version: ''2''
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress


MySQL的数据目录挂载到当前目录下,./.data/db不存在时会自动创建。
3.3.3 启动应用
# docker-compose up -d
3.3.4 确认
# docker-compose ps
3.3.5 访问应用
http://localhost:8000/
初始化设置后,就可以看到Wordpress的页面
Docker | 第七章:Docker Compose服务编排介绍及使用
前言
前面章节,我们学习了如何构建自己的镜像文件,如何保存自己的镜像文件。大多都是一个镜像启动。当一个系统需要多个子系统进行配合时,若每个子系统也就是镜像需要一个个手动启动和停止的话,那估计实施人员也会崩溃的,而且效率也很低,维护的量也就很大了。所以,本章节就来了解下,如何利用官方提供的
Compose
编排工具按一定的业务规则来合理的进行容器启停工作。
- Compose介绍
- Compose安装
- 二进制文件直接安装
- 使用pip(Python包管理工具)安装
- 命令补齐
- Compose常用命令
- build
- kill
- logs
- port
- ps
- pull
- rm
- run
- start
- stop
- up
- pause
- docker-compose.yml模版文件常用命令
- image
- build
- command
- links
- dns
- environment
- env_file
- expose
- volumes
- volumes_from
- Compose编排实践
- 参考资料
- 总结
- 最后
- 老生常谈
Compose介绍
Compose是一个用于定义和运行多个
Docker
容器的编排工具。可以一条命令启动多个容器。主要是解决了容器与容器之间如何管理编排的问题。
按官网的说明,使用Compose
基本上也就分成三步:
- 利用
Dockerfile
定义运行环境 - 使用
docker-compose.yml
定义组成应用的各服务 - 运行
docker-compose up
启动应用
题外话:我所理解的就是,其实就是个批量工具,如批处理命令一样。
Compose实现原理图:
Compose 中有两个重要的概念:
- 服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
一个项目可以由多个服务(容器)关联而成,Compose
面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。
Compose
项目由 Python
编写,实现上调用了 Docker
服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API
,就可以在其上利用 Compose
来进行编排管理。
题外话:关于Docker API
会在下一章节进行详细说明。
Compose安装
本身
Compose
是一个独立的产品,所以需要独立安装的。
按官网的说明,Compose
可以在Mac
、Windows
、Linux
等操作系统,本章节主要讲解下关于Linux
的安装,其他操作系统可以查看官网的安装指南:https://docs.docker.com/compose/install/#install-compose
二进制文件直接安装
此安装方式简单,但可能会有网络连接问题。或者直接去
gitHub
上的资源列表下载到本地也可以的。笔者下载过程(11M左右)还是很顺利的,╰( ̄▽ ̄)╮
- 下载
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
- 授权
sudo chmod +x /usr/local/bin/docker-compose
- 查看版本验证是否成功
docker-compose --version
可看见控制台输出:
docker-compose version 1.22.0, build f46880fe
说明已经安装成功了。当然大家可以选择不同的安装版本了,直接去github
上下载即可。
使用pip(Python包管理工具)安装
这种安装方式就是不会受限于网络,但安装比较麻烦。
#安装pip
yum -y install epel-release
yum -y install python-pip
#确认版本
pip --version
#更新pip
pip install --upgrade pip
#安装docker-compose
pip install docker-compose
#查看版本
docker-compose version
命令补齐
命令补齐功能可以提高输入效率,所以需要安装命令补齐功能的,可以照着官网:https://docs.docker.com/compose/completion/#install-command-completion 说明了相应配置,这里就不进行阐述了。
Compose常用命令
在控制窗口,直接输入
docker-compose
可以看见,其命令的组成及命令的集合了。
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST 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 Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
这里简单说明下一些常用的:
build
构建或者重新构建服务。
kill
通过发送SIGKILL信号来强制停止服务容器。支持通过参数来指定发送的信号,如:docker-compose kill -s SIGINT
logs
查看服务的日志输出。
port
打印绑定的公共端口
ps
列出所有的容器或者指定的容器
pull
拉取镜像
rm
输出容器
run
在一个服务上执行一个命令。如docker-compose run ubuntu ping docker.com
将会启动一个 ubuntu 服务,执行 ping docker.com
命令。默认情况下,所有关联的服务将会自动被启动,除非这些服务已经在运行中。 该命令类似启动容器后运行指定的命令,相关卷、链接等等都将会按照期望创建。 两个不同点:
- 给定命令将会覆盖原有的自动运行命令;
- 不会自动创建端口,以避免冲突。
如果不希望自动启动关联的容器,可以使用 --no-deps
选项,例如
$ docker-compose run --no-deps web python manage.py shell
将不会启动 web 容器所关联的其它容器。
start
启动一个已经存在的服务容器。
stop
停止一个已经运行的容器,但不删除它。
up
构建,(重新)创建,启动,链接一个服务相关的容器。链接的服务都将会启动,除非他们已经运行。 默认情况, docker-compose up
将会整合所有容器的输出,并且退出时,所有容器将会停止。如果使用 docker-compose up -d
,将会在后台启动并运行所有的容器。 默认情况,如果该服务的容器已经存在, docker-compose up
将会停止并尝试重新创建他们(保持使用 volumes-from
挂载的卷),以保证 docker-compose.yml
的修改生效。如果你不想容器被停止并重新创建,可以使用 docker-compose up --no-recreate
。如果需要的话,这样将会启动已经停止的容器。
pause
暂停容器服务
其他的命令,可直接通过帮助查询下。
docker-compose.yml模版文件常用命令
compose的默认模版文件为:docker-compose.yml
。和Dockerfile
一样,它也是有自己的语法命令的。其中定义的每个服务都必须通过image指令指定镜像或build指令(需要 Dockerfile)来自动构建。其它大部分指令都跟docker run中的类似。
如果使用build指令,在Dockerfile中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在docker-compose.yml中再次设置。
模版文件有多种写法,例如Version 1 file format
、Version 2 file format
、Version 2.1 file format
、Version 3 file format
等。其中,Version 1 file format
将逐步被被弃用;Version 2.x
及Version 3.x
基本兼容,是未来的趋势。
具体说明可查看:https://docs.docker.com/compose/compose-file/
各版本对应的支持的模版文件如下:
Compose file format | Docker Engine release |
---|---|
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
image
指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose
将会尝试拉去这个镜像。
例如:
image: frolvlad/alpine-glibc
build
指定 Dockerfile
所在文件夹的路径。 Compose
将会利用它自动构建这个镜像,然后使用这个镜像。
build: /opt/docker
其中build还有一些小选项。
build:
context: ./webapp
dockerfile: Dockerfile-alternate
args:
- buildno=1
- user=someuser
context
上下文是docker build
中很重要的一个概念。构建镜像必须指定context
。context
是 docker build
命令的工作目录。默认情况下,如果不额外指定 Dockerfile
的话,会将 Context
下的名为 Dockerfile
的文件作为 Dockerfile
。
dockerfile
选项是值得备选的dockerfile
。args
是一些提供的参数。
command
覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000
links
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 (SERVICE:ALIAS)
格式都可以。
links:
- db
- db:database
- redis
使用的别名将会自动在服务容器中的 /etc/hosts
里创建。例如:
172.17.2.186 db
172.17.2.186 database
172.17.2.187 redis
相应的环境变量也将被创建。
dns
配置 DNS 服务器。可以是一个值,也可以是一个列表。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
environment
设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
env_file
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE
指定了模板文件,则 env_file
中路径会基于模板文件路径。
如果有变量名称与 environment
指令冲突,则以后者为准。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
环境变量文件中每一行必须符合格式,支持 #
开头的注释行。
# common.env: Set Rails/Rack environment
RACK_ENV=development
expose
暴露端口,但不映射到宿主机,只被连接的服务访问。
仅可以指定内部端口为参数
expose:
- "3000"
- "8000"
volumes
卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER
) 或加上访问模式 (HOST:CONTAINER:ro
)。
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
volumes_from
从另一个服务或容器挂载它的所有卷。
volumes_from:
- service_name
- container_name
其他相关命名了或者了解命令的其他配置项,可到官网查看,包括一些选项等,真的蛮多的。。
官网:https://docs.docker.com/compose/compose-file
Compose编排实践
讲了命令后,大家估计和我一样一头雾水,接下来,就以一个实际的启动例子,进行讲解下。这里启动两个先前章节编写过的
SpringBoot
项目,进行api调用进行举例说明。
0.编写docker-compose.yml
文件:
# 表示该文件使用Version 3 文件格式
version: ''3.3''
services:
springboot-demo-1:
# 依赖的镜像,直接使用先前章节自定义的镜像文件
image: lqdev.cn/springboot:0.1
# 暴露端口信息
ports:
- "1222:8080"
springboot-demo-2:
# 依赖的镜像,直接使用先前章节自定义的镜像文件
image: lqdev.cn/springboot:0.1
# 暴露端口信息
ports:
- "1333:8080"
1.在docker-compose.yml
文件所在目录执行
# -d 说明是后台运行
docker-compose up -d
此时可以看见,启动成功了:
[root@izbp16chpwsnff41nrjtfhz java]# docker-compose up -d
Creating java_springboot-demo-1_1 ... done
Creating java_springboot-demo-2_1 ... done
利用ps
命令查看,说明已经启动成功了。
[root@izbp16chpwsnff41nrjtfhz java]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
java_springboot-demo-1_1 java -Djava.security.egd=f ... Up 0.0.0.0:1222->8080/tcp
java_springboot-demo-2_1 java -Djava.security.egd=f ... Up 0.0.0.0:1333->8080/tcp
或者查看下日志说出,可以看见SpringBoot
已经启动成功:
访问下服务,可以看见能正常输出了:
示例就简单的利用images
和ports
进行简单的运行了一个Comoose
示例,大家对于复杂的可以自己试着编写下,对于一个后端的我来说,这块用到的机会还是很少了,毕竟都是自己一个微服务,自己启停了。⊙﹏⊙‖∣
参考资料
官方的文档还是很齐全的,建议大家还是直接去官网查看相关资料。
- https://docs.docker.com/compose/install
- https://docs.docker.com/compose/reference/
- https://docs.docker.com/compose/compose-file
- https://www.hi-linux.com/posts/12554.html
总结
本章节主要介绍了关于
Compose
编排工具的使用。使用了编排工具后,提供了应用系统部署各个管理应用的便捷性。学习后,大家就可以根据自己的业务需求,业务系统进行合理的编排工作了。一般上还是利用在微服务的编排上,一般上一个应用系统可能存在这几十个微服务的,所以说合理的利用编排工具可以提高部署效率,同时也能减少出错遗漏的机率。
最后
鉴于作者也是个初学者,水平有限,若文中有错误或者遗漏之处,还望指出,共同进步!
老生常谈
- 个人QQ:
499452441
- 微信公众号:
lqdevOps
个人博客:http://blog.lqdev.cn
原文地址:http://blog.lqdev.cn/2018/08/12/docker/docker-seven/
今天关于docker compose 编排和dockercompose编排服务异常停止的介绍到此结束,谢谢您的阅读,有关Docker - 03 编排容器 Docker Compose 指令速查表、Docker compose 编排工具详解、Docker Compose编排容器、Docker | 第七章:Docker Compose服务编排介绍及使用等更多相关知识的信息可以在本站进行查询。
本文标签: