大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Docker教程
Docker安裝
Docker使用
Docker實例

Docker使用docker-compose子命令管理應(yīng)用

在上一節(jié)《Docker docker-compose》中我們已經(jīng)將應(yīng)用成功的部署好了,下面再來介紹一下如何使用 Docker Compose 啟動、停止和刪除應(yīng)用,以及獲取應(yīng)用狀態(tài)。并且還會演示如何使用掛載的卷來實現(xiàn)對 Web 前端的更新。

既然應(yīng)用已經(jīng)啟動,下面看一下如何使其停止。為了實現(xiàn)這一點,將子命令 up 替換成 down 即可。

由于是使用 & 啟動的應(yīng)用,因此它運行在前臺。這意味著在終端上會打印詳細的輸出,從而可以很好地了解其執(zhí)行過程。下面介紹一下每一行都代表什么意思。

第 1、2 行開始嘗試關(guān)閉兩個服務(wù),即 Compose 文件中定義的 web-fe 和 redis。由第 3 行可知 stop 指令會發(fā)送 SIGTERM 信號。信號會被發(fā)送到每個容器中 PID 為 1 的進程。第 4~6 行顯示 Redis 容器接收到信號后優(yōu)雅地自行關(guān)閉。第 7、8 行表明已成功停止 Redis。第 9 行表明 web-fe 服務(wù)也被成功停止。由第 10 和 11 行可知已停止的服務(wù)被刪除。第 12 行顯示 counter-net 網(wǎng)絡(luò)被刪除,第 13 行顯示 docker-compose up 進程退出。

需要特別注意的是,counter-vol 卷并沒有被刪除,因為卷應(yīng)該是用于數(shù)據(jù)的長期持久化存儲的。因此,卷的生命周期是與相應(yīng)的容器完全解耦的。執(zhí)行 docker volume ls 可見該卷依然存在于系統(tǒng)中。寫到卷上的所有數(shù)據(jù)都會保存下來。

同樣,執(zhí)行 docker-compose up 過程中拉取或構(gòu)建的鏡像也會保留在系統(tǒng)中。因此,再次部署該應(yīng)用將更加快捷。

下面繼續(xù)介紹其他幾個 docker-compose 子命令。使用如下命令再次啟動應(yīng)用,但是這次在后臺啟動它。

$ docker-compose up -d
Creating network "counterapp_counter-net" with the default driver
Creating counterapp_redis_1 ... done
Creating counterapp_web-fe_1 ... done

這時會發(fā)現(xiàn)這次啟動要快很多——因為 counter-vol 卷已經(jīng)存在,而且不需要去拉取和構(gòu)建鏡像。

使用 docker-compose up 命令來查看應(yīng)用的狀態(tài)。

$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------
counterapp_redis_1 docker-entrypoint... Up 6379/tcp
counterapp_web-fe_1 python app.py Up 0.0.0.0:5000->5000/tcp

輸出中會顯示容器名稱、其中運行的 Command、當前狀態(tài)以及其監(jiān)聽的網(wǎng)絡(luò)端口。

使用 docker-compose top 命令列出各個服務(wù)(容器)內(nèi)運行的進程。

$ docker-compose top
counterapp_redis_1
PID USER TIME COMMAND
------------------------------------
843 dockrema 0:00 redis-server

counterapp_web-fe_1
PID USER TIME COMMAND
-------------------------------------------------
928 root 0:00 python app.py
1016 root 0:00 /usr/local/bin/python app.py

其中 PID 編號是在 Docker 主機上(而不是容器內(nèi))的進程 ID。

docker-compose stop 命令會停止應(yīng)用,但并不會刪除資源。然后再次運行 docker-compose ps 查看狀態(tài)。

$ docker-compose stop
Stopping counterapp_web-fe_1 ... done
Stopping counterapp_redis_1 ... done

$ docker-compose ps
Name Command State
---------------------------------------------------------
counterapp_redis_1 docker-entrypoint.sh redis Exit 0
counterapp_web-fe_1 python app.py Exit 0

可以看到,停止 Compose 應(yīng)用并不會在系統(tǒng)中刪除對應(yīng)用的定義,而僅將應(yīng)用的容器停止。這一點可以使用 docker container ls -a 命令進行驗證。

對于已停止的 Compose 應(yīng)用,可以使用 docker-compose rm 命令來刪除。這會刪除應(yīng)用相關(guān)的容器和網(wǎng)絡(luò),但是不會刪除卷和鏡像。

當然,也不會刪除應(yīng)用源碼(項目目錄下的 app.py、Dockerfile、requirements.txt 和 docker-compose.yml)。

執(zhí)行 docker-compose restart 命令重啟應(yīng)用。

$ docker-compose restart
Restarting counterapp_web-fe_1 ... done
Restarting counterapp_redis_1 ... done

查看執(zhí)行結(jié)果。

$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------
counterapp_redis_1 docker-entrypoint... Up 6379/tcp
counterapp_web-fe_1 python app.py Up 0.0.0.0:5000->5000/tcp

使用 docker-compose down 這一個命令就可以停止和關(guān)閉應(yīng)用。

$ docker-compose down
Stopping counterapp_web-fe_1 ... done
Stopping counterapp_redis_1 ... done
Removing counterapp_web-fe_1 ... done
Removing counterapp_redis_1 ... done
Removing network counterapp_counter-net

應(yīng)用被刪除,僅留下了鏡像、卷和源碼。下面最后一次部署應(yīng)用,然后查看卷的情況。

$ docker compose up -d
Creating network "counterapp_counter-net" with the default driver
Creating counterapp_redis_1 ... done
Creating counterapp_web-fe_1 ... done

如果查看 Compose 文件會發(fā)現(xiàn),其中定義了一個名為 counter-vol 的新卷,并將其掛載到 web-fe 服務(wù)的 /code 路徑上。

services:
web-fe:
<Snip>
volumes:
- type: volume
source: counter-vol
target: /code
<Snip>
volumes:
counter-vol:

當?shù)谝淮尾渴鹪搼?yīng)用的時候,Docker Compose 會檢查是否有同名的卷存在。如果不存在,則會創(chuàng)建它。也可使用 docker volume ls 命令手動查看。

$ docker volume ls
RIVER VOLUME NAME
local counterapp_counter-vol

值得注意的是,Docker Compose 會在部署服務(wù)之前創(chuàng)建網(wǎng)絡(luò)和卷。這很合理,因為它們是供服務(wù)(容器)使用的底層基礎(chǔ)資源。

如下可見,Docker Compose 會首先創(chuàng)建網(wǎng)絡(luò)和卷(甚至先于構(gòu)建和拉取鏡像)。

$ docker-compose up -d

Creating network "counterapp_counter-net" with the default driver
Creating volume "counterapp_counter-vol" with default driver
Pulling redis (redis:alpine)...
<Snip>

再次研讀 Dockerfile 中關(guān)于 web-fe 服務(wù)的定義,會看到它將卷 counter-app 掛載到容器的 /code 目錄。

還會發(fā)現(xiàn),/code 正是應(yīng)用安裝和執(zhí)行的目錄。由此可知,應(yīng)用的代碼是位于 Docker 卷中的,如下圖所示。

這意味著,我們在 Docker 主機對卷中文件的修改,會立刻反應(yīng)到應(yīng)用中。下面驗證一下。

具體的驗證過程包含這樣幾個步驟。首先在項目目錄下編輯 app.py 文件,從而應(yīng)用在瀏覽器中的頁面會顯示不同的文本。然后將更新的文件復(fù)制到位于 Docker 主機的卷中。最后刷新應(yīng)用的 Web 頁面來查看更新的內(nèi)容。

因為,所有對位于 Docker 主機上的卷中內(nèi)容的修改都會立刻反映在容器內(nèi)的卷里。

請使用順手的文本編輯器修改位于項目目錄下的 app.py 文件,這里我們使用的是 vim。

$ vim ~/counter-app/app.py

修改第 22 行位于雙引號之間的文字。這一行以 "What's up..." 開始,可在雙引號內(nèi)隨意輸入文字并保存。

更新源碼后,將其復(fù)制到 Docker 主機上相應(yīng)的卷中,也就是復(fù)制到一個或多個容器的掛載點(Mount Point)中。

使用 docker volume inspect 命令可以查看卷位于 Docker 主機的什么位置。

$ docker volume inspect counterapp_counter-vol | grep Mount

"Mountpoint": "/var/lib/docker/volumes/counterapp_counter-vol/_data",

復(fù)制文件后,該文件就會出現(xiàn)在 web-fe 容器的 /code 中,覆蓋掉容器中原有的 /code/app.py 文件。

$ cp ~/counterapp/app.py \
/var/lib/docker/volumes/counterapp_counter-vol/_data/app.py

現(xiàn)在更新的 app.py 文件已經(jīng)位于容器中了。請在瀏覽器中通過 Docker 主機的 IP 和端口 5000 連接到應(yīng)用來查看更新的內(nèi)容。

更新后的情況如下圖所示。

顯然在生產(chǎn)環(huán)境中不會這樣做,但是在開發(fā)環(huán)境中這確實很節(jié)省時間。

全部教程
主站蜘蛛池模板: 国产精品高清久久久久久久 | 性ao爱大片 | 伊人久久大杳蕉综合大象 | 精品久久在线 | 毛片5| 夜夜做夜夜爽 | 毛片一级视频 | 国产成人成人一区二区 | 奇米影视在线播放 | 国产亚洲综合一区在线 | 亚洲国产精品a一区二区三区 | 欧美日韩顶级毛片www免费看 | 日韩欧美一区二区三区久久 | 久久99色| 亚洲大片在线观看 | 欧美亚洲专区 | 另类尿喷潮videofree | 久久人与动人物a级毛片 | 午夜男人影院 | 另类图片综合网 | 老司机免费精品视频 | 884hutv四虎永久黄网 | 久久久久免费精品国产 | 久热免费视频 | 久久蝌蚪 | 日韩亚洲欧美一区二区三区 | 久久图库99图库 | 男女很黄很色床视频网站免 | 国产毛片在线看 | 久久天天丁香婷婷中文字幕 | 亚洲精品一区二区三区在线观看 | 亚洲综合在线视频 | 日本免费一区二区久久人人澡 | 午夜成人免费影院 | 欧美一级特黄乱妇高清视频 | 黄色毛片在线播放 | 久久综合久 | 欧美日韩乱码毛片免费观看 | 50-60岁老妇女一级毛片 | 国产美女亚洲精品久久久久久 | 欧美一级毛片国产一级毛片 |