Docker編排利器DockerCompose

IT王小二 發表於 2021-07-26

Docker 編排利器 DockerCompose,編排之後可以一次性通過一條命令啟動一組服務

例如一條命令啟動 SpringBoot 專案,同時啟動 SpringBoot 專案依賴的其他中介軟體(MySQL、Redis等)

系列文章歡迎訪問:https://www.itwxe.com/posts/9e76db89/

一、安裝DockerCompose

1、下載 Docker Compose 。

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2、授予 docker-compose 檔案可執行許可權。

chmod +x /usr/local/bin/docker-compose

3、檢視會否安裝成功。

docker-compose --version

docker-compose-version

二、DockerCompose詳解

1. 使用DockerCompose步驟

  • 使用 Dockerfile 構建自定義映象上傳伺服器,一般需要修改初始映象行為時才需要使用。
  • 使用 docker-compose.yml 檔案定義需要部署的應用程式服務,這樣它們可以在隔離環境中一起執行,以便執行指令碼一次性部署。
  • 最後執行 docker-compose up 命令來建立並啟動所有服務。

2. docker-compose.yml常用命令

version

描述 Compose 檔案的版本資訊,各版本詳細資訊可以參考 官方文件

# 指定 3 版本語法
version: '3'

services

services 節點下面的即是定義的各種服務,服務之下為容器,容器與容器直之間可以以服務名稱為域名進行訪問。

image

指定執行的映象名稱。

# 指定映象為 mysql5.7
image: mysql:5.7

container_name

指定容器名稱。

# 容器名稱
container_name: admin_mysql

ports

指定宿主機和容器的埠對映。

# 對映 mysql埠
ports:
  - 3306:3306

volumes

將宿主機的檔案或目錄掛載到容器中。

# 掛載 mysql 目錄到容器
volumes:
  - /itwxe/dockerData/mysql/data:/var/lib/mysql
  - /itwxe/dockerData/mysql/conf:/etc/mysql
  - /itwxe/dockerData/mysql/log:/var/log/mysql

environment

配置環境變數。

# 設定 mysql 密碼
environment:
  - MYSQL_ROOT_PASSWORD=root

links

連線其他容器的服務。

# 可以 admin_mysql 為域名訪問服務名稱為 db 的容器
links:
  - db:admin_mysql

3. Docker Compose常用命令

啟動所有相關容器

docker-compose up -d

指定檔案啟動

docker-compose -f docker-compose.yml up -d

停止所有相關容器

docker-compose stop

列出所有容器資訊

docker-compose ps

停止並刪除所有容器(注意資料掛載)

docker-compose down

三、SpringBoot示例

此處還是以自己寫的專案為示例,我的專案依賴 MySQL、Redis、minio(非必要)。

1、打包 SpringBoot 專案映象,打包可以參考 Docker使用maven外掛打包SpringBoot專案

2、我的專案啟動依賴 MySQL 中的 sunny 庫,首先得建立容器,掛載宿主機目錄,可以參考 Docker搭建MySQL並掛載資料

3、專案依賴 Redis 映象自定義配置啟動,可以參考 Docker搭建Redis5.0並掛載資料

4、修改專案 MySQL 和 Redis 使用別名訪問,以 MySQL 為例。

# 修改前
jdbc:mysql://192.168.5.33:3306/sunny?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=GMT%2B8

# 修改後
jdbc:mysql://admin_mysql:3306/sunny?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=GMT%2B8

5、編輯 docker-compose.yml 檔案。

version: '3'
services:
  # 指定MySQL服務名稱
  mysql:
    # 指定服務使用的映象
    image: mysql:5.7
    # 指定容器名稱
    container_name: admin_mysql
    # 指定服務執行的埠
    ports:
      - 3306:3306
    # 指定容器中需要掛載的檔案
    volumes:
      - /itwxe/dockerData/mysql/data:/var/lib/mysql
      - /itwxe/dockerData/mysql/conf:/etc/mysql
      - /itwxe/dockerData/mysql/log:/var/log/mysql
    # 指定容器的環境變數
    environment:
      - MYSQL_ROOT_PASSWORD=123456
  # 指定Redis服務名稱
  redis:
    # 使用自定義映象(指定配置檔案)
    image: itwxe/redis:5.0.8
    container_name: admin_redis
    ports:
      - 6379:6379
    volumes:
      - /itwxe/dockerData/redis/data:/data
  # 指定專案服務名稱
  sunny-admin:
    # 指定服務使用的映象
    image: itwxe/sunny-admin:0.0.1
    # 指定容器名稱
    container_name: sunny-admin
    # 指定服務執行的埠
    ports:
      - 9002:9002
    # 指定容器中需要掛載的檔案
    volumes:
      - /itwxe/dockerData/sunny-admin/logs:/var/logs
    # 指定別名,專案yml中可以通過別名訪問,例如:
    links:
      - mysql:admin_mysql
      - redis:admin_redis

6、進入 docker-compose.yml 檔案目錄,啟動服務。

docker-compose up -d

docker-compose啟動服務

可以看到服務都正常啟動了,此時可以訪問下專案,專案正常訪問。

docker-compose啟動一組服務

都讀到這裡了,來個 點贊、評論、關注、收藏 吧!

文章作者:IT王小二
首發地址:https://www.itwxe.com/posts/e4feb9b4/
版權宣告:文章內容遵循 署名-非商業性使用-禁止演繹 4.0 國際 進行許可,除特殊宣告外皆為原創,轉載請在文章頁面明顯位置給出作者與原文連結。