ubuntu docker-compose 编排容器并且设置自启动

安装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
相关推荐
青木沐6 分钟前
Jenkins介绍
运维·jenkins
WTT001141 分钟前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋31 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
日记跟新中1 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
明 庭2 小时前
Ubuntu下通过Docker部署NGINX服务器
服务器·ubuntu·docker
BUG 4042 小时前
Linux——Shell
linux·运维·服务器
大霞上仙2 小时前
Linux 多命令执行
linux·运维·服务器
冷心笑看丽美人2 小时前
探索 Samba 服务器:搭建跨平台文件共享的桥梁
运维·服务器