安装docker-compose
bash
sudo apt install docker-compose
编写docker-compose.yml
这是我的docker-compose,里面写了5个容器,一个sqlserver的db,一个airlfow,一个我的主项目,会根据里面规定好的启动顺序启动。
python
version: "3.7" #指定docker-compose.yml文件格式版本,我的docekr-compose版本是 1.25.0,对应的就是3.7
services:
db: #自定义你的service name
image: maas_db #指定需要使用的镜像名称
container_name: db #指定要部署的容器名称
ports:#映射端口,这里就指的是将主机的 1433 端口映射到容器内的 1433端口
- "1433:1433"
environment: #设置容器内部的环境变量
- ACCEPT_EULA=Y
- SA_PASSWORD=passwod
healthcheck: #健康检查机制设置,容器健康状态会由这个设置来检查
test: [ "CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", ".", "-U", "sa", "-P", "passwod", "-Q", "SELECT 1" ]
interval: 5m #几分钟检查一次健康状态
timeout: 3s #超时时间
retries: 3 #重试次数
airflow:
image: airflow
container_name: airflow
ports:
- "8080:8080"
depends_on:#依赖情况,会在这里面写好的service name启动完成之后再启动
- db
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8080/health" ]
interval: 5m
timeout: 3s
retries: 3
xxxx:
image: xxxx
container_name: xxxx
ports:
- "5000:5000"
depends_on:
- db
- airflow
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:5000/health_check" ]
interval: 5m
timeout: 3s
retries: 3
如果不规定network,就会默认使用桥接网络,容器之前相互call就可以通过container_name来代替ip,例如这个数据库连接,db就是我的数据库容器的container_name
python
mssql+pymssql://sa:xxxxx@db/database
下面是一些相关命令
bash
docker-compose up #构建并启动所有服务的容器,如果容器已经存在,就直接启动。
docker-compose up -d #在后台构建并启动所有服务的容器,不会显示日志输出。
docker-compose up --build #强制重新构建所有服务的镜像,然后启动容器。
docker-compose up service #只构建并启动指定的服务的容器,service是服务的名称,可以有多个。
docker-compose ps #查看当前docker-compose.yml构建的容器状态
docker-compose down #停止并删除由 docker-compose up 启动的所有容器,同时还会删除相关的网络和卷
docker-compose stop #停止所有通过 docker-compose up 启动的容器,但它们的状态和数据将会保留
docker-compose start #启动所有docker-compose up 创建的但是被stop的容器
docker-compose logs #查看所有docker-compose up 创建容器的log
docker-compose logs container_name #查看指定docker-compose up 创建容器的log
我是先用dockerfile打好了我想使用的images,然后在docker-compose里面指定我自己打的images。
第一次使用镜像部署容器就使用 docker-compose up,加不加-d看自己需求,是不是需要后台启动。
查看健康检查log
这个命令可以单独查看某个容器的健康检查的日志
bash
docker inspect --format "{{json .State.Health }}" container_name
编写.service,配置自启动
bash
sudo nano /etc/systemd/system/your_service_name.service
WorkingDirectory这个需要指向你docker-compose.yml的路径
bash
[Unit]
Description=Docker Compose xxxx Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot #Type=oneshot:表示服务的类型是一次性的,即服务只执行一次 ExecStart 指定的命令,然后退出,不会持续运行。
RemainAfterExit=yes #RemainAfterExit=yes:表示服务在执行完 ExecStart 指定的命令后,仍然保持活跃的状态,不会被 systemd 认为是停止的。
#这两个选项通常一起使用,用于那些只需要执行一次操作,但是需要保持服务状态的场景,比如设置系统的某些参数,或者创建一些标志文件等。
WorkingDirectory=/home/docker_compose
ExecStart=/usr/bin/docker-compose start
ExecStop=/usr/bin/docker-compose stop
User=username
[Install]
WantedBy=multi-user.target
重新加载 systemd 配置:
bash
sudo systemctl daemon-reload
启用 服务,使其在系统启动时自动启动:
bash
sudo systemctl enable your_service_name.service
手动启动 服务:
bash
sudo systemctl start your_service_name
现在,服务将在系统启动时自动启动。你可以使用以下命令检查服务状态:
bash
sudo systemctl status your_service_name
确保在 Active 行中看到 running 表示服务正在运行。
查看具体log
bash
sudo journalctl -f -u your_service_name-n 100