docker 容器运行 golang程序_「Docker」 - 运行 amp; 管理容器
容器是基于容器技術(shù)所建立和運(yùn)行的輕量級(jí)應(yīng)用運(yùn)行環(huán)境,它是Docker封裝和管理應(yīng)用程序或微服務(wù)的「集裝箱」,在Docker中,容器是最核心的部分。
一、容器的創(chuàng)建和啟動(dòng)
Docker容器的生命周期里分為五種狀態(tài),其分別代表著:
- Created:容器已經(jīng)被創(chuàng)建,容器所需的相關(guān)資源已經(jīng)準(zhǔn)備就緒,但容器中的程序還未處于運(yùn)行狀態(tài)。
- Running:容器正在運(yùn)行,也即容器中的應(yīng)用正在運(yùn)行。
- Paused:容器已暫停,表示容器中的所有程序都處于暫停狀態(tài)。
- Stopped:容器處于停止?fàn)顟B(tài),占用的資源和沙盒環(huán)境都依然存在,只是容器中的應(yīng)用程序均已停止。
- Deleted:容器已刪除,相關(guān)占用的資源及存儲(chǔ)在Docker中的管理信息也都已釋放和移除。
A、創(chuàng)建容器
下載好鏡像后,通過docker create命令創(chuàng)建容器。
docker create nginx71d09fd4bd9eac512002ef290d89b61471efc3c7d539ea6c453c1de8575be938執(zhí)行docker create后,Docker會(huì)根據(jù)所給出的鏡像創(chuàng)建容器,在控制臺(tái)中會(huì)打印出Docker為容器所分配的容器ID,此時(shí)容器處于Created狀態(tài)。
之后對(duì)容器的操作可以通過這個(gè)容器ID或者它的縮略形式進(jìn)行,但用容器ID操作容器難以理解,所以更習(xí)慣于使用容器名來操作容器。
要使用容器名操作容器,就先得給容器命名,在創(chuàng)建容器時(shí)可以通過--name選項(xiàng)為配置容器名。
docker create --name redis redisd7da13d7fc93fb6435d37ccf189b55f4388a4ed20363034761004278b8622a04B、啟動(dòng)容器
通過docker create創(chuàng)建的容器,是處于Created 狀態(tài)的,其內(nèi)部的應(yīng)用程序還沒有啟動(dòng),所以需要通過docker start命令來啟動(dòng)。
docker start 71d09fd4bd9eac512002ef290d89b61471efc3c7d539ea6c453c1de8575be938docker start redis當(dāng)容器啟動(dòng)后,其中的應(yīng)用就會(huì)運(yùn)行起來,容器的生命周期也會(huì)綁定到了這個(gè)應(yīng)用上,只要應(yīng)用程序還在運(yùn)行,那么容器的狀態(tài)就會(huì)是Running,除非進(jìn)行一些修改容器的操作。
在Docker里,可以通過docker run將docker create和docker start兩步操作合成為一步,進(jìn)一步提高工作效率。
docker run --name nginx -d nginx:1.12docker run在啟動(dòng)容器時(shí),會(huì)采用前臺(tái)運(yùn)行,可以通過-d或--detach選項(xiàng)告訴Docker在啟動(dòng)后通過后臺(tái)運(yùn)行。
C、停止和刪除容器
通過docker stop停止正在運(yùn)行的容器,容器停止后,維持的文件系統(tǒng)沙盒環(huán)境還是存在的,內(nèi)部被修改的內(nèi)容也都會(huì)保留,可以通過docker start命令將這個(gè)容器再次啟動(dòng)。
需要完全刪除容器時(shí),可以通過docker rm命令將容器進(jìn)行刪除。正在運(yùn)行中的容器默認(rèn)情況下是不能被刪除,可以通過增加-f或--force選項(xiàng)來讓docker rm強(qiáng)制停止并刪除容器。
Docker是輕量級(jí)容器,短時(shí)間內(nèi)不需要使用容器時(shí),最佳的做法是刪除它而不是停止它。
D、解決刪除容器引起的問題
應(yīng)用對(duì)容器內(nèi)的文件進(jìn)行了修改,刪除容器,會(huì)將修改的文件也進(jìn)行刪除。
Docker的解決方案:
- 在Docker 中,打包鏡像的成本非常低,速度也很快,所以如果需要為程序準(zhǔn)備一些環(huán)境或者配置,完全可以直接將它們打包至新的鏡像中,下次直接使用新的鏡像創(chuàng)建容器即可。
- 容器中應(yīng)用程序所產(chǎn)生的一些文件數(shù)據(jù),是非常重要的,如果這些數(shù)據(jù)隨著容器的刪除而丟失,其損失是非常巨大的。對(duì)于這類由應(yīng)用程序所產(chǎn)生的數(shù)據(jù),并且需要保證它們不會(huì)隨著容器的刪除而消失的,可以使用Docker中的數(shù)據(jù)卷來單獨(dú)存放。由于數(shù)據(jù)卷是獨(dú)立于容器存在的,所以能保證數(shù)據(jù)不會(huì)隨著容器的刪除而丟失。
二、管理容器
容器創(chuàng)建和啟動(dòng)后,除了關(guān)注應(yīng)用程序是否功能正常外,也會(huì)關(guān)注容器的狀態(tài)等內(nèi)容。
A、顯示容器
docker ps列出Docker中的容器,通過-a或--all選項(xiàng),列出所有狀態(tài)的容器。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d7da13d7fc93 redis "docker-entrypoint.s…" 9 minutes ago Up 8 minutes 6379/tcp redis 71d09fd4bd9e nginx "nginx -g 'daemon of…" 11 minutes ago Up 8 minutes 80/tcp zealous_wu結(jié)果中的COMMAND表示的是容器中主程序(與容器生命周期所綁定進(jìn)程所關(guān)聯(lián)的程序)的啟動(dòng)命令,這條命令是在鏡像內(nèi)定義的,而容器的啟動(dòng)其實(shí)質(zhì)就是啟動(dòng)這條命令。
B、進(jìn)入容器
容器是隔離的運(yùn)行環(huán)境,里面除了鏡像所規(guī)定的主進(jìn)程外,其他的進(jìn)程也能夠運(yùn)行,Docker提供docker exec命令,讓容器運(yùn)行所給出的命令。
docker exec redis cat /etc/hostname# CONTAINER ID d7da13d7fc93對(duì)于以上操作,多有不便,還是希望進(jìn)入「容器」,執(zhí)行命令。
docker exec -it redis bash# 容器內(nèi)的bash root@d7da13d7fc93:/data# redis-cli 127.0.0.1:6379> ping PONG在借助docker exec進(jìn)入容器的時(shí)候,需要添加-it選項(xiàng),-i或--interactive表示保持輸入流,-t或--tty表示啟用一個(gè)偽終端,形成bash的交互。
C、掛接容器
Docker為提供了docker attach命令,用于將當(dāng)前的輸入輸出流連接到指定的容器上。
docker attach nginx這個(gè)命令最直觀的效果可以理解為將容器中的主程序轉(zhuǎn)為了前臺(tái)運(yùn)行,與docker run中的-d選項(xiàng)有相反的含義,實(shí)際開發(fā)過程中用的不多。
參考:
http://blog.poetries.top/2018/11/20/docker-base/
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的docker 容器运行 golang程序_「Docker」 - 运行 amp; 管理容器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 985送外卖的硕士想结束北漂:工作已辞仍
- 下一篇: 25周年纪念!4K 3D《泰坦尼克号》今