1

docker compose简介

 1 year ago
source link: https://vearne.cc/archives/40005
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

你听说过docker-compose吗?在萌叔看来,docker-compose相当于单机且简化版的k8s。
可以简单的编写一个yaml文件,在yaml文件指定多个container。然后可以通过docker-compose,一次性启动和停止多个服务。
它有几个应用场景:

  • 自动化测试

特别是自动化测试这个场景。比如有一个服务依赖数据库MySQL,要完成自动化测试,显然我们需要一个干净的MySQL。用k8s来完成服务和MySQL的部署成本太高,有点杀鸡用牛刀的感觉。并且多个人同时运行的话,还有可能产生冲突。docker-compose由于是单机运行,可以确保多人同时运行互相不冲突。

2.minio示例

该示例包含一个由4个container组成的minio集群,以及一个nginx container对外暴露minio集群的管理后台和API接口
Deploy MinIO on Docker Compose

创建本地目录

mkdir -p ~/mydata/minio/data1-1
mkdir -p ~/mydata/minio/data1-2
mkdir -p ~/mydata/minio/data2-1
mkdir -p ~/mydata/minio/data2-2
mkdir -p ~/mydata/minio/data3-1
mkdir -p ~/mydata/minio/data3-2
mkdir -p ~/mydata/minio/data4-1
mkdir -p ~/mydata/minio/data4-2

编写nginx的配置文件

~/mydata/minio/proxy.conf

upstream minio_console {
    server minio1:9001 max_fails=3 fail_timeout=5s;
    server minio2:9001 max_fails=3 fail_timeout=5s;
    server minio3:9001 max_fails=3 fail_timeout=5s;
    server minio4:9001 max_fails=3 fail_timeout=5s;
}
upstream minio_api {
    # 多个服务之间可以通过服务名称相互访问
    server minio1:9000 max_fails=3 fail_timeout=5s;
    server minio2:9000 max_fails=3 fail_timeout=5s;
    server minio3:9000 max_fails=3 fail_timeout=5s;
    server minio4:9000 max_fails=3 fail_timeout=5s;
}
server {
    listen          9001;  
    location / {
        proxy_pass              http://minio_console;
    }
}
server {
    listen          9000;
    location / {
        proxy_pass              http://minio_api;
    }
}

创建一个文件夹minio-distributed

mkdir minio-distributed

编写docker compose需要的YAML文件

在minio-distributed目录下编写文件docker-compose.yaml
在docker的体系中,以包含docker-compose.yaml文件的文件夹作为一个项目,文件夹的名称就是项目名称

# Settings and configurations that are common for all containers
# minio实例之间通过服务名称相互访问
x-minio-common: &minio-common
  image: quay.io/minio/minio:RELEASE.2022-10-20T00-55-09Z
  command: server --console-address ":9001" http://minio{1...4}/data{1...2}
  expose:
    - "9000"
    - "9001"
  # environment:
    # MINIO_ROOT_USER: minioadmin
    # MINIO_ROOT_PASSWORD: minioadmin
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
    interval: 30s
    timeout: 20s
    retries: 3

# starts 4 docker containers running minio server instances.
# using nginx reverse proxy, load balancing, you can access
# it through port 9000.
services:
  minio1:  # 服务名称(由用户自定义)
    <<: *minio-common
    hostname: minio1
    volumes:
      - ~/mydata/minio/data1-1:/data1
      - ~/mydata/minio/data1-2:/data2

  minio2:   
    <<: *minio-common
    hostname: minio2
    volumes:
      - ~/mydata/minio/data2-1:/data1
      - ~/mydata/minio/data2-2:/data2

  minio3:
    <<: *minio-common
    hostname: minio3
    volumes:
      - ~/mydata/minio/data3-1:/data1
      - ~/mydata/minio/data3-2:/data2

  minio4:
    <<: *minio-common
    hostname: minio4
    volumes:
      - ~/mydata/minio/data4-1:/data1
      - ~/mydata/minio/data4-2:/data2

  nginx:
    image: nginx:1.19.2-alpine
    hostname: nginx
    volumes:
      - ~/mydata/minio/proxy.conf:/etc/nginx/conf.d/proxy.conf:ro
    ports:
      - "9000:9000"  # 对外部暴露端口
      - "9001:9001"
    depends_on:    # 指定服务之间的依赖关系,启动时时间上会有先后
      - minio1
      - minio2
      - minio3
      - minio4

启动&停止

创建资源&启动(运行在后台)

docker compose up -d

创建资源&启动(运行在前台)

docker compose up

显示启动的服务

docker compose ps

02c738ba-55b8-11ed-b338-5626e1cdcfe2.jpeg
红色框内的是容器名称,蓝色的是服务名称,服务之间可以使用服务名称相互访问。 大家可能已经注意到了容器名称为”{项目名}-{服务名}-{数字编号}”

每个compose项目使用独立的网络

docker network ls

输出

bcfa3754-55b9-11ed-9b2f-5626e1cdcfe2.jpeg

停止&清理资源

docker compose down

此命令会移除项目依赖的网络,并从磁盘上删除容器
相当于执行了

docker network rm <NETWORK>
docker rm -vf <CONTAINER>

其它常用命令

docker compose start
docker compose stop

查看对应服务的日志

docker compose logs <name-of-service>

Minio效果

可以在浏览器中访问minio的控制台

http://localhost:9001/

初始用户名和密码为 minioadmin

0b1fe620-55b2-11ed-965c-5626e1cdcfe2.jpeg

1.docker-compose
2.Deploy MinIO on Docker Compose


微信公众号

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK