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
相关推荐
XIAOHEZIcode15 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化