docker入門加實戰—專案部署之DockrCompose

2023-10-23 21:01:16

docker入門加實戰—專案部署之DockrCompose

我們部署一個簡單的java專案,可能就包含3個容器:

  • MySQL
  • Nginx
  • Java專案

而稍微複雜的專案,其中還會有各種各樣的其它中介軟體,需要部署的東西遠不止3個。如果手動的逐一部署,就太麻煩了,同時也無法保證完整性。

而Docker Compose就可以幫助我們實現多個相互關聯的Docker容器的快速部署。它允許使用者通過一個單獨的 docker-compose.yml 模板檔案(YAML 格式)來定義一組相關聯的應用容器。

基本用法

docker-compose.yml檔案的基本語法可以參考官方檔案:

https://docs.docker.com/compose/compose-file/compose-file-v3/

docker-compose檔案中可以定義多個相互關聯的應用容器,每一個應用容器被稱為一個服務(service)。由於service就是在定義某個應用的執行時引數,因此與docker run引數非常相似。

舉例來說,用docker run部署MySQL的命令如下:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  --network sjdwz_network
  mysql

如果用docker-compose.yml檔案來定義,就是這樣:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
    networks:
      - new
networks:
  new:
    name: sjdwz_network

為了方便寫路徑,把我們的dokcerFIle檔案和jar包放到/root目錄;

/root/sjdwz_demo裡的檔案我們就不使用了。

我們的專案部署compose檔案如下:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - sjdwz-new-network
  sjdwzinstance:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: sjdwzinstance
    ports:
      - "8080:8080"
    networks:
      - sjdwz-new-network
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - sjdwzinstance
    networks:
      - sjdwz-new-network
networks:
  sjdwz-new-network:
    name: sjdwz-new-network

基礎命令

編寫好docker-compose.yml檔案,就可以部署專案了。常見的命令:

https://docs.docker.com/compose/reference/

基本語法如下:

docker compose [OPTIONS] [COMMAND]

其中,OPTIONS和COMMAND都是可選引數,比較常見的有:

型別 引數或指令 說明
Options -f 指定compose檔案的路徑和名稱
-p 指定project名稱。project就是當前compose檔案中設定的多個service的集合,是邏輯概念
Commands up 建立並啟動所有service容器
down 停止並移除所有容器、網路
ps 列出所有啟動的容器
logs 檢視指定容器的紀錄檔
stop 停止容器
start 啟動容器
restart 重啟容器
top 檢視執行的程序
exec 在指定的執行中容器中執行命令

把我們的dockerCompose檔案放到/root目錄;

# 1.進入root目錄
cd /root

# 2.刪除舊容器
docker rm -f $(docker ps -qa)

# 3.刪除sjdwzservice映象
docker rmi sjdwzservice

# 4.清空MySQL資料
rm -rf mysql/data

# 5.啟動所有, -d 引數是後臺啟動;沒有-f檔案是因為我們的compose檔案就在這裡,名字也是叫docker-compose.yml,所以不用加
docker compose up -d

檢視映象

docker compose images

存取如下