在這一章節將會講解Container的生老病死,並透過各種基礎的docker commands來帶大家玩轉docker container。那這邊我會依照個人使用經驗給出每個command的星數,較少使用為1,會頻繁使用為3。
Container與人一樣有著生老病死,我們將Image(container的靈魂)從家中(Docker Hub) pull下來並create的同時,這個container就在你家誕生了,在使用docker rm的同時,container將會死去。但比較令人疑惑的應該是Exited與Paused這兩個狀態。
Exited表示該container暫時性地被關閉,並且不會在使用環境的任何資源,下次再啟動時,必須重新執行該container。
Paused則表示該container暫時性地被暫停,但依舊會使用著環境資源(memories),下次在unpause同時,會從上次暫停的地方繼續執行。
$ docker -v
透過該指令得到docker的版本資訊
$ docker —help
透過該指令得到docker的相關command以及簡介
$ docker info
透過該指令得到目前docker engine的相關設定
$ docker images
透過該指令能夠看到本地端的images。
$ docker images
python 3.8.2 4f7cd4269fa9 4 months ago 934MB
ubuntu latest 1d622ef86b13 4 months ago 73.9MB
ubuntu 18.04 c3c304cb4f22 4 months ago 64.2MB
postgres 12 0f10374e5170 4 months ago 314MB
nginx latest 602e111c06b6 4 months ago 127MB
cnych/jenkins jnlp6 1040138b5448 12 months ago 1.01GB
nginx 1.12 4037a5562b03 2 years ago 108MB
redis 4.0.1-alpine d8b7cc942736 2 years ago 27.5MB
rabbitmq 3.6.11-management-alpine 3af958ea2e6f 3 years ago 38.7MB
$ docker pull /:
透過該指令能夠去拉遠端Registry的指定image,但通常不會下該指令,
原因是在start container by image抑或是build container by image時,若需要該image,docker engine會幫你自動地去pull。
若無指定registry,則預設為registry.hub.docker.com
$ docker pull nginx:1.13
1.13: Pulling from library/nginx
f2aa67a397c4: Already exists
3c091c23e29d: Pull complete
4a99993b8636: Pull complete
Digest: sha256:b1d09e9718890e6ebbbd2bc319ef1611559e30ce1b6f56b2e3b479d9da51dc35
Status: Downloaded newer image for nginx:1.13
docker.io/library/nginx:1.13
$ docker create /:
透過該指令能夠創建container但不去啟動它,而這個指令也非常少使用,通常都是使用docker run去直接並創建並運行container,就算有特殊需求要在container創建後佇列一段時間,也會利用entrypoint達成。
$ docker create nginx:1.13
4f0b13209dca7019148fe2659dfb33261a83424d3a60409ffa5b926cee128004
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f0b13209dca nginx:1.13 "nginx -g 'daemon of…" 4 seconds ago Created awesome_satoshi
$ docker ps
透過該指令去取得目前container的運行資訊,如果沒有帶argument a的話,則會只顯示運行中的containers
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f0b13209dca nginx:1.13 "nginx -g 'daemon of…" 4 seconds ago Created awesome_satoshi
$ docker start <container_name>
$ docker start <container_id>
透過該指令去啟動已經建立但尚未啟動的container,並且只能使用container id或是container name來啟動container
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f0b13209dca nginx:1.13 "nginx -g 'daemon of…" 4 seconds ago Created
$ docker start 4f0b13209dca
4f0b13209dca
$ docker run /:
docker run = docker create + docker start
$ docker run -d --name nginx nginx:1.13
我在上面的command中加上了argument d,使container在背景中而非command line前景執行,並加上argument -name,命名我啟動的container為nginx。
那在後面的篇幅會更加細部介紹如何活用各種arguments,達到開發人員想要達到的效果。
$ docker stop <container_id>
or
$ docker stop <container_name>
發出一個TERM訊號,讓container進行退出前時所需執行的安全性操作,之後停止容器運作。
$ docker kill <container_id>
or
$ docker kill <container_name>
發出一個KILL訊號,強制container立即性地停止容器運作,有點類似於kill -9 process。
$ docker remove <container_id>
or
$ docker remove <container_name>
對於已經停止的container進行移除。
由於篇幅原因,這邊只介紹最基礎的docker commands,在接下來的篇幅會開始講解更進階的commands如何使用,以及如何撰寫Dockerfile..等。
在這章節中,我們知道了container的life cycle,並學習到了docker基本commands的運用,也希望各位能將常用指令記熟! 下一章節會教大家開始撰寫自己的Dockerfile,敬請期待!!
https://docs.docker.com/engine/reference/commandline/docker/
https://medium.com/future-vision/docker-lifecycle-tutorial-and-quickstart-guide-c5fd5b987e0d