1 docker-compose安装
参考地址:
https://docs.docker.com/compose/install/
1.1 下载最新版的docker-compose文件
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
1.2 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
1.3 验证
docker-compose --version
1.4 docker-compose 对应的docker版本
Compose file format | Docker Engine release |
---|---|
Compose specification | 19.03.0+ |
3.8 | 19.03.0+ |
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.5 升级docker-compose
如从1.25.1 升级到1.27.2
curl -L https://get.daocloud.io/docker/compose/releases/download/1.27.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
1.6 卸载
sudo rm /usr/local/bin/docker-compose
2 docker-compose的使用方法
2.1 docker-compose.yml
2.1.1 配置模板
#第一层 版本号
version: "3.8" #代表使用docker-compose项目的版本号
#第二层:services 服务配置
services:
web:
build: .
ports: #宿主机和容器的端口映射
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
# 第三层 其他配置 网络、卷、全局规划
2.1.2 实际例子
version: "3"
services:
mysql:
# 如果需要在ARM架构上运行,可以使用 mariadb:10.5.8 镜像
image: mysql:5.7.24
# image: mariadb:10.5.8 # For ARM
command:
[
"--log-bin=mysql-bin",
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci",
"--innodb_flush_log_at_trx_commit=1",
"--sync_binlog=1",
"--server-id=1"
]
environment:
MYSQL_DATABASE: "xxxxxx"
MYSQL_ROOT_PASSWORD: "xxxx"
volumes:
- ./.docker_data/mysql:/var/lib/mysql
- ./server/sql/init.sql:/docker-entrypoint-initdb.d/init.sql
expose:
- "3306"
restart: always
redis:
image: redis:5.0.5
command: redis-server
volumes:
- ./.docker_data/redis:/data
expose:
- "6379"
restart: always
main-server:
env_file:
- ./server/dockerconfs/.env.local
image: tencenttca/tca-main:latest
build:
context: ./server/projects/main
dockerfile: ../../dockerconfs/Dockerfile-common-${ORIGIN:-mirror}
command:
[
"gunicorn",
"codedog.wsgi",
"-c",
"main.gunicorn.conf.py"
]
volumes:
- ./server/configs/django/local_main.py:/var/www/django/codedog/codedog/settings/local.py
- ./.docker_data/logs/main_server:/var/www/django/codedog/log
expose:
- "8001"
depends_on:
- mysql
- redis
main-worker:
env_file:
- ./server/dockerconfs/.env.local
image: tencenttca/tca-main:latest
command:
[
"celery",
"-A",
"codedog",
"worker",
"--concurrency=2",
"-l",
"INFO"
]
volumes:
- ./server/configs/django/local_main.py:/var/www/django/codedog/codedog/settings/local.py
- ./.docker_data/logs/main_worker:/var/www/django/codedog/log
healthcheck:
test: ["CMD-SHELL", "bash bin/healthy_check.sh"]
interval: 60s
restart: always
depends_on:
- mysql
- redis
main-beat:
env_file:
- ./server/dockerconfs/.env.local
image: tencenttca/tca-main:latest
command:
[
"celery",
"-A",
"codedog",
"beat",
"-S",
"redbeat.RedBeatScheduler",
"-l",
"INFO"
]
volumes:
- ./server/configs/django/local_main.py:/var/www/django/codedog/codedog/settings/local.py
- ./.docker_data/logs/main_beat:/var/www/django/codedog/log
depends_on:
- mysql
- redis
restart: on-failure
analysis-server:
env_file:
- ./server/dockerconfs/.env.local
image: tencenttca/tca-analysis:latest
build:
context: ./server/projects/analysis
dockerfile: ../../dockerconfs/Dockerfile-common-${ORIGIN:-mirror}
command:
[
"gunicorn",
"codedog.wsgi",
"-c",
"analysis.gunicorn.conf.py"
]
volumes:
- ./server/configs/django/local_analysis.py:/var/www/django/codedog/codedog/settings/local.py
- ./.docker_data/logs/analysis_server:/var/www/django/codedog/log
expose:
- "8002"
depends_on:
- mysql
- redis
analysis-worker:
env_file:
- ./server/dockerconfs/.env.local
image: tencenttca/tca-analysis:latest
command:
[
"celery",
"-A",
"codedog",
"worker",
"--concurrency=2",
"-l",
"INFO"
]
volumes:
- ./server/configs/django/local_analysis.py:/var/www/django/codedog/codedog/settings/local.py
- ./.docker_data/logs/analysis_worker:/var/www/django/codedog/log
healthcheck:
test: ["CMD-SHELL", "bash bin/healthy_check.sh"]
interval: 60s
depends_on:
- mysql
- redis
login-server:
env_file:
- ./server/dockerconfs/.env.local
build:
context: ./server/projects/login
dockerfile: ../../dockerconfs/Dockerfile-common-${ORIGIN:-mirror}
image: tencenttca/tca-login:latest
command:
[
"gunicorn",
"apps.wsgi",
"-c",
"login.gunicorn.conf.py"
]
volumes:
- ./server/configs/django/local_login.py:/var/www/django/codedog/apps/settings/local.py
- ./.docker_data/logs/login:/var/www/django/codedog/log
expose:
- "8003"
depends_on:
- mysql
file-server:
env_file:
- ./server/dockerconfs/.env.local
build:
context: ./server/projects/file
dockerfile: ../../dockerconfs/Dockerfile-common-${ORIGIN:-mirror}
image: tencenttca/tca-file:latest
command:
[
"gunicorn",
"codedog_file_server.wsgi",
"-c",
"file.gunicorn.conf.py"
]
volumes:
- ./server/configs/django/local_file.py:/var/www/django/codedog/codedog_file_server/env/local.py
- ./.docker_data/filedata:/var/www/django/codedog/data
- ./.docker_data/logs/file_server:/var/www/django/codedog/log
expose:
- "8804"
depends_on:
- mysql
file-nginx:
image: nginx:1.13.7
volumes:
- ./server/configs/nginx/tca_file_local_compose.conf:/etc/nginx/conf.d/tca_file_local_compose.conf
- ./.docker_data/logs/file_nginx:/var/log/nginx
expose:
- "8004"
depends_on:
- file-server
scmproxy:
env_file:
- ./server/dockerconfs/.env.local
build:
context: ./server/projects/scmproxy
dockerfile: ../../dockerconfs/Dockerfile-common-${ORIGIN:-mirror}
image: tencenttca/tca-scmproxy:latest
command: [ "python", "proxyserver.py" ]
volumes:
- ./.docker_data/logs/scmproxy:/var/www/django/codedog/logs
expose:
- "8009"
nginx:
build:
context: ./web/tca-deploy-source
dockerfile: ../../server/dockerconfs/Dockerfile-nginx-${ORIGIN:-mirror}
env_file:
- ./web/tca-deploy-source/docker_conf/.env
volumes:
- ./web/tca-deploy-source:/data/tca-deploy-source
- ./server/configs/nginx/tca_8000_compose.conf:/etc/nginx/conf.d/tca_8000_compose.conf
entrypoint: bash /data/tca-deploy-source/scripts/deploy.sh init
ports:
- "80:80"
- "8000:8000"
depends_on:
- main-server
- analysis-server
- login-server
- file-server
client:
env_file:
- ./server/dockerconfs/.env.local
build:
context: ./client
dockerfile: Dockerfile
image: tencenttca/tca-client:latest
command:
- /bin/bash
- -c
- |
python3 codepuppy.py start -t $$CODEDOG_TOKEN
volumes:
- ./tools/:/workspace/tools/
- ./client/config.ini:/workspace/client/config.ini
- ./.docker_data/client/appdata:/workspace/client/.appdata
2.2 docker-compose常用命令
2.2.1 docker-compose
基本使用格式
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
命令选项说明:
-f, --file FILE
指定使用的 Compose 模板文件
-p, --project-name
NAME 指定项目名称,默认将使用所在目录名称作为项目名。
--verbose
输出更多调试信息。
-v, --version
打印版本并退出。
2.2.2 up
docker-compose up [options] [SERVICE...]
命令选项说明:
-d
在后台运行服务容器。
--no-color
不使用颜色来区分不同的服务的控制台输出。
--no-deps
不启动服务所链接的容器。
--force-recreate
强制重新创建容器,不能与 --no-recreate 同时使用。
--no-recreate
如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。
--no-build
不自动构建缺失的服务镜像。
-t,
--timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)
2.2.3 down
此命令将会停止 up 命令所启动的容器,并移除网络,但不会移除数据卷。
docker-compose down 服务id
2.2.4 exec
进入指定的容器
docker-compose exec 服务id /bin/bash
2.2.5 ps
列出项目中目前的所有容器
2.2.6 restart
重新启动所有已停止并正在运行的服务。
docker-compose restart [options] [SERVICE...]
2.2.7 rm
注意:删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm [options] [SERVICE...]
命令说明:
-f
, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
-v
删除容器所挂载的数据卷
2.2.8 top
查看项目中运行的进程
2.2.9 pause
暂停一个服务容器
docker-compose pause [SERVICE...]
2.2.10 unpause
恢复处于暂停状态中的服务
docker-compose unpause [SERVICE...]
2.2.11 logs
docker-compose logs 服务id【docker-compose.yml 文件中的服务名】