docker-compose的一些基础知识 —— 筑梦之路

1. 副本数

cat replicas_test.yml

version: '3'
services:
  replicas_test:
    image: centos:7.9
    restart: always
    command: ["sh","-c","sleep 36000"]
    deploy:
      replicas: 2
    healthcheck:
      test: ["CMD-SHELL", "hostname"]
      interval: 10s
      timeout: 5s
      retries: 3

通过配置 deploy.replicas 来控制创建服务容器的数量,但是并非所有场景都适用,b比如Hadoop的有些组件是不适用的,像要求设置主机名和容器名的时候,就不太适用通过这个参数来调整容器的数量。

2. 资源隔离

cat resources_test.yml

version: '3'
services:
  resources_test:
    image: centos:7.9
    restart: always
    command: ["sh","-c","sleep 36000"]
    deploy:
      replicas: 2
      resources:
        # 容器资源申请的最大值,容器最多能适用这么多资源
        limits:
          cpus: '1'
          memory: 100M
        # 所需资源的最小值,跟k8s里的requests一样,就是运行容器的最小值
        reservations:
          cpus: '0.5'
          memory: 50M
    healthcheck:
      test: ["CMD-SHELL", "hostname"]
      interval: 10s
      timeout: 5s
      retries: 3
# 检查验证

docker stats

3. 网络network

network 在容器中是非常重要的一个知识点,所以这里重点以示例讲解的方式来看看不同docker-compose项目之间如果通过名称访问,默认清楚下,每个docker-compose就是一个项目(不同目录,相同目录的多个compose属于一个项目),每个项目就会默认生成一个网络。注意,默认情况下只能在同一个网络中使用名称相互访问。那不同项目中如何通过名称访问呢,接下来就一示例讲解

cat test1/test1.yml

version: '3'
services:
  test1:
    image: centos:7.9
    container_name: c_test1
    hostname: h_test1
    restart: always
    command: ["sh","-c","sleep 36000"]
    healthcheck:
      test: ["CMD-SHELL", "hostname"]
      interval: 10s
      timeout: 5s
      retries: 3

cat test2/test2.yml

version: '3'
services:
  test2:
    image: centos:7.9
    container_name: c_test2
    hostname: h_test2
    restart: always
    command: ["sh","-c","sleep 36000"]
    healthcheck:
      test: ["CMD-SHELL", "hostname"]
      interval: 10s
      timeout: 5s
      retries: 3
docker-compose -f test1/test1.yml up -d
docker-compose -f test2/test2.yml up -d

# 查看network,会生成两个network,如果两个yaml文件在同一个目录下,只会生成一个,它们也就属于同一个network下,是可以通过名称相互访问的。这里是在不同的目录下,就会生成两个network,默认情况下,不同的network是隔离的,不能通过名称访问的。yaml文件所在的目录名就是项目名称。这个项目名称是可以通过参数指定的,下面会细讲。
docker network ls

# 互ping
docker exec -it c_test1 ping c_test2
docker exec -it c_test1 ping h_test2

docker exec -it c_test2 ping c_test1
docker exec -it c_test2 ping h_test1

# 卸载
docker-compose -f test1/test1.yml down
docker-compose -f test2/test2.yml down

 接下来我们加上network再进行测试验证

在 test1/network_test1.yml 定义创建新network,在下面test2/network_test2.yml引用test1创建的网络,那么这两个项目就在同一个网络中了,注意先后执行顺序

version: '3'
services:
  network_test1:
    image: centos:7.9
    container_name: c_network_test1
    hostname: h_network_test1
    restart: always
    command: ["sh","-c","sleep 36000"]
    # 使用network
    networks:
      - test1_network
    healthcheck:
      test: ["CMD-SHELL", "hostname"]
      interval: 10s
      timeout: 5s
      retries: 3

# 定义创建新网络
networks:
  test1_network:
    driver: bridge
version: '3'
services:
  network_test2:
    image: centos:7.9
    container_name: c_network_test2
    hostname: h_network_test2
    restart: always
    networks:
      - test1_network
    command: ["sh","-c","sleep 36000"]
    healthcheck:
      test: ["CMD-SHELL", "hostname"]
      interval: 10s
      timeout: 5s
      retries: 3

# 引用test1的网络
networks:
  # 项目名_网络名,可以通过docker network ls查看network名称
  test1_test1_network:
    external: true
docker-compose -f test1/network_test1.yml up -d
docker-compose -f test2/network_test2.yml up -d

# 查看网络
docker network ls

# 互ping
docker exec -it c_network_test1 ping -c3 c_network_test2 
docker exec -it c_network_test1 ping -c3 h_network_test2
docker exec -it c_network_test2 ping -c3 c_network_test1
docker exec -it c_network_test2 ping -c3 h_network_test1

# 卸载,注意顺序,要先卸载应用方,要不然network被应用了是删除不了的
docker-compose -f test2/network_test2.yml down
docker-compose -f test1/network_test1.yml down

4. 项目

 默认的项目名称就是当前yml文件所在的目录名称,上面讲解network的时候生成的网络名称也会最前面的项目名称,但是项目名称是可以自定义的,示例讲解如下:

# test.yaml
version: '3'
services:
  test:
    image: centos:7.9
    restart: always
    command: ["sh","-c","sleep 36000"]
    healthcheck:
      test: ["CMD-SHELL", "hostname"]
      interval: 10s
      timeout: 5s
      retries: 3

# 先不加参数
docker-compose -f test.yaml up -d
# 查看网络
docker network ls

# 使用参数自定义项目名称,-p, --project-name,有四种写法

docker-compose -p=p001 -f test.yaml up -d
docker-compose -p p002 -f test.yaml up -d

docker-compose --project-name=p003 -f test.yaml up -d
docker-compose --project-name p004 -f test.yaml up -d

# 查看网络
docker network ls

# 查看所有项目
docker-compose ls

猜你喜欢

转载自blog.csdn.net/qq_34777982/article/details/131043470