Docker compose up -d與Docker restart的區(qū)別
背景 - 有時(shí)需要臨時(shí)在容器內(nèi)進(jìn)行修改
Docker給現(xiàn)場(chǎng)部署帶來了很大的方便。我們可以把代碼和依賴都封到 Docker 鏡像里,然后通過Docker 加載成容器,輕松部署。
另外,我們還可以通過 Docker-compose 把多個(gè)容器,比如 Nginx 容器,應(yīng)用容器,數(shù)據(jù)庫容器給編織起來,形成一整套服務(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)行了修改,比如,增加或者修改了:
- 暴露的端口
- 映射出來的文件
- 環(huán)境變量
這時(shí),使用 docker-compose up -d 可以使這些修改生效。
但是要注意,docker-compose up -d 會(huì):
- 停止原來的容器
- 刪除原來的容器
- 使用新的參數(shù),結(jié)合原始鏡像文件,創(chuàng)建一個(gè)新的容器提供服務(wù)
這時(shí),在原有容器中做得修改,如果沒有使用 docker-commit 做持久化,就會(huì)被沖掉,不會(huì)留下來。
docker restart 容器名
如果使用 docker restart 容器名,對(duì)容器進(jìn)行重啟。則之前在 docker 容器中做得臨時(shí)修改,不會(huì)被沖掉。docker 會(huì)使用修改后的代碼提供服務(wù)。
但是,這種方式?jīng)]有辦法修改 docker-compose 中暴露的端口號(hào),沒有辦法進(jìn)行 volume 映射等操作。
使用 docker commit 保留臨時(shí)的修改
如果現(xiàn)場(chǎng)測(cè)試后,覺得這些臨時(shí)修改沒有問題,希望保留,可以在宿主機(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 中的新配置來 生成一個(gè)新的鏡像,提供服務(wù)。
這時(shí),如果原有容器中,有臨時(shí)修改,比如在原容器里修改了某一段 python 代碼,則這些修改會(huì)被 沖掉。
所以,在使用時(shí),要千萬小心。
使用 docker commit 把容器的修改保存到鏡像中
比如,我們?cè)诂F(xiàn)場(chǎng)的 my_container 容器中,修改了一些代碼,我們希望把這些修改保留下來。
假設(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)沒有互聯(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)文章
使用Vscode結(jié)合docker進(jìn)行開發(fā)的詳細(xì)過程
這篇文章主要介紹了如何使用Vscode結(jié)合docker進(jìn)行開發(fā),在本文中,我將提供一個(gè)在 Node 環(huán)境中運(yùn)行的 JavaScript 應(yīng)用程序示例。閱讀在容器內(nèi)開發(fā)以獲取所有技術(shù)堆棧的詳細(xì)文檔,需要的朋友可以參考下2021-07-07
淺談Docker-compose中的depends_on順序的問題解決
本文主要介紹了淺談Docker-compose中的depends_on順序的問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Docker?AIGC等大模型深度學(xué)習(xí)環(huán)境搭建步驟最新詳細(xì)版
這篇文章主要介紹了Docker?AIGC等大模型深度學(xué)習(xí)環(huán)境搭建步驟最新詳細(xì)版,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
Docker新建centos鏡像并配置遠(yuǎn)程訪問的方法(親自實(shí)踐)
本文介紹了通過Docker創(chuàng)建多個(gè)CentOS容器模擬服務(wù)器環(huán)境的方法,涵蓋鏡像下載、網(wǎng)絡(luò)配置、自啟動(dòng)設(shè)置及解決systemd問題,需添加privileged=true參數(shù)并安裝sshd以實(shí)現(xiàn)遠(yuǎn)程訪問和固定IP分配,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-09-09

