(七):docker-compose
2018-09-19 本文已影响0人
木夕月_fc7b
简介
-
[x] Compose 用来定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。
-
[x] 使用Compose 基本上分为三步:
-
1.Dockerfile 定义应用的运行环境 (前面已经介绍过)。
-
2.docker-compose.yml 定义组成应用的各服务
-
3.docker-compose up 启动整个应用
- [x] ==注意==:docker-compose是非集群多个应用管理方式,即只部署在一台宿主机上。
- 部署在集群上,请使用docker stack,使用类似。
compose安装
安装地址参考
https://docs.docker.com/compose/install/
https://docs.docker.com/compose/completion/#install-command-completion
1.下载compose
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
2.设置可执行权限
sudo chmod +x /usr/local/bin/docker-compose
3.安装bash命令tab补充
- [x] 安装脚本到/etc/bash_completion.d/
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.22.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
- [x] 某些系统无法自动补全,需要做些额外处理
## 在~/.bashrc 末尾添加
. /etc/bash_completion.d/docker-compose
source ~/.bashrc
4.版本查看
$ docker-compose --version
docker-compose version 1.22.0, build 1719ceb
5.卸载
sudo rm /usr/local/bin/docker-compose
compose配置说明
-
[x] 官方文档:
https://docs.docker.com/compose/compose-file/#build -
[x] 配置样例:
version: '3'
services:
redis:
image: redis:alpine
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
配置选项
bulid
- [x] 服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,指定 Dockerfile 所在文件夹的路径。
build: 可以是相对路径,或者结合context的相对路径。
build:
context: ../
dockerfile: path/of/Dockerfile
image
- [x] 指定镜像
## service_name:服务名称。
## image:镜像名称或镜像 ID。
services:
service_name:
image: ubuntu:14.04
args
-
[x] 给容器传递参数
-
[x] Dockerfile 中添加参数
ARG buildno
ARG gitcommithash
RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"
- [x] compose设置参数值
build:
context: .
args:
buildno: 1
gitcommithash: cdc3b19
build:
context: .
args:
- buildno=1
- gitcommithash=cdc3b19
- [x] 不设置值,自动生成
args:
- buildno
- gitcommithash
command
- [x] 覆盖默认命令
command: bundle exec thin -p 3000
或者
command: ["bundle", "exec", "thin", "-p", "3000"]
depends_on
-
[x] 配置容器依赖。更多参考https://docs.docker.com/compose/compose-file/#depends_on
-
[x] 例如下面容器会先启动 redis 和 db 两个服务,最后才启动 web 服务:
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
- [x] 注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。
pid
- [x] 将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。
pid: "host"
ports
- [x] 映射端口。
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
- [x] 注意:当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。
extra_hosts
- [x] 添加主机名的标签,就是往/etc/hosts文件中添加一些记录,与Docker client的--add-host类似:
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
## 启动之后查看容器内部hosts:
162.242.195.82 somehost
50.31.209.229 otherhost
volumes
- [x] 挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。
Compose的数据卷指定路径可以是相对路径,使用 . 或者 .. 来指定相对目录。
数据卷的格式可以是下面多种形式:
volumes:
// 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
- /var/lib/mysql
// 使用绝对路径挂载数据卷
- /opt/data:/var/lib/mysql
// 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
- ./cache:/tmp/cache
// 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
- ~/configs:/etc/configs/:ro
// 已经存在的命名的数据卷。
- datavolume:/var/lib/mysql
- [x] 如果你不使用宿主机的路径,你可以指定一个volume_driver。
volume_driver: mydriver
compose常用命令
- [x] 命令描述参考
https://docs.docker.com/compose/reference/
命令提示
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
构建启动容器
docker-compose up -d nginx
登录容器
docker-compose exec nginx bash
停止并且删除所有容器、镜像、挂载、镜像
docker-compose down
显示所有容器
docker-compose ps
重新启动容器
docker-compose restart nginx
暂停容器
docker-compose pause nginx
恢复容器
docker-compose unpause nginx
删除容器(删除前必须关闭容器)
docker-compose rm nginx
停止容器
docker-compose stop nginx
启动容器
docker-compose start nginx
不启动依赖容器并且执行后删除容器
docker-compose run --no-deps --rm web python manage.py db upgrade
构建镜像
docker-compose build nginx
## 不带缓存的构建。
docker-compose build --no-cache nginx
查看日志
docker-compose logs nginx
## 查看实时日志
docker-compose logs -f nginx
验证(docker-compose.yml)文件配置
docker-compose config -q
以json的形式输出docker日志
docker-compose events --json nginx
stack常用命令
[root@node146 harbor]# docker stack --help
Usage: docker stack COMMAND
Manage Docker stacks
Options:
Commands:
deploy Deploy a new stack or update an existing stack
ls List stacks
ps List the tasks in the stack
rm Remove one or more stacks
services List the services in the stack
Run 'docker stack COMMAND --help' for more information on a command.
- [x] 样例:
## 创建服务
docker stack deploy -c /usr/local/portainer/portainer-agent-stack.yml portainer
## 删除服务
docker stack rm portainer