iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1
DevOps

Docker獸 究極進化 ~~ Kubernetes獸系列 第 4

Day-4 初出Docker

前言

在這一章節將會講解Container的生老病死,並透過各種基礎的docker commands來帶大家玩轉docker container。那這邊我會依照個人使用經驗給出每個command的星數,較少使用為1,會頻繁使用為3。

Life cycle of Container

Container與人一樣有著生老病死,我們將Image(container的靈魂)從家中(Docker Hub) pull下來並create的同時,這個container就在你家誕生了,在使用docker rm的同時,container將會死去。但比較令人疑惑的應該是Exited與Paused這兩個狀態。

Exited表示該container暫時性地被關閉,並且不會在使用環境的任何資源,下次再啟動時,必須重新執行該container。

Paused則表示該container暫時性地被暫停,但依舊會使用著環境資源(memories),下次在unpause同時,會從上次暫停的地方繼續執行。

https://ithelp.ithome.com.tw/upload/images/20200919/20129737XZeelnsEOj.png

Get docker related info

$ docker -v

透過該指令得到docker的版本資訊

$ docker —help

透過該指令得到docker的相關command以及簡介

$ docker info

透過該指令得到目前docker engine的相關設定

Show the local images(★★☆)

$ 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

Pull the image(★☆☆)

$ 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

Create the container(★☆☆)

$ 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

list containers(★★★)

$ 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

Start the container(★☆☆)

$ 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

Create & Start the container(★★★)

$ 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,達到開發人員想要達到的效果。

Stop the container(★★☆)

$ docker stop <container_id>

or

$ docker stop <container_name>

發出一個TERM訊號,讓container進行退出前時所需執行的安全性操作,之後停止容器運作。

Kill the container(★☆☆)

$ docker kill <container_id>

or

$ docker kill <container_name>

發出一個KILL訊號,強制container立即性地停止容器運作,有點類似於kill -9 process。

Remove the container(★★☆)

$ docker remove <container_id>

or

$ docker remove <container_name>

對於已經停止的container進行移除。

由於篇幅原因,這邊只介紹最基礎的docker commands,在接下來的篇幅會開始講解更進階的commands如何使用,以及如何撰寫Dockerfile..等。

小結

在這章節中,我們知道了container的life cycle,並學習到了docker基本commands的運用,也希望各位能將常用指令記熟! 下一章節會教大家開始撰寫自己的Dockerfile,敬請期待!!

https://ithelp.ithome.com.tw/upload/images/20200919/20129737HRHgG8gT1h.png

Reference

https://docs.docker.com/engine/reference/commandline/docker/

https://medium.com/future-vision/docker-lifecycle-tutorial-and-quickstart-guide-c5fd5b987e0d


上一篇
Day-3 安裝 Docker
下一篇
Day-5 煉成 Docker Image
系列文
Docker獸 究極進化 ~~ Kubernetes獸30

尚未有邦友留言

立即登入留言