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
相关推荐
Justin_1919 分钟前
K8s常见问题(2)
云原生·容器·kubernetes
广东大榕树信息科技有限公司31 分钟前
动环监控如何有效提升机房环境管理的可靠性与响应速度?
运维·网络·物联网·国产动环监控系统·动环监控系统
zdd567893 小时前
行存表与列存表简述
运维·postgresql
福尔摩斯张3 小时前
Linux的pthread_self函数详解:多线程编程中的身份标识器(超详细)
linux·运维·服务器·网络·网络协议·tcp/ip·php
2401_832298103 小时前
一云多芯时代:云服务器如何打破芯片架构壁垒
运维·服务器·架构
m0_488777653 小时前
运用Docker-compose编排部署设备管理平台(包含nginx的https访问)
docker·容器·docker-compose·服务统一管理
汪碧康3 小时前
二进制kubenetes-1.34.2安装包快速部署k8s集群
云原生·容器·kubernetes·k8s·etcd·xkube
Web极客码3 小时前
如何在 Linux 中终止一个进程?
linux·运维·服务器
我爱学习好爱好爱4 小时前
Docker Compose部署SpringBoot2+Vue3+redis项目(Rockylinux9.6)
redis·docker·容器
一枚正在学习的小白4 小时前
prometheus监控对外服务
运维·prometheus