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

安装docker-compose

sudo apt install docker-compose

编写docker-compose.yml

这是我的docker-compose,里面写了5个容器,一个sqlserver的db,一个airlfow,一个我的主项目,会根据里面规定好的启动顺序启动。

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

mssql+pymssql://sa:xxxxx@db/database

下面是一些相关命令 

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


这个命令可以单独查看某个容器的健康检查的日志

docker inspect --format "{{json .State.Health }}" container_name

编写.service,配置自启动

sudo nano /etc/systemd/system/your_service_name.service

WorkingDirectory这个需要指向你docker-compose.yml的路径

[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 配置:

sudo systemctl daemon-reload


启用 服务,使其在系统启动时自动启动:

sudo systemctl enable your_service_name.service


手动启动 服务:

sudo systemctl start your_service_name


现在,服务将在系统启动时自动启动。你可以使用以下命令检查服务状态:

sudo systemctl status your_service_name


确保在 Active 行中看到 running 表示服务正在运行。

查看具体log

sudo journalctl -f -u your_service_name-n 100

相关推荐

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

    2024-03-15 17:56:04       22 阅读
  2. Centos设置docker启动,以及容器程序启动

    2024-03-15 17:56:04       21 阅读
  3. Docker Compose 容器编排

    2024-03-15 17:56:04       32 阅读
  4. Docker compose容器编排

    2024-03-15 17:56:04       24 阅读
  5. Docker-Compose容器编排

    2024-03-15 17:56:04       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 17:56:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 17:56:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 17:56:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 17:56:04       20 阅读

热门阅读

  1. 安卓实现沉浸式安卓状态栏实现

    2024-03-15 17:56:04       17 阅读
  2. 实景剧本杀小程序开发搭建

    2024-03-15 17:56:04       21 阅读
  3. Spring Boot写一个简单的PDF到Word的转换程序

    2024-03-15 17:56:04       19 阅读
  4. LinearLayout和RelativeLayout对比

    2024-03-15 17:56:04       22 阅读
  5. 利益相关者理论(stakeholder theory)

    2024-03-15 17:56:04       17 阅读
  6. 简单聊一下 Python asyncio

    2024-03-15 17:56:04       20 阅读
  7. 2085. 统计出现过一次的公共字符串

    2024-03-15 17:56:04       19 阅读
  8. MySQL--索引常见面试题详解

    2024-03-15 17:56:04       22 阅读
  9. Python中,如何检查一个变量是否存在?

    2024-03-15 17:56:04       19 阅读
  10. 【Android】源码中的单例模式

    2024-03-15 17:56:04       19 阅读
  11. 服务器通常会遭到哪些攻击手段?

    2024-03-15 17:56:04       21 阅读
  12. 无人机的航向角

    2024-03-15 17:56:04       20 阅读