詳解 Docker 中的 image 和 container
Docker 是一種容器。Docker 中十分重要的兩個概念 Image 和 container,Image 和 container 可以看作面向對象思想中的類和對象。container 是 Image 的實例化。
Image 是只讀的,分為 Base Image 和普通 Image,Base Image 是直接基於內核構造的,例如 Ubuntu Image、Centos Image 等。
Image 的操作
# 列出本地所有Images $ docker image ls # 或者 $ docker images # 運行某個Image $ docker run hello-world
兩種獲取 Image 的方法:
-
Build from Dockerfile:
新建一個 Dockerfile,例:
FROM centos RUN yum install -y vim
構建 Image:
$ docker image build -t tag/image-name . # 或者 $ docker build -t tag/image-name .
-
Pull from Registry(類似 Github):
$ docker pull hello-world
刪除 Image:
$ docker rmi <IMAGE ID> # IMAGE ID不必寫全
Container 的操作
列出 Containers:
$ docker container ls # 或者 $ docker ps # 列出所有包括已經退出的Container $ docker container ls -a # 或者 $ docker ps -a
交互式運行 Container:
$ docker run -it centos # 此centos與宿主機共享內核,使用uname -a查看內核
后台運行 container:
$ docker run -d flask-hello-world # 如果不使用--name,將會隨機生成一個容器名
重啟某個 Container:
$ docker start <container_name>
刪除一個 Container
$ docker container rm <CONTAINER ID> # CONTAINER ID不必寫全 # 或者 $ docker rm <CONTAINER ID>
刪除所有 Container:
$ docker rm $(docker container ls -aq) # 刪除所有已退出的Container $ docker rm $(docker container ls -f "status=exited" -q)
將一個經過修改后的 container 生成為一個新的 image:
$ docker container commit interesting_wilson x0c/centos-vim sha256:9a746e51ff5f95dd4119a8bfebf6d678b93b0c4f0bc786bf2df61da495fc7f25 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE x0c/centos-vim latest 9a746e51ff5f 7 seconds ago 330MB centos 7 b5b4d78bc90c 2 weeks ago 203MB $ docker history 9a746e51ff5f IMAGE CREATED CREATED BY SIZE 9a746e51ff5f 43 seconds ago /bin/bash 127MB b5b4d78bc90c 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 2 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:38e2d2a1a0cd8694b… 203MB
以上這種方法不太提倡,最好還是通過 Dockerfile build a image,這樣的 Image 更加透明,讓人感覺更加安全。