Docker compose up -d與Docker restart的區(qū)別
背景 - 有時(shí)需要臨時(shí)在容器內(nèi)進(jìn)行修改
Docker給現(xiàn)場(chǎng)部署帶來(lái)了很大的方便。我們可以把代碼和依賴都封到 Docker 鏡像里,然后通過(guò)Docker 加載成容器,輕松部署。
另外,我們還可以通過(guò) Docker-compose 把多個(gè)容器,比如 Nginx 容器,應(yīng)用容器,數(shù)據(jù)庫(kù)容器給編織起來(lái),形成一整套服務(wù)。
但是,有些時(shí)候,到了現(xiàn)場(chǎng),我們需要對(duì)臨時(shí)代碼進(jìn)行一些小的調(diào)整和修改。
調(diào)整之后,往往需要重啟容器或服務(wù),使修改生效。這時(shí),人們往往會(huì)用到:
- docker restart 容器名 , 或者
- docker-compose up -d
進(jìn)行容器重啟。但是這兩者有什么區(qū)別呢?
docker-compose up -d
如果我們對(duì) docker-compose.yml 進(jìn)行了修改,比如,增加或者修改了:
- 暴露的端口
- 映射出來(lái)的文件
- 環(huán)境變量
這時(shí),使用 docker-compose up -d 可以使這些修改生效。
但是要注意,docker-compose up -d 會(huì):
- 停止原來(lái)的容器
- 刪除原來(lái)的容器
- 使用新的參數(shù),結(jié)合原始鏡像文件,創(chuàng)建一個(gè)新的容器提供服務(wù)
這時(shí),在原有容器中做得修改,如果沒(méi)有使用 docker-commit 做持久化,就會(huì)被沖掉,不會(huì)留下來(lái)。
docker restart 容器名
如果使用 docker restart 容器名,對(duì)容器進(jìn)行重啟。則之前在 docker 容器中做得臨時(shí)修改,不會(huì)被沖掉。docker 會(huì)使用修改后的代碼提供服務(wù)。
但是,這種方式?jīng)]有辦法修改 docker-compose 中暴露的端口號(hào),沒(méi)有辦法進(jìn)行 volume 映射等操作。
使用 docker commit 保留臨時(shí)的修改
如果現(xiàn)場(chǎng)測(cè)試后,覺(jué)得這些臨時(shí)修改沒(méi)有問(wèn)題,希望保留,可以在宿主機(jī)上,使用 docker commit 容器名 鏡像名:標(biāo)簽 ,把臨時(shí)的修改 commit 到鏡像中。
這樣,即使之后再使用 docker-compose up -d,只要在 docker-compose.yml 文件中,使用 commit 后的 鏡像名:標(biāo)簽,之前的修改也可以保留。
舉例
在容器里臨時(shí)修改代碼
如果在現(xiàn)場(chǎng),我們發(fā)現(xiàn) docker 容器中的一段 python 代碼需要修改,可以docker exec -it 容器名 /bin/sh 進(jìn)入容器,找到相應(yīng)的代碼進(jìn)行修改。
修改之后,可以在宿主機(jī)上,使用 docker restart 容器名 進(jìn)行重啟。修改的代碼會(huì)生效。
調(diào)整 docker-compose.yml 中的配置
如果在現(xiàn)場(chǎng),發(fā)現(xiàn)要修改容器的端口,或者增加或修改環(huán)境變量配置。則需要修改 docker-compose.yml。然后使用 docker-compose up -d 使修改后的配置生效。
但是,要注意:docker-compose up -d 會(huì) 停止并刪除原有的鏡像,并使用系統(tǒng)中原有的鏡像,結(jié)合 docker-compose.yml 中的新配置來(lái) 生成一個(gè)新的鏡像,提供服務(wù)。
這時(shí),如果原有容器中,有臨時(shí)修改,比如在原容器里修改了某一段 python 代碼,則這些修改會(huì)被 沖掉。
所以,在使用時(shí),要千萬(wàn)小心。
使用 docker commit 把容器的修改保存到鏡像中
比如,我們?cè)诂F(xiàn)場(chǎng)的 my_container 容器中,修改了一些代碼,我們希望把這些修改保留下來(lái)。
假設(shè)這個(gè)容器對(duì)應(yīng)的鏡像名是 my_image:1.0.1,則我們可以在宿主機(jī)上,使用:
docker commit my_container my_image:1.0.1
把修改保存到原鏡像中。當(dāng)然,你也可以把修改保存到 my_image:1.0.2 。
但要記得對(duì) docker-compose.yml 文件中,把對(duì)應(yīng)的鏡像名稱,也改為 my_image:1.0.2。
以上描述的方式,比較適合現(xiàn)場(chǎng)沒(méi)有互聯(lián)網(wǎng)連接的場(chǎng)景。
到此這篇關(guān)于Docker compose up -d與Docker restart的區(qū)別的文章就介紹到這了,更多相關(guān)Docker compose up -d與Docker restart內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker部署Tomcat及Web應(yīng)用的實(shí)現(xiàn)
這篇文章主要介紹了Docker部署Tomcat及Web應(yīng)用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Docker 跨主機(jī)容器間相互訪問(wèn)的實(shí)現(xiàn)
本文主要介紹了Docker 跨主機(jī)容器間相互訪問(wèn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
IDEA集成docker實(shí)現(xiàn)遠(yuǎn)程部署的步驟
本文主要介紹了IDEA集成docker實(shí)現(xiàn)遠(yuǎn)程部署的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
docker之如何設(shè)置日志文件大小及個(gè)數(shù)
這篇文章主要介紹了docker之如何設(shè)置日志文件大小及個(gè)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
docker 安裝nacos并配置數(shù)據(jù)庫(kù)的教程詳解
這篇文章主要介紹了docker 安裝nacos并配置數(shù)據(jù)庫(kù)的教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Docker數(shù)據(jù)卷容器創(chuàng)建及使用方法解析
這篇文章主要介紹了Docker數(shù)據(jù)卷容器創(chuàng)建及使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Docker容器間通訊直接路由方式實(shí)現(xiàn)網(wǎng)絡(luò)通訊
今天小編就為大家分享一篇關(guān)于Docker容器間通訊直接路由方式實(shí)現(xiàn)網(wǎng)絡(luò)通訊,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02

