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
相关推荐
沸速存储5 小时前
整机瓶颈判断思路,自上而下定位卡顿根源
运维·服务器·电脑·内容运营
BullSmall6 小时前
Anolis OS 8.10 Docker 部署 PostgreSQL 15 完整实操
docker·postgresql·容器
奈斯先生Vector6 小时前
告别工具碎片化:基于 Nano Banana 全模态 AI 聚合架构搭建“文本-图像-视频”自动化协同生产线
运维·数据库·人工智能·架构·自动化·aigc·音视频
DLYSB_7 小时前
AIOps 大模型实战:基于 LangChain 运维 Agent 的根因诊断与现场声光播报闭环
运维·langchain·报警灯
一可米9 小时前
gitHub.com Actions自动化发布
运维·自动化·github
智塑未来9 小时前
证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景
运维·科技·区块链
java_logo10 小时前
Docker 部署 CUPS Web:浏览器即可管理打印机与打印任务
docker·容器·打印机·轩辕镜像·cups web·cups web 镜像部署·cups web 部署教程
酷可达拉斯10 小时前
自动化运维-ansible配置文件与主机清单
linux·运维·自动化·ansible
来者皆善11 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
4/5$全真龙门11 小时前
廉价易行的内网穿透
运维