博客 / 詳情

返回

docker-compse部署docker容器示例

一、什麼是 Docker Compose

Docker Compose 是一個用於定義和運行多容器 Docker 應用程序的工具。

 

作用:

通過一個名為 docker-compose.yml(或 compose.yaml)的配置文件,可以:

  • 用代碼描述多個服務(如 Web 服務器、數據庫、緩存等);
  • 定義它們之間的依賴關係、網絡、卷(數據持久化)等;
  • 用一條命令(如 docker compose up)一鍵啓動或停止整個應用棧。

 

注意:從 Docker Desktop 較新版本(特別是 v2.0 以後),docker-compose 功能被集成進 docker 命令,作為子命令使用。

這種形式稱為 Compose V2,它是一個插件,語法幾乎完全兼容,但命令格式略有不同。

 

場景           | 寫法
舊版命令    | docker-compose
新版(V2)| 命令 docker compose
通用名稱/文檔中 | Docker Compose

 

一般來説,一個完整的項目就對應一個DockerCompose 文件-

定義容器之後,還需要去描述關於容器的一些參數信息。比如端口,內存大小等等。

前提:需要描述清楚容器信息。它才能夠去幫助我們部署容器。

 

二、服務器如何安裝配置 Docker Compose

查看安裝信息-

docker compose version

image

如果沒有信息,則單獨安裝,安裝命令為:

sudo yum install -y docker-compose-plugin

 

三、創建 docker-compose.yml  文件

 建議名稱最好是固定。

然後配置內容,示例如下-

version: '3.8' # 明確指定版本,避免兼容性問題

services:
mysql: # 服務名稱
image: mysql:5.7 # 鏡像名稱
container_name: mysql # 容器名稱
ports: # 宿主機:容器的映射端口
- "43157:3306"
environment: # 環境配置
TZ: Asia/Shanghai # 時區
MYSQL_ROOT_PASSWORD: 123456 # 數據庫密碼
volumes: # 掛載的路徑和文件
- "/opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf"
- "/opt/u01/exam/mysql/logs:/var/log/mysql"
- "/opt/u01/exam/mysql/data:/var/lib/mysql"
networks: # 加入的docker網絡
- exam-net
restart: unless-stopped # 重啓策略
redis:
image: redis:5.0.9
container_name: redis
ports:
- "6379:6379"
environment:
TZ: Asia/Shanghai
volumes:
- "/opt/u01/exam/redis/redis.conf:/usr/local/etc/redis/redis.conf"
- "/opt/u01/exam/redis/data:/data"
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
restart: unless-stopped
networks:
- exam-net
web:
build:
context: ./java # 注意路徑
dockerfile: Dockerfile # 注意路徑
image: my-web:latest # 指定固定鏡像名
container_name: web
ports:
- "8080:8080"
environment:
TZ: Asia/Shanghai
volumes:
- "/opt/u01/exam/java/logs:/app/logs"
networks:
- exam-net
depends_on:
- mysql
- redis
restart: unless-stopped # 重啓策略
user: "1000:1000" # 顯式指定 UID:GID-解決權限問題
nginx:
image: nginx:1.24.0
container_name: nginx
ports:
- "443:443"
volumes:
- "/opt/u01/exam/nginx/html:/usr/share/nginx/html" # 掛載靜態文件目錄
- "/opt/u01/exam/nginx/log:/var/log/nginx" # 掛載日誌目錄
- "/opt/u01/exam/nginx/sslkey:/etc/nginx/ssl:ro" # 掛載證書目錄(只讀) 你的 SSL 證書和私鑰 不需要被容器修改
- "/opt/u01/exam/nginx/nginx.conf:/etc/nginx/nginx.conf" # 掛載主配置文件
- "/opt/u01/exam/nginx/conf.d:/etc/nginx/conf.d" # 掛載其他配置文件
logging:
driver: "json-file" # 明確指定使用 json-file 驅動
options:
max-size: "100m" # 單個日誌文件最大 100MB
max-file: "30" # 最多保留 3 個日誌文件(包括當前正在寫入的)
tag: "{{.Name}}/{{.ID}}" # 日誌標籤,方便識別
networks:
- exam-net
depends_on:
- web
restart: unless-stopped # 重啓策略
networks: # docker-網絡設置
exam-net:
name: exam-network

image

 

 

説明:上面的配置中,會先創建網絡,然後在啓動各個容器服務,啓動容器之後,會自動添加到docker創建的網絡中。

同一台服務器上,各個服務之間就可以直接使用 容器的名稱來相互訪問。 

以mysql配置為例,以下為詳細的配置講解-

mysql: # 服務名稱
image: mysql:5.7 # 鏡像名稱
container_name: mysql # 容器名稱
ports: # 宿主機:容器的映射端口
- "43157:3306"
environment: # 環境配置
TZ: Asia/Shanghai # 時區
MYSQL_ROOT_PASSWORD: 123456 # 數據庫密碼
volumes: # 掛載的路徑和文件
- "/opt/u01/exam/mysql/my.cnf:/etc/mysql/my.cnf"
- "/opt/u01/exam/mysql/logs:/var/log/mysql"
- "/opt/u01/exam/mysql/data:/var/lib/mysql"
networks: # 加入的網絡
- exam-net
restart: unless-stopped # 重啓策略

 

四、停止、啓動服務常用命令

docker compose  up -d --build

命令解釋:docker compose v2 版本命令使用docker compose ;

up 表示啓動所有服務;

-d 表示在後台啓動服務,即使退出當前窗口,服務還會繼續運行。

--build 表示我在啓動容器時,需要構建鏡像,這一步不是必須的,有就添加,沒有就不添加。

 

注意事項:只能在docker-compose.yml所在的同一級目錄下,才能夠執行docker compose命令

 

停止所有容器服務的命令為:

docker compose  down

 

個人服務器路徑如下

exam/

-docker-compose.yml

-java(目錄)

-mysql(目錄)

-nginx(目錄)

-redis(目錄)

 

查看所有已經啓動的容器信息:docker compose ps 

image

 

查看某個容器日誌的命令

# 查看所有服務的日誌

docker compose logs

# 查看某個特定服務的日誌(例如 web)

docker compose logs web

image

 

單獨重啓某一個容器-

docker compose restart 容器名

docker compose restart nginx

 

實時跟蹤某個服務的日誌(類似 tail -f

docker compose logs -f <服務名>

docker compose logs -f nginx

 

基礎命令-

image

 查看狀態與日誌-

image

 管理單個服務-

image

 構建與更新-

image

 其他實用命令-

image

 IT技術學習-優先推薦使用千問-專業,就是好用!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.