GVKun编程网logo

docker compose 编排(dockercompose编排服务异常停止)

8

这篇文章主要围绕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 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 迁移过来的,且 weblinks- db:mysql,这里会提示没有给 wordpress 设置环境变量,这里需要添加环境变量 WORDPRESS_DB_HOSTWORDPRESS_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 里同时使用 imagebuild 是不允许的,version 2 则可以,如果同时指定了两者,会将 build 出来的镜像打上名为 image 标签。

build

用来指定一个包含 Dockerfile 文件的路径。一般是当前目录.。Fig 将 build 并生成一个随机命名的镜像。

注意,在 version 1bulid 仅支持值为字符串。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 是需要继承的服务,例如 webdatabase

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 指令速查表

Docker - 03 编排容器 Docker Compose 指令速查表

docker

目录

  • 01 Docker 常用指令、参数配置速查表
  • 02 Dockerfile 指令速查表
  • 03 Docker Compose 指令速查表

Docker - 03 编排容器 Docker Compose 指令速查表

1 docker-compose CLI 命令

1.1 主要

 命令 说明 使用
up 创建并运行作为服务的容器 ducafecat_2018-08-16-11-42-05
down 停止服务容器并清除 ducafecat_2018-08-16-11-42-33

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生成镜像 ducafecat_2018-08-16-10-59-07
command 覆盖容器启动后默认执行的命令 ducafecat_2018-08-16-10-59-36
container_name 容器的名字 ducafecat_2018-08-16-10-59-52
cap_add,cap_drop 加入或者去掉容器能力 ducafecat_2018-08-15-18-18-29
depends_on 容器的依赖 ducafecat_2018-08-16-11-00-51
configs 导入配置 ducafecat_2018-08-16-11-01-17
dns 设置DNS ducafecat_2018-08-16-11-02-46
dns_search 自定义DNS搜索范围 ducafecat_2018-08-16-11-04-10
devices 设备映射列表 ducafecat_2018-08-16-11-04-29
driver_opts 给驱动传值 ducafecat_2018-08-16-11-05-25
entrypoint 指定接入点 ducafecat_2018-08-16-11-08-49
env_file 导入环境变量文件 ducafecat_2018-08-16-11-09-15
environment 设置环境变量 ducafecat_2018-08-16-11-09-34
expose 暴露的端口 ducafecat_2018-08-16-11-09-50
external_links 连接单独启动的容器 ducafecat_2018-08-16-11-10-07
extra_hosts 修改 /etc/hosts ducafecat_2018-08-16-11-10-25
healthcheck 检查状态 ducafecat_2018-08-16-11-10-57
image 镜像 ducafecat_2018-08-16-11-13-55
labels 向容器添加元数据 ducafecat_2018-08-16-11-14-20
links 连接容器 ducafecat_2018-08-16-11-15-38
logging 配置日志服务 ducafecat_2018-08-16-11-16-42ducafecat_2018-08-16-11-16-53
network_mode 网络模式 ducafecat_2018-08-16-11-17-10
networks 加入指定网络 ducafecat_2018-08-16-11-17-24
pid 跟主机系统共享进程命名空间 ducafecat_2018-08-16-11-33-03
ports 映射端口 ducafecat_2018-08-16-11-18-48ducafecat_2018-08-16-11-19-01
restart 出错重启方式 ducafecat_2018-08-16-11-18-04
stop_signal 设置另一个信号来停止容器 ducafecat_2018-08-16-11-30-54
tmpfs 挂载临时目录到容器内部 ducafecat_2018-08-16-11-31-11
volumes 挂载一个目录 ducafecat_2018-08-16-11-31-43

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是一个定义及运行多个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编排容器

Docker Compose编排容器

 

1. 前言

Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。

使用Compose 基本上分为三步:

  1. Dockerfile 定义应用的运行环境
  2. docker-compose.yml 定义组成应用的各服务
  3. 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服务编排介绍及使用

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可以在MacWindowsLinux等操作系统,本章节主要讲解下关于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 formatVersion 2 file formatVersion 2.1 file formatVersion 3 file format等。其中,Version 1 file format将逐步被被弃用;Version 2.xVersion 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中很重要的一个概念。构建镜像必须指定contextcontextdocker build 命令的工作目录。默认情况下,如果不额外指定 Dockerfile 的话,会将 Context 下的名为 Dockerfile 的文件作为 Dockerfile

dockerfile选项是值得备选的dockerfileargs是一些提供的参数。

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已经启动成功:

日志查看

访问下服务,可以看见能正常输出了:

服务服务


示例就简单的利用imagesports进行简单的运行了一个Comoose示例,大家对于复杂的可以自己试着编写下,对于一个后端的我来说,这块用到的机会还是很少了,毕竟都是自己一个微服务,自己启停了。⊙﹏⊙‖∣


参考资料

官方的文档还是很齐全的,建议大家还是直接去官网查看相关资料。

  1. https://docs.docker.com/compose/install
  2. https://docs.docker.com/compose/reference/
  3. https://docs.docker.com/compose/compose-file
  4. 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服务编排介绍及使用等更多相关知识的信息可以在本站进行查询。

本文标签: