利用Docker Compose进行多容器管理

by CUNOE, May 22, 2022

前两天因为要在服务器上部署MySQL方便我进行项目的开发,但是发现我服务器上的Docker容器有点多,于是想到了之前看见的Docker Compose的多容器管理工具

思路

Docker Compose是一个很易于使用的多容器管理方案 基本思路如下

  1. 编写docker-compose.yml
  2. 执行docker compose -f /path/to/docker-compose.yml up -d

docker-compose.yml

version: '3.8'

services:

  # mysql容器
  cunoe-mysql:
    image: mysql:5.7
    container_name: cunoe-mysql
    restart: always
    environment:
      - MYSQL_USER=cunoe
      - MYSQL_PASSWORD=<Password>
      - MYSQL_ROOT_PASSWORD=<RootPassword>
      - MYSQL_ALLOW_EMPTY_PASSWORD=no
      - MYSQL_DATABASE=rankv1
    ports:
      - 3306:3306
    networks:
      - cunoenet
      
  # phpmyadmin容器
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: cunoe-phpmyadmin
    depends_on: 
      - cunoe-mysql
    ports:
      - 3000:80
    environment:
      - MYSQL_USER=root
      - MYSQL_PASSWORD=<Password>
      - MYSQL_ROOT_PASSWORD=<RootPassword>
      - PMA_HOST=cunoe-mysql
    networks:
      - cunoenet
      
  # portainer容器
  portainer:
    image: portainer/portainer-ce:2.0.1
    container_name: cunoe-portainer
    restart: always
    ports:
      - 3001:9000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - cunoenet

  # frps容器
  frps:
    image: snowdreamtech/frps:latest
    container_name: cunoe-frps
    restart: always
    network_mode: host
    volumes:
      - /etc/frp/frps.ini:/etc/frp/frps.ini

  # Aria2服务
  aria2:
    image: p3terx/aria2-pro
    container_name: cunoe-aria2
    restart: unless-stopped
    network_mode: host
    logging:
      driver: json-file
      options:
        max-size: 1m
    environment:
      - PUID=65534
      - PGID=65534
      - UMASK_SET=022
      - RPC_SECRET=<TOKEN>
      - RPC_PORT=6800
      - LISTEN_PORT=6888
      - DISK_CACHE=64M
      - IPV6_MODE=false
      - UPDATE_TRACKERS=true
      - CUSTOM_TRACKER_URL=<Tracker URL>
      - TZ=Asia/Shanghai
    volumes:
      - /etc/aria2/config:/config
      - /home/webdav:/downloads

  # AriaNg服务
  AriaNg:
    container_name: cunoe-ariang
    image: p3terx/ariang
    command: --port 3002
    network_mode: host
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: 1m

  # webdav服务
  webdav:
    image: ugeek/webdav:amd64
    container_name: cunoe-webdav
    volumes:
      - /home/webdav:/media
    environment:
      - USERNAME=admin
      - PASSWORD=password
      - TZ=Asia/Shanghai
      - UDI=1000
      - GID=1000
    ports:
      - 3003:80


# 创建网络
networks:
  cunoenet:
    driver: bridge

实质上跟一行一行的docker run差不多

nginx.conf

通过Nginx进行端口的反向代理即可完成部署

``````more``````
        

# phpmyadmin
        location ^~ /db/ {
            proxy_pass  http://127.0.0.1:3000/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
# portainer
        location ^~ /docker/ {
            proxy_pass  http://127.0.0.1:3001/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
# Ariang
        location ^~ /ariang/ {
            proxy_pass  http://127.0.0.1:3002/;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

# Webdav
        location ^~ / {
            proxy_pass  http://127.0.0.1:3003;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
        location /jsonrpc {
            proxy_redirect off;
            proxy_pass http://127.0.0.1:6800/jsonrpc;       #配置为你Aria2的RPC即可
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        
``````more``````