Docker Compose
Compose 簡介
Compose 是用于定義和運行多容器 Docker 應用程式的工具,通過 Compose,您可以使用 YML 檔案來配置應用程式需要的所有服務,然后,使用一個命令,就可以從 YML 檔案配置中創建并啟動所有服務,
ps:說白了就是一個管理容器的工具,增刪改查,
Compose 使用的三個步驟:
-
使用 Dockerfile 定義應用程式的環境,
-
使用 docker-compose.yml 定義構成應用程式的服務,這樣它們可以在隔離環境中一起運行,
-
最后,執行 docker-compose up 命令來啟動并運行整個應用程式,
在 Linux 系統上安裝compose
1、在 Linux 上,可以從 GitHub 上的"撰寫存盤庫"發布頁面下載 Docker 撰寫二進制檔案,按照鏈接中的說明操作,該鏈接涉及在終端中運行命令以下載二進制檔案,下面還包括這些分步說明,
對于 , 需要以下依賴項包: 、、、、
alpinepy-pippython3-devlibffi-devopenssl-devgcclibc-devrustcargomake
運行此命令以下載 Docker Compose 的當前穩定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #若要安裝其他版本的"撰寫",請替換為要使用的"撰寫"版本,1.28.2
2、對二進制檔案應用可執行權限:
sudo chmod +x /usr/local/bin/docker-compose #注意:如果該命令在安裝后失敗,請檢查您的路徑,您還可以創建指向路徑中或任何其他目錄的符號鏈接,docker-compose/usr/bin #例如:sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
3、查看版本
$ docker-compose --version docker-compose version 1.28.2, build 1110ad01
開始使用compose
在此頁上,您構建一個在 Docker Compose 上運行的簡單 nginx 應用程式,
先決條件
請確保您已經同時安裝了 Docker 引擎和 Docker Compose,您不需要安裝 nginx,因為都由 Docker 鏡像提供,
第 1 步:
定義應用程式依賴項,
1.1為專案創建目錄:
[root@node1 /]# mkdir -p /compose/nginx
[root@node1 /]# cd /compose/nginx/
第 2 步:在compose檔案中定義
在專案目錄中創建呼叫的檔案并粘貼以下內容:docker-compose.yml
[root@node1 nginx]# cat docker-compose.yml
version: "3.9"
services:
nginx:
container_name: web-nginx
image: nginx
restart: always
ports:
- 90:80
volumes:
- ./webserver:/usr/share/nginx/html

第 3步:從專案目錄中,通過運行 啟動應用程式,docker-compose up
你要保重一個目錄中只有一個compose.yml檔案
[root@node1 nginx]# ls
docker-compose.yml
[root@node1 nginx]# pwd
/compose/nginx
[root@node1 nginx]# docker-compose up
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Creating web-nginx ... done
Attaching to web-nginx
web-nginx | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web-nginx | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web-nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web-nginx | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
web-nginx | 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web-nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web-nginx | /docker-entrypoint.sh: Configuration complete; ready for start up
#上面會一直占用終端,類似docker run -it --name web nginx 不加-d在前臺運行一樣,
#這玩意不能一直占用終端,我們ctrl+c停止掉,
#重新啟動加-d引數,后臺運行,
[root@node1 nginx]# docker-compose up -d
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Starting web-nginx ... done
[root@node1 nginx]#
檢查一下容器的狀態
[root@node1 nginx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8adca2c6b85e nginx "/docker-entrypoint.…" 3 minutes ago Up About a minute 0.0.0.0:90->80/tcp web-nginx
第四步:測驗訪問
[root@node1 nginx]# curl 192.168.1.1:90 <html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>nginx/1.19.6</center> </body> </html> #你會發現403??? #檢查狀態沒問題呀??? 科普一下:403錯誤是一種在網站訪問程序中,常見的錯誤提示,表示資源不可用,
其實出現403沒問題,因為在yml檔案的時候不是掛載了webserver,它確實會生產這個目錄,但是我們沒有往這個目錄添加檔案啊!!!
[root@node1 webserver]# pwd /compose/nginx/webserver [root@node1 webserver]# ll 總用量 0 [root@node1 webserver]# echo hello > index.html
再次測驗:

在前邊我還說過docker compose還支持dockerfile,實作特定的容器環境,我們簡單的介紹一下:
[root@node1 nginx]# pwd /compose/nginx #保證docerfile在同一級別的目錄 [root@node1 nginx]# ll 總用量 4 -rw-r--r-- 1 root root 181 2月 18 11:43 docker-compose.yml drwxr-xr-x 2 root root 24 2月 18 11:57 webserver #撰寫dockerfile [root@node1 nginx]# vim Dockerfile [root@node1 nginx]# cat Dockerfile FROM nginx COPY ./webserver/index.html /usr/share/nginx/html/index.html [root@node1 nginx]# vim docker-compose.yml #修改yml [root@node1 nginx]# cat docker-compose.yml version: "3.9" services: nginx: container_name: web-nginx01 image: nginx restart: always ports: - 80:80 volumes: - ./webserver:/usr/share/nginx/html
通過docker-compose up -d --build
[root@node1 nginx]# docker-compose up -d --build Building with native build. Learn about native build in Compose here: #上述先構建dockerfile https://docs.docker.com/go/compose-native-build/ Recreating web-nginx ... done #查看狀態 [root@node1 nginx]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e01f59057a72 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp web-nginx01

docker-compose管理命令
1、Docker-Compose命令格式
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
命令選項如下:
-f,–file FILE指定Compose模板檔案,默認為docker-compose.yml,可以多次指定,
-p,–project-name NAME指定專案名稱,默認將使用所在目錄名稱作為專案名,
-x-network-driver 使用Docker的可拔插網路后端特性(需要Docker 1.9+版本)
-x-network-driver DRIVER指定網路后端的驅動,默認為bridge(需要Docker 1.9+版本)
-verbose輸出更多除錯資訊
-v,–version列印版本并退出
2、docker-compose up
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
選項包括:
-d 在后臺運行服務容器
–no-color 不使用顏色來區分不同的服務的控制輸出
–no-deps 不啟動服務所鏈接的容器
–force-recreate 強制重新創建容器,不能與–no-recreate同時使用
–no-recreate 如果容器已經存在,則不重新創建,不能與–force-recreate同時使用
–no-build 不自動構建缺失的服務鏡像
–build 在啟動容器前構建服務鏡像
–abort-on-container-exit 停止所有容器,如果任何一個容器被停止,不能與-d同時使用
-t, –timeout TIMEOUT 停止容器時候的超時(默認為10秒)
–remove-orphans 洗掉服務中沒有在compose檔案中定義的容器
–scale SERVICE=NUM 設定服務運行容器的個數,將覆寫在compose中通過scale指定的引數docker-compose up
啟動所有服務docker-compose up -d
在后臺所有啟動服務
-f 指定使用的Compose模板檔案,默認為docker-compose.yml,可以多次指定,docker-compose -f docker-compose.yml up -d
3、docker-compose ps
docker-compose ps [options] [SERVICE...]docker-compose ps
列出專案中目前的所有容器
4、docker-compose stop
docker-compose stop [options] [SERVICE...]
選項包括:
-t, –timeout TIMEOUT 停止容器時候的超時(默認為10秒)docker-compose stop
停止正在運行的容器,可以通過docker-compose start 再次啟動
5、docker-compose -h
docker-compose -h
查看幫助
6、docker-compose down
docker-compose down [options]
停止和洗掉容器、網路、卷、鏡像,
選項包括:
–rmi type,洗掉鏡像,型別必須是:all,洗掉compose檔案中定義的所有鏡像;local,洗掉鏡像名為空的鏡像
-v, –volumes,洗掉已經在compose檔案中定義的和匿名的附在容器上的資料卷
–remove-orphans,洗掉服務中沒有在compose中定義的容器docker-compose down
停用移除所有容器以及網路相關
7、docker-compose logs
docker-compose logs [options] [SERVICE...]
查看服務容器的輸出,默認情況下,docker-compose將對不同的服務輸出使用不同的顏色來區分,可以通過–no-color來關閉顏色,docker-compose logs
查看服務容器的輸出
8、docker-compose build
docker-compose build [options] [--build-arg key=val...] [SERVICE...]
構建(重新構建)專案中的服務容器,
選項包括:
–compress 通過gzip壓縮構建上下環境
–force-rm 洗掉構建程序中的臨時容器
–no-cache 構建鏡像程序中不使用快取
–pull 始終嘗試通過拉取操作來獲取更新版本的鏡像
-m, –memory MEM為構建的容器設定記憶體大小
–build-arg key=val為服務設定build-time變數
服務容器一旦構建后,將會帶上一個標記名,可以隨時在專案目錄下運行docker-compose build來重新構建服務
9、docker-compose pull
docker-compose pull [options] [SERVICE...]
拉取服務依賴的鏡像,
選項包括:
–ignore-pull-failures,忽略拉取鏡像程序中的錯誤
–parallel,多個鏡像同時拉取
–quiet,拉取鏡像程序中不列印進度資訊docker-compose pull
拉取服務依賴的鏡像
10、docker-compose restart
docker-compose restart [options] [SERVICE...]
重啟專案中的服務,
選項包括:
-t, –timeout TIMEOUT,指定重啟前停止容器的超時(默認為10秒)docker-compose restart
重啟專案中的服務
11、docker-compose rm
docker-compose rm [options] [SERVICE...]
洗掉所有(停止狀態的)服務容器,
選項包括:
–f, –force,強制直接洗掉,包括非停止狀態的容器
-v,洗掉容器所掛載的資料卷docker-compose rm
洗掉所有(停止狀態的)服務容器,推薦先執行docker-compose stop命令來停止容器,
12、docker-compose start
docker-compose start [SERVICE...]docker-compose start
啟動已經存在的服務容器,
13、docker-compose run
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
在指定服務上執行一個命令,docker-compose run ubuntu ping www.baidu.com
在指定容器上執行一個ping命令,
14、docker-compose scale
docker-compose scale web=3 db=2
設定指定服務運行的容器個數,通過service=num的引數來設定數量
15、docker-compose pause
docker-compose pause [SERVICE...]
暫停一個服務容器
16、docker-compose kill
docker-compose kill [options] [SERVICE...]
通過發送SIGKILL信號來強制停止服務容器,
支持通過-s引數來指定發送的信號,例如通過如下指令發送SIGINT信號:docker-compose kill -s SIGINT
17、dokcer-compose config
docker-compose config [options]
驗證并查看compose檔案配置,
選項包括:
–resolve-image-digests 將鏡像標簽標記為摘要
-q, –quiet 只驗證配置,不輸出, 當配置正確時,不輸出任何內容,當檔案配置錯誤,輸出錯誤資訊
–services 列印服務名,一行一個
–volumes 列印資料卷名,一行一個
18、docker-compose create
docker-compose create [options] [SERVICE...]
為服務創建容器,
選項包括:
–force-recreate:重新創建容器,即使配置和鏡像沒有改變,不兼容–no-recreate引數
–no-recreate:如果容器已經存在,不需要重新創建,不兼容–force-recreate引數
–no-build:不創建鏡像,即使缺失
–build:創建容器前,生成鏡像
19、docker-compose exec
docker-compose exec [options] SERVICE COMMAND [ARGS...]
選項包括:
-d 分離模式,后臺運行命令,
–privileged 獲取特權,
–user USER 指定運行的用戶,
-T 禁用分配TTY,默認docker-compose exec分配TTY,
–index=index,當一個服務擁有多個容器時,可通過該引數登陸到該服務下的任何服務,例如:docker-compose exec –index=1 web /bin/bash ,web服務中包含多個容器
20、docker-compose port
docker-compose port [options] SERVICE PRIVATE_PORT
顯示某個容器埠所映射的公共埠,
選項包括:
–protocol=proto,指定埠協議,TCP(默認值)或者UDP
–index=index,如果同意服務存在多個容器,指定命令物件容器的序號(默認為1)
21、docker-compose push
docker-compose push [options] [SERVICE...]
推送服務依的鏡像,
選項包括:
–ignore-push-failures 忽略推送鏡像程序中的錯誤
22、docker-compose stop
docker-compose stop [options] [SERVICE...]
顯示各個容器運行的行程情況,
23、docker-compose unpause
docker-compose unpause [SERVICE...]
恢復處于暫停狀態中的服務,
24、docker-compose version
docker-compose version
列印版本資訊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260892.html
標籤:其他
上一篇:大學學計算機應該選哪個專業呢?
