Docker Compose 概述

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。

其是官方的一个开源项目,托管到github上

https://github.com/docker/compose

主要功能


1. 定义服务:
使用 YAML 格式的配置文件来定义一组相关的容器服务。每个服务可以指定镜像、端口映射、
环境变量、存储卷等参数。
例如,可以在配置文件中定义一个 Web 服务和一个数据库服务,以及它们之间的连接关系。
2. 一键启动和停止:
通过一个简单的命令,可以启动或停止整个应用程序所包含的所有容器。这大大简化了多容器
应用的部署和管理过程。
例如,使用 docker-compose up 命令可以启动配置文件中定义的所有服务,使用 docker compose
 down
命令可以停止并删除这些服务。
3. 服务编排:
可以定义容器之间的依赖关系,确保服务按照正确的顺序启动和停止。例如,可以指定数据库
服务必须在 Web 服务之前启动。
支持网络配置,使不同服务的容器可以相互通信。可以定义一个自定义的网络,将所有相关的
容器连接到这个网络上。
4. 环境变量管理:
可以在配置文件中定义环境变量,并在容器启动时传递给容器。这使得在不同环境(如开发、
测试和生产环境)中使用不同的配置变得更加容易。
例如,可以定义一个数据库连接字符串的环境变量,在不同环境中可以设置不同的值。

工作原理

1. 读取配置文件
Docker Compose 读取 YAML 配置文件,解析其中定义的服务和参数。

2. 创建容器
根据配置文件中的定义,Docker Compose 调用 Docker 引擎创建相应的容器。它会下载所需
的镜像(如果本地没有),并设置容器的各种参数。

3. 管理容器生命周期
Docker Compose 监控容器的状态,并在需要时启动、停止、重启容器。
它还可以处理容器的故障恢复,例如自动重启失败的容器。

 

Docker Compose 中的管理层
1. 服务 (service) 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
2. 项目 (project) 由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中
定义
3. 容器(container)容器是服务的具体实例,每个服务可以有一个或多个容器。容器是基于服务定义的镜像创建的运行实例


[root@ens160 ~]# vim ~/.vimrc

set ts=2 sw=2 ai et
 

[root@ens160 test]# vim docker-compose.yml

查询docker compose ps得在yaml文件所在的目录查询

停止不会删除容器

down会把容器删掉

运行的不会默认的docker-compose.yml

[root@ens160 test]# docker compose -f lilee.yml up -d
 

不用加version ,rhel7要加

查看日志

[root@ens160 test]# docker compose logs -f lilee.yml logs web
 

构建镜像

[root@ens160 test]# cat docker-compose.yml
services:
  test1:
    image: test1
    build:
      context: /root/docker
      dockerfile: Dockerfile
    command: ["/bin/sh",-c,"sleep 100000"]
    container_name: lee1
  test2:
    image: test2
    build:
      context: /root/docker
      dockerfile: lee
    command: ["/bin/sh",-c,"sleep 100000"]
    container_name: lee2

[root@ens160 docker]# cd test/
[root@ens160 test]# docker compose up -d

[root@ens160 test]# pwd
/root/docker/test


warning


[root@ens160 test]# docker compose build
 

[root@ens160 test]# docker compose up -d
 

[root@ens160 test]# docker compose exec -it test1 /bin/sh
 

检查语法

[root@ens160 test]# docker compose  config
没有问题则打印

[root@ens160 test]# docker compose  config -q
 

未开端口

mysql


[root@ens160 test]# docker inspect test-test1-1

网络

默认网络

利用网络自带的网络

默认是docker0上的网络

none同样的设定 network_mode: none

自定义

会报错

services:
  test1:
    image: busybox:latest
    container_name: test
    command: ["/bin/sh","-c","sleep 100000"]
    network_mode: default
  test2:
    image: busybox:latest
    container_name: test2
    command: ["/bin/sh","-c","sleep 100000"]
    networks:
      - mynet1
      - mynet2
networks:
  default:
    external: true
    name: bridge

  mynet1:
    driver: bridge
  mynet2:
    ipam:
      driver: default
      config:
        - subnet: 172.26.0.0/24
          gateway: 172.26.0.254

数据卷

services:
  test1:
    image: busybox:latest
    container_name: test
    command: ["/bin/sh","-c","sleep 100000"]
    network_mode: default
  test2:
    image: busybox:latest
    container_name: test2
    command: ["/bin/sh","-c","sleep 100000"]
    networks:
      - mynet1
      - mynet2
    volumes:
      - data:/data
networks:
  default:
    external: true
    name: bridge

  mynet1:
    driver: bridge
  mynet2:
    ipam:
      driver: default
      config:
        - subnet: 172.26.0.0/24
          gateway: 172.26.0.254

volumes:
    data:
      name: lee

compose企业示例

[root@ens160 test]# dnf install haproxy -y --downloadonly --downloaddir=/mnt
 

[root@ens160 conf]# vi haproxy.cfg
 

services:
  web1:
    image: nginx:1.23
    container_name: web1
    expose:
      - 80
    volumes:
      - web1_data:/usr/share/nginx/html
    networks:
      - mynet1

  web2:
    image: nginx:1.23
    container_name: web2
    expose:
      - 80
    volumes:
      - web2_data:/usr/share/nginx/html
    networks:
      - mynet1


  haproxy:
    image: haproxy:2.3
    container_name: haproxy
    expose:
      - 80
    ports:
      - "80:80"
    volumes:
      - /mnt/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
    networks:
      - mynet1

networks:
  mynet1:
    driver: bridge

volumes:
  web1_data:
    name: web1_data
  web2_data:
    name: web2_data

[root@ens160 haproxy]# mv haproxy.cfg /mnt
[root@ens160 haproxy]# cd /mnt/
 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐