Loading

详解 Docker 中的 image 和 container

Docker架构图

Docker 是一种容器。Docker 中十分重要的两个概念 Imagecontainer,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 的方法:

  1. 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 .
    
  2. 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 更加透明,让人感觉更加安全。

posted @ 2020-08-19 10:50  x0c  阅读(5872)  评论(0编辑  收藏  举报