Docker-compose 常用命令和模板

在睡觉24發表於2024-05-15
docker-compose logs -f   ##檢視該容器的啟動的日誌列印(日誌從頭列印

docker logs -f container_id    ##檢視某一容器的啟動的日誌列印(日誌從頭列印)

docker logs -f --tail(-t) 數量詞 container_id  ##檢視某一容器的啟動的日誌列印(檢視最後n條日誌列印)

Compose 模板檔案

模板檔案是使用 Compose 的核心,涉及到的指令關鍵字也比較多。但大家不用擔心,這裡面大部分指令跟 docker run 相關引數的含義都是類似的。
預設的模板檔名稱為 docker-compose.yml ,格式為 YAML 格式。

下面分別介紹各個指令的用法:

build

指定 Dockerfile 所在資料夾的路徑(可以是絕對路徑,或者相對 dockercompose.yml 檔案的路徑)。
Compose 將會利用它自動構建這個映象,然後使用這個映象。

build: /path/to/build/dir

image

指定為映象名稱或映象 ID。如果映象在本地不存在,Compose 將會嘗試拉去這個映象。

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

labels

為容器新增 Docker 後設資料(metadata)資訊。例如可以為容器新增輔助說明資訊。

labels:
  com.startupteam.description: "webapp for a startup team"
  com.startupteam.department: "devops department"
  com.startupteam.release: "rc3 for v1.0"

links

連結到其它服務中的容器。使用服務名稱(同時作為別名)或 服務名稱:服務別名(SERVICE:ALIAS) 格式都可以。

links:
 - db
 - db:database
 - redis
###使用的別名將會自動在服務容器中的  /etc/hosts  裡建立。
例如:
172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis

net

設定網路模式。和docker client的-net引數相同

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

cap_add, cap_drop

指定容器的核心能力(capacity)分配。

##例如
讓容器擁有所有能力可以指定為:
cap_add:- ALL
去掉 NET_ADMIN 能力可以指定為:
cap_drop:- NET_ADMIN

command

覆蓋容器啟動後預設執行的命令。

command: echo "hello world"

container_name

指定容器名稱。預設將會使用 專案名稱_服務名稱_序號 這樣的格式。

container_name: docker-web-container

注意:指定容器名稱後,該服務將無法進行擴充套件(scale),因為 Docker 不允許多個容器具有相同的名稱。

devices

指定裝置對映關係。

devices:- "/dev/ttyUSB1:/dev/ttyUSB0"

dns

自定義 DNS 伺服器。可以是一個值,也可以是一個列表。

dns: 8.8.8.8
 dns:- 8.8.8.8- 9.9.9.

dockerfile

如果需要指定額外的編譯映象的 Dockefile 檔案,可以透過該指令來指定。

dockerfile: Dockerfile-alternate

注意,該指令不能跟 image 同時使用,否則 Compose 將不知道根據哪個指令來生成最終的服務映象。

environment

設定環境變數。你可以使用陣列或字典兩種格式。

只給定名稱的變數會自動獲取執行 Compose 主機上對應變數的值,可以用來防止洩露不必要的資料。

##例如
environment:
  RACK_ENV: development
  SESSION_SECRET:
###或者
environment:
  - RACK_ENV=development
  - SESSION_SECRET

注意:如果變數名稱或者值中用到 true|false,yes|no 等表達布林含義的詞
匯,最好放到引號裡,避免 YAML 自動解析某些內容為對應的布林語義。

expose

暴露埠,但不對映到宿主機,只被連線的服務訪問。僅可以指定內部埠為引數

expose:
  - "3000"
  - "8000

ports

暴露埠資訊。用於將容器的埠對映到主機上的埠

使用宿主:容器 (HOST:CONTAINER) 格式,或者僅僅指定容器的埠(宿主將會隨機選擇埠)都可以。

ports:
 - "3000"                     # 繫結容器的3000埠到主機的任意埠,容器啟動時隨機分配繫結的主機埠號
 - "80:80"                    # 繫結容器的80埠到主機的80埠
 - "49100:22"                 # 繫結容器的22埠到主機的49100埠
 - "127.0.0.1:8001:8001"

注意:和expose的區別是,expose不會將埠暴露給主機,只能指定容器內部暴露的埠,主機無法訪問expose的埠

volumes

資料卷所掛載路徑設定。可以設定宿主機路徑 (HOST:CONTAINER ) 或加上訪問模式 (HOST:CONTAINER:ro )。

volumes:
  - /var/lib/mysql                 ##設定宿主機路徑 
  - cache/:/tmp/cache              ##卷和掛載路徑
  - ~/configs:/etc/configs/:ro     ##只讀

其它指令

指定服務容器啟動後執行的命令。

entrypoint: /code/entrypoint.sh


指定容器中執行應用的使用者名稱。

user: nginx


指定容器中工作目錄。

working_dir: /code

指定容器中記憶體和記憶體交換區限制都為 1G。

mem_limit: 1g
memswap_limit: 1g


允許容器中執行一些特權命令。

privileged: true

指定容器退出後的重啟策略為始終重啟。

restart: always


以只讀模式掛載容器的 root 檔案系統,意味著不能對容器內容進行修改。

read_only: true


開啟標準輸入,可以接受外部輸入。

stdin_open: true


模擬一個假的遠端控制檯。

tty: true

docker-compose常用命令

1、docker-compose up

命令聚合每個容器的輸出,命令退出時,所有容器都將停止

2、docker-compose up -d

在後臺啟動容器並使它們保持執行

3、docker-compose stop

停止compose服務

4、docker-compose restart

重啟compose服務

5、docker-compose kill

kill compose服務

6、docker-compose ps

檢視compose服務狀態

7.docker-compose down

關閉和刪除當前的docker-compose開啟的容器或服務

8、docker-compose rm

刪除compose服務

9.docker-compose config

檢視 Docker Compose 配置

檢視容器日誌

docker-compose logs -f   ##檢視該容器的啟動的日誌列印(日誌從頭列印

docker logs -f container_id    ##檢視某一容器的啟動的日誌列印(日誌從頭列印)

docker logs -f --tail 數量詞 container_id  ##檢視某一容器的啟動的日誌列印(檢視最後n條日誌列印)

相關文章