compose是编排的意思,docker-compose命令可以一次性启动多个容器,在要启动的容器数量较多时,比较省事,且也可以很方便地在一个文件中管理多个容器的启动命令。默认是打不出docker-compose命令的,需要在宿主机安装docker的命令补全工具bash-completion。
docker-compose --help查看docker-compose命令用法
docker-compose -f path/docker-compose.yml up/down
如果没有用-f参数指定docker-compose.yml文件路径,则默认会用当前目录中的docker-compose.yml文件,如果当前目录中没有docker-compose.yml文件,则会报错。
docker-compose.yml内容示例:
version: '3'
services:
Server1:
image: tars_cpp_env:latest
ports:
- "10101:10101"
volumes:
- "/data/apps/patient_profile_proj:/app"
- "/data/app_log:/data/app_log"
command: /bin/bash -c "/app/Server1/tools/start.sh"
restart: always
healthcheck:
test: ["CMD-SHELL", "if [ $$(netstat -apn | grep 10101 | awk '{print $$4}' | grep -E '127.0.0.1|0.0.0.0' | wc -l) -gt 0 ]; then exit 0; else exit 1; fi"]
interval: 60s
timeout: 5s
retries: 3
network_mode: "host"
Server2:
image: tars_cpp_env:latest
ports:
- "10100:10100"
volumes:
- "/data/apps/patient_profile_proj:/app"
- "/data/app_log:/data/app_log"
command: /bin/bash -c "/app/Server2/tools/start.sh"
restart: always
healthcheck:
test: ["CMD-SHELL", "if [ $$(netstat -apn | grep 10100 | awk '{print $$4}' | grep -E '127.0.0.1|0.0.0.0' | wc -l) -gt 0 ]; then exit 0; else exit 1; fi"]
interval: 60s
timeout: 5s
retries: 3
network_mode: "host"
1、version:值必须是'3'。
2、services:指定要启动哪些服务。
3、Server1,这里是具体的服务名,给每个服务取一个易懂易区分的名字即可。服务名不等同于容器名。如果不用container_name显式指定容器名的话,则容器名会采用默认的格式,即${项目名称}_${服务名称}_${序号}。
4、image:指定使用哪个镜像。
5、container_name:指定容器名,最好自定义容器名。
6、ports:指定端口映射。如果要建多个映射关系,则ports下面要有多行,每一行指定一个端口映射。
7、volumes:指定目录映射。如果要建多个映射关系,则volumes下面要有多行,每一行指定一个目录映射。
8、command:覆盖容器启动后默认执行的命令。注意,如果要指定shell脚本的话,shell脚本的路径是在容器中的路径,而不是在宿主机中的路径。
9、network-mode:网络模式,默认是bridge。
10、depends_on:指定依赖的服务,依赖的服务先启动后,才会启动本服务,如可能依赖一些数据存储服务,如数据库、redis等。
11、environment:设置环境变量。如果有多个环境变量,则environment下面要有多行,每一行指定一个键值对。
12、restart:重启策略,一般设为restart,这样当宿主机重启或者docker服务重启时,容器也会自动重启。
13、healthcheck:健康检查策略。
要是还用到其他功能,再搜索使用即可。
申*数据上报服务docker-compose.yaml内容如下
version: '3'
services:
ShenkangUploadServer:
image: tars_node_env:latest
container_name: shenkang_upload_server_1
tty: true
volumes:
- "/data/apps/shenkang_upload_server:/app"
command: /bin/bash -c "/app/cmd.sh"
restart: always
network_mode: "host"
environment:
CONFIG_FILE: /app/10001_config.json