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