6. 單機編排之Docker Compose

1 Docker Compose

Docker Compose是一個單機的容器編排工具, 可以用來解決不同容器內(nèi)應用之間的依賴關(guān)系
并且可以代替docker命令對容器進行創(chuàng)建, 啟動和停止等手工操作
docker-compose項目是Docker官方的開源項目, 負責實現(xiàn)對docker容器集群的快速編排
其將管理的容器分為三層, 分別是工程(project), 服務(wù)(service),以及容器(container)
docker-compose只適用于單機的容器編排, 對于容器集群, 還需要使用k8s去實現(xiàn)

2 安裝和準備

2.1 安裝

docker compose多種安裝方式
1. pip安裝, 因為docker-compose本身就是Python開發(fā)的
2. 通過github下載對應版本, 安裝
3. 利用deb或yum安裝, 不過版本比較老舊

github安裝docker-compose

官方在github提供docker-compose資源, 而其本身就是一個二進制程序, 因此, 直接下載, 保存到PATH變量目錄, 修改權(quán)限即可使用
v1.26.2
root@docker-compose:~# ll -t /usr/sbin
total 24320
-rwxr-xr-x  1 root root 12254160 Feb  9 04:34 docker-compose* # 需要添加x權(quán)限, 本身是沒有執(zhí)行權(quán)限的

2.2 命令使用

常用選項:
-f File # 指定docker-compose使用的文件, 默認會使用同目錄下的docker-compose.yml文件
-p NAME # 指定項目名稱, 默認將使用當前所在目錄名稱作為項目名, 因此, 執(zhí)行docker-compose命令最好進入到對應的項目目錄下
常用命令:
build 構(gòu)建鏡像
bundle 從當前docker-compose文件生成一個以<當前目錄>為名稱的json格式的Docker Bundle備份文件
config -q 查看當前配置, 沒有錯誤不輸出任何信息
create 創(chuàng)建服務(wù), 較少使用
down 停止和刪除所有容器, 網(wǎng)絡(luò), 鏡像和數(shù)據(jù)卷
events 從容器接收實時事件可以指定json日志格式, 較少使用
exec 進入指定容器進行操作
help 顯示幫助信息
images 顯示鏡像信息, 較少使用
kill 強制終止運行中的容器
logs 查看容器的日志
pause 暫停服務(wù)
port 查看端口
ps 列出容器, 較少使用
pull 重新拉取鏡像, 鏡像發(fā)生變化后, 需要重新拉取鏡像, 較少使用
push 上傳鏡像
restart 重啟服務(wù), 較少使用
rm 刪除已經(jīng)停止的服務(wù)
run 一次性運行容器
scale 設(shè)置指定服務(wù)運行的容器個數(shù)
start 啟動服務(wù), 較少使用
stop 停止服務(wù), 較少使用
top 顯示容器運行狀態(tài)
unpause 取消暫停
up 創(chuàng)建并啟動容器, 較少使用

3 docker-compose 文件格式

docker-compose使用yaml文件, 格式要求嚴格的行首縮進
默認docker-compose命令會調(diào)用當前目錄下的docker-compose.yml的文件, 因此一般執(zhí)行docker-compose命令前, 先進入docker-compose.yml文件所在目錄

4 從docker compose啟動容器

4.1 創(chuàng)建docker compose文件

docker compose文件可在任意目錄, 創(chuàng)建文件名為docker-compose.yml配置文件, 要注意前后的縮進
root@docker-compose:~# mkdir /data/docker-compose
root@docker-compose:~# cd /data/docker-compose
root@docker-compose:/data/docker-compose# vim docker-compose.yml
server-nginx-web:                                                                                                                           
    image: nginx
    container_name: nginx-web
    expose:
      - 80
      - 443
    ports:
      - "80:80"
      - "443:443"

4.2 檢查配置和格式

root@docker-compose:/data/docker-compose# docker-compose config
services:
  server-nginx-web:
    container_name: nginx-web
    expose:
    - 80
    - 443
    image: nginx
    network_mode: bridge
    ports:
    - 80:80/tcp
    - 443:443/tcp
version: '2.1'
root@docker-compose:/data/docker-compose# docker-compose config -q

4.3 啟動容器

必須在docker-compose文件所在的目錄執(zhí)行

前臺啟動
docker-compose up
Status: Downloaded newer image for nginx:latest
Creating nginx-web ... done
Attaching to nginx-web
nginx-web           | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
nginx-web           | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
nginx-web           | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
nginx-web           | 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
nginx-web           | 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
nginx-web           | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
nginx-web           | /docker-entrypoint.sh: Configuration complete; ready for start up
root@docker-compose:~# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                      NAMES
ba4372e946d5        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx-web
圖片.png
換到另一個終端, 進入容器
root@docker-compose:/data/docker-compose# docker-compose exec server-nginx-web bash

4.4 退出前臺運行的容器

ctrl + c 
Stopping nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
  Name                 Command               State    Ports
-----------------------------------------------------------
nginx-web   /docker-entrypoint.sh ngin ...   Exit 0 

4.5 啟動退出的容器

root@docker-compose:/data/docker-compose# docker-compose start 
Starting server-nginx-web ... done
docker-compose up 前臺啟動
docker-composeu up -d  后臺啟動

4.6 退出容器

root@docker-compose:/data/docker-compose# docker-compose kill
Killing nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
  Name                 Command                State     Ports
-------------------------------------------------------------
nginx-web   /docker-entrypoint.sh ngin ...   Exit 137 

4.7 刪除容器

4.7.1 只刪除停止的容器

root@docker-compose:/data/docker-compose# docker-compose rm
Going to remove nginx-web
Are you sure? [yN] y
Removing nginx-web ... done

4.7.2 直接刪除正在工作的容器

后臺啟動
root@docker-compose:/data/docker-compose# docker-compose up -d
Creating nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
  Name                 Command               State                    Ports                  
---------------------------------------------------------------------------------------------
nginx-web   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
停止并刪除容器
root@docker-compose:/data/docker-compose# docker-compose down
Stopping nginx-web ... done
Removing nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
Name   Command   State   Ports
------------------------------
鏡像也會被刪除
root@docker-compose:/data/docker-compose# docker-compose images
Container   Repository   Tag   Image Id   Size
----------------------------------------------
基礎(chǔ)鏡像還在, 所以在啟動,也無需重新拉鏡像, 但是是重新創(chuàng)建docker-compose
相當于利用拉取的鏡像, 在創(chuàng)建為docker-compose鏡像
[root@Ubuntu-1804-2:/apps/harbor]# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
10.0.0.29/alpine-test/alpine    v1.0                e50c909a8df2        11 days ago         5.61MB
alpine                          latest              e50c909a8df2        11 days ago         5.61MB
goharbor/chartmuseum-photon     v0.8.1-v1.7.6       ca4e65cc8cbf        17 months ago       114MB
goharbor/harbor-migrator        v1.7.6              bd65976b2563        17 months ago       680MB
goharbor/redis-photon           v1.7.6              477066fd0e02        17 months ago       109MB
goharbor/clair-photon           v2.0.8-v1.7.6       a65550304aa5        17 months ago       165MB
goharbor/notary-server-photon   v0.6.1-v1.7.6       1bfca6aac750        17 months ago       136MB
goharbor/notary-signer-photon   v0.6.1-v1.7.6       8535add7bfa5        17 months ago       133MB
goharbor/harbor-registryctl     v1.7.6              bb06dcda87fa        17 months ago       103MB
goharbor/registry-photon        v2.6.2-v1.7.6       8fa930eedbea        17 months ago       87.7MB
goharbor/nginx-photon           v1.7.6              fea7c162d250        17 months ago       37MB
goharbor/harbor-log             v1.7.6              f9b50bc6e136        17 months ago       82.6MB
goharbor/harbor-jobservice      v1.7.6              cfac2ab2d45a        17 months ago       85.1MB
goharbor/harbor-core            v1.7.6              37379145c410        17 months ago       96.6MB
goharbor/harbor-portal          v1.7.6              eafab006217d        17 months ago       41.7MB
goharbor/harbor-adminserver     v1.7.6              2d91210e25ed        17 months ago       73.3MB
goharbor/harbor-db              v1.7.6              f28a4ae69c04        17 months ago       146MB

4.8 后臺執(zhí)行

root@docker-compose:/data/docker-compose# docker-compose up -d
Creating nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose images
Container   Repository    Tag       Image Id      Size 
-------------------------------------------------------
nginx-web   nginx        latest   f6d0b4767a6c   133 MB

4.9 停止, 啟動, 重啟

root@docker-compose:/data/docker-compose# docker-compose stop
Stopping nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose start
Starting server-nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
  Name                 Command               State                    Ports                  
---------------------------------------------------------------------------------------------
nginx-web   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
root@docker-compose:/data/docker-compose# docker-compose restart
Restarting nginx-web ... done
root@docker-compose:/data/docker-compose# docker-compose ps
  Name                 Command               State                    Ports                  
---------------------------------------------------------------------------------------------
nginx-web   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp

4.10 日志查看

json格式查看

root@docker-compose:/data/docker-compose# docker-compose restart
Restarting nginx-web ... done

root@docker-compose:/data/docker-compose# docker-compose events --json



{"time": "2021-02-09T05:35:15.211387", "type": "container", "action": "kill", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:15.282536", "type": "container", "action": "die", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:15.405425", "type": "container", "action": "stop", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:16.433548", "type": "container", "action": "start", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
{"time": "2021-02-09T05:35:16.433600", "type": "container", "action": "restart", "id": "aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40", "service": "server-nginx-web", "attributes": {"name": "nginx-web", "image": "nginx"}}
默認格式查看

root@docker-compose:/data/docker-compose# docker-compose events
2021-02-09 05:36:07.859265 container kill aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:07.961174 container die aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:08.132842 container stop aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:08.893008 container start aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)
2021-02-09 05:36:08.893067 container restart aa33b6a73eb3687896c5b1a0a9f55273a2e9fdd052b9cc8639ec22b5d4529a40 (image=nginx, name=nginx-web)

4.11 指定同時啟動的容器的數(shù)量

通過docker-compose文件可以同時啟動多個不同服務(wù)的容器
root@docker-compose:/data/docker-compose# vim docker-compose.yml 
server-nginx-web:
    image: nginx
    #container_name: nginx-web # 同時啟動多個同一鏡像的容器, 不要自定容器名稱, 否則會沖突
    expose:
      - 80
      - 443
    #ports: # 同時啟動多個同一鏡像的容器, 不要指定端口號, 否則會沖突
    #  - "80:80"
    #  - "443:443"

#再添加一個服務(wù)
server-tomcat-web:
    image: tomcat
--scale用來指定要啟動的各種服務(wù)容器的數(shù)量, 如果, 沒有指定--scale, 而yml文件有寫了服務(wù), 那么就會默認啟動一個
root@docker-compose:/data/docker-compose# docker-compose up -d --scale server-nginx-web=2
root@docker-compose:/data/docker-compose# docker-compose ps
               Name                             Command               State        Ports     
---------------------------------------------------------------------------------------------
docker-compose_server-nginx-web_1    /docker-entrypoint.sh ngin ...   Up      443/tcp, 80/tcp
docker-compose_server-nginx-web_2    /docker-entrypoint.sh ngin ...   Up      443/tcp, 80/tcp
docker-compose_server-tomcat-web_1   catalina.sh run                  Up      8080/tcp 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坯苹,一起剝皮案震驚了整個濱河市隆檀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖刚操,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闸翅,死亡現(xiàn)場離奇詭異,居然都是意外死亡菊霜,警方通過查閱死者的電腦和手機坚冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鉴逞,“玉大人记某,你說我怎么就攤上這事」辜瘢” “怎么了液南?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勾徽。 經(jīng)常有香客問我滑凉,道長,這世上最難降的妖魔是什么喘帚? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任畅姊,我火速辦了婚禮,結(jié)果婚禮上吹由,老公的妹妹穿的比我還像新娘若未。我一直安慰自己,他們只是感情好倾鲫,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布粗合。 她就那樣靜靜地躺著,像睡著了一般乌昔。 火紅的嫁衣襯著肌膚如雪隙疚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天玫荣,我揣著相機與錄音甚淡,去河邊找鬼。 笑死捅厂,一個胖子當著我的面吹牛贯卦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焙贷,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼撵割,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辙芍?” 一聲冷哼從身側(cè)響起啡彬,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤羹与,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后庶灿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纵搁,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年往踢,在試婚紗的時候發(fā)現(xiàn)自己被綠了腾誉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡峻呕,死狀恐怖利职,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘦癌,我是刑警寧澤猪贪,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站讯私,受9級特大地震影響热押,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斤寇,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一楞黄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抡驼,春花似錦、人聲如沸肿仑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尤慰。三九已至馏锡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伟端,已是汗流浹背杯道。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留责蝠,地道東北人党巾。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像霜医,于是被迫代替她去往敵國和親齿拂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容