docker compose 使用说明
使用docker compose,可以根据模板文件快速创建docker 容器集群
**********************
安装 docker compose
**************
在线安装
官网:https://docs.docker.com/compose/install/
linux 安装
curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
下载docker compose relsease、放置在指定位置(/usr/local/bin/docker-compose)、使文件可执行
**************
离线安装
下载地址:https://github.com/docker/compose/releases
本地下载docker compose release
上传到虚拟机指定位置(/usr/local/bin/docker-compose)
使文件可执行:chmod +x docker-compose
**********************
docker compose 命令
命令格式:docker-compose [options] [command] [args]
[root@centos ~]# docker-compose --help
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)
-c, --context NAME Specify a context 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 keys
in v3 files to their non-Swarm equivalent
--env-file PATH Specify an alternate environment file
Commands:
build Build or rebuild services
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
**************
options 选项
-f :指定文件,默认为 docker-compose.yml
-p :项目名称,默认使用所在目录名
-c :上下文名称
--verbose :输出详细信息
--log-level level :输出日志信息
--env-file :环境变量文件
**************
command 命令
官网:https://docs.docker.com/compose/reference/
build:构建或者重新构建服务
config:查看compose 文件
create:创建服务
up:创建并运行服务
scale:设置容器的数量
exec:执行命令行
logs:查看服务输出
ps:列出服务容器
pull:拉取镜像
push:推送镜像
kill:强制关闭服务
stop:关闭服务
pause:暂停服务
unpause:恢复暂停的服务
start:开启服务
restart:重启服务
**********************
docker-compose.yml 文件
官网:https://docs.docker.com/compose/compose-file/
示例
version: "3.8"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
max_replicas_per_node: 1
constraints:
- "node.role==manager"
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- "5000:80"
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- "5001:80"
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints:
- "node.role==manager"
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager"
networks:
frontend:
backend:
volumes:
db-data:
version:指定文件版本,如不制定minor 版本,minor默认为0(version: 3 ==> version: 3.0)
services:创建服务
networks:设置容器网络
volumes:数据卷
**************
services 指令
build:dockerfile所在文件夹路径(绝对路径、相对docker-compose.yml文件路径)
image:指定镜像文件,不存在则去拉取镜像
dockerfile:指定镜像文件,不能与image同时使用
command:覆盖容器启动后默认执行的命令,command echo "hello wolrd"
container_name:容器名称,默认:项目名称_服务名称_序列号
dns:自定义dns服务器,可以是一个值,也可以是多个值
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_search:dns搜索域,可以是一个值,也可以是多个值
dns_search: example.com
dns_search:
- domain1.example.com
- domain2.example.com
env_file:从文件中获取环境变量
environment:设置环境变量
expose:暴露端口
extends:基于其他模板进行拓展
ports:端口映射
ports:
- "8080:8080"
- "8000:8000"
volumes:数据卷
volumes:
- "host_path_1:container_path_1"
- "host_path_2:container_path_2:ro"
network_mode:网络模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "service:[container id | name]"
networks:设置网段
services:
some-service:
networks:
- some-network
- other-network
**************
networks 指令
设置 ip 地址
version: "3.8"
services:
app:
image: nginx:alpine
networks:
app_net:
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::10
networks:
app_net:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
- subnet: "2001:3984:3989::/64"
**************
volumes 指令
容器共享数据卷
version: "3.8"
services:
db:
image: db
volumes:
- data-volume:/var/lib/db
backup:
image: backup-service
volumes:
- data-volume:/var/lib/backup/data
volumes:
data-volume: host_path
容器不需要设置 宿主机目录,就可以实现容器数据共享