快收藏!超强图解Docker常见命令与实战!

快收藏!超强图解Docker常见命令与实战!

镜像容器根底

(一)基本概念

容器 = 镜像 + 读写层

快收藏!超强图解Docker常见命令与实战!

(二)镜像

快收藏!超强图解Docker常见命令与实战!

(三)容器

快收藏!超强图解Docker常见命令与实战!

(四)运转的容器

一个运转态容器(running container)被界说为一个可读写的一致文件体系加上阻隔的进程空间和包含其间的进程。下面这张图片展现了一个运转中的容器

快收藏!超强图解Docker常见命令与实战!

正是文件体系阻隔技术使得Docker成为了一个前途无量的技术。一个容器中的进程或许会对文件进行修正、删去、创建,这些改动都将作用于可读写层(read-write layer)。下面这张图展现了这个行为。

快收藏!超强图解Docker常见命令与实战!

(五)镜像层(image layer)

快收藏!超强图解Docker常见命令与实战!

元数据(metadata)便是关于这个层的额外信息,它不仅能够让Docker获取运转和构建时的信息,还包含父层的层次信息。需求留意,只读层和读写层都包含元数据。

快收藏!超强图解Docker常见命令与实战!

除此之外,每一层都包含了一个指向父层的指针。假如一个层没有这个指针,阐明它处于最底层。

快收藏!超强图解Docker常见命令与实战!

快收藏!超强图解Docker常见命令与实战!

常用指令

(一)docker create

快收藏!超强图解Docker常见命令与实战!

docker create 指令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器。留意,这个容器并没有运转

快收藏!超强图解Docker常见命令与实战!

(二)docker start

快收藏!超强图解Docker常见命令与实战!

Docker start指令为容器文件体系创建了一个进程阻隔空间。留意,每一个容器只能够有一个进程阻隔空间。

(三)docker run

快收藏!超强图解Docker常见命令与实战!

docker start 和 docker run指令有什么区别

快收藏!超强图解Docker常见命令与实战!

从图片能够看出,docker run 指令先是利用镜像创建了一个容器,然后运转这个容器。这个指令十分的方便,而且躲藏了两个指令的细节,但从另一方面来看,这简略让用户产生误解。

**(**四)docker ps

快收藏!超强图解Docker常见命令与实战!

docker ps 指令会列出一切运转中的容器。这躲藏了非运转态容器的存在,假如想要找出这些容器,咱们需求运用下面这个指令。

**(**五)docker ps –a

快收藏!超强图解Docker常见命令与实战!

docker ps –a指令会列出一切的容器,不管是运转的,还是中止的。

(六)docker images

快收藏!超强图解Docker常见命令与实战!

docker images指令会列出了一切顶层(top-level)镜像。实际上,在这儿咱们没有办法区分一个镜像和一个只读层,所以咱们提出了top-level镜像。只要创建容器时运用的镜像或许是直接pull下来的镜像能被称为顶层(top-level)镜像,而且每一个顶层镜像下面都躲藏了多个镜像层。

(七)docker images –a

快收藏!超强图解Docker常见命令与实战!

docker images –a指令列出了一切的镜像,也能够说是列出了一切的可读层。假如你想要检查某一个image-id下的一切层,能够运用docker history来检查

(八)docker stop

快收藏!超强图解Docker常见命令与实战!

docker stop指令会向运转中的容器发送一个SIGTERM的信号,然后中止一切的进程。

(九)docker kill

快收藏!超强图解Docker常见命令与实战!

docker kill 指令向一切运转在容器中的进程发送了一个不友好的SIGKILL信号。

(十)docker pause

快收藏!超强图解Docker常见命令与实战!

docker stop和docker kill指令会发送UNIX的信号给运转中的进程,docker pause指令则不相同,它利用了cgroups的特性将运转中的进程空间暂停。详细的内部原理你能够在这儿找到:www.kernel.org/doc/Doc … m.txt,但是这种方法的不足之处在于发送一个SIGTSTP信号对于进程来说不够简略易懂,以至于不能够让一切进程暂停。

(十一)docker rm

快收藏!超强图解Docker常见命令与实战!

docker rm指令会移除构成容器的可读写层。留意,这个指令只能对非运转态容器履行。

(十二)docker commit

快收藏!超强图解Docker常见命令与实战!

docker commit指令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。

快收藏!超强图解Docker常见命令与实战!


(十三)docker build

快收藏!超强图解Docker常见命令与实战!

docker build指令十分有趣,它会反复的履行多个指令。

快收藏!超强图解Docker常见命令与实战!

(十四)docker exec

快收藏!超强图解Docker常见命令与实战!

docker exec 指令会在运转中的容器履行一个新进程。

(十五)docker inspect or

快收藏!超强图解Docker常见命令与实战!

docker inspect指令会提取出容器或许镜像最顶层的元数据。

(十六)docker save

快收藏!超强图解Docker常见命令与实战!

docker save指令会创建一个镜像的压缩文件,这个文件能够在别的一个主机的Docker上运用。和export指令不同,这个指令为每一个层都保存了它们的元数据。这个指令只能对镜像收效。

(十七)docker export

快收藏!超强图解Docker常见命令与实战!

docker export指令创建一个tar文件,而且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当时一致视角看到的内容(译者注:expoxt后的容器再import到Docker中,经过docker images –tree指令只能看到一个镜像;而save后的镜像则不同,它能够看到这个镜像的前史镜像)。

(十八)docker history

快收藏!超强图解Docker常见命令与实战!

docker history指令递归地输出指定镜像的前史镜像。

(十九)docker prune

prune 指令用来删去不再运用的 docker 目标。删去一切未被 tag 符号和未被容器运用的镜像:

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

删去一切未被容器运用的镜像:

$ docker image prune -a
. 文件文件分层

快收藏!超强图解Docker常见命令与实战!

docker commit 和 docker create是对应的,上图能够看到文件分为多层后最后有一个可读写的层 删去一切未被 tag 符号和未被容器运用的镜像:

快收藏!超强图解Docker常见命令与实战!
实战

(一)Docker搬迁与备份

  • 咱们能够经过以下指令将容器保存为镜像

  • 咱们能够经过以下指令将镜像保存为tar 文件

  • 首要咱们先删去掉mynginx_img镜像 然后履行此指令进行康复

docker commit mynginx mynginx_i
docker save -o mynginx.tar mynginx_i
docker load -i mynginx.tar

(二)从Dockerfile中检查分层镜像

我有一个ordersystem容器,Dockerfile文件如下:

FROM csighub.tencentyun.com/medipedia/medi-saas-go:latest
RUN mkdir -p /app/logs/
ADD pop-admin-server /usr/local/services/pop-admin-server/
COPY script/supervisord.ini /etc/supervisord.d/
COPY script/kick_start.sh /etc/kickStart.d/
# 创建存放导入文件的目录
RUN mkdir -p /usr/local/services/pop-admin-server/importfile
RUN mkdir -p /usr/local/services/pop-admin-server/upload
# fix a protocol buffer namespace conflict
ENV GOLANG_PROTOBUF_REGISTRATION_CONFLICT warn
# 修正镜像的显示字符集
ENV LANG en_US.UTF-8

咱们检查镜像

[root@VM-0-14-centos ordersystem]# docker images -a
REPOSITORY      TAG          IMAGE ID       CREATED          SIZE
ordersystem     3.1          e1a9552f4a9a   51 minutes ago   380MB
<none>          <none>       42959ee6c01b   51 minutes ago   380MB
<none>          <none>       4b45c5bb3b60   51 minutes ago   380MB
<none>          <none>       7de0f7950baf   51 minutes ago   380MB
<none>          <none>       5eccd3fb7501   51 minutes ago   380MB
<none>          <none>       516957abdce4   51 minutes ago   380MB
<none>          <none>       4c72f0036ea9   51 minutes ago   380MB

这儿需求考虑一下none是啥呢?

[root@VM-0-14-centos ordersystem]# docker history e1a9552f4a9a
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
e1a9552f4a9a   50 minutes ago   /bin/sh -c #(nop)  CMD ["/etc/kickStart.d/ki…   0B        
7de0f7950baf   50 minutes ago   /bin/sh -c #(nop)  EXPOSE 8000                  0B        
42959ee6c01b   50 minutes ago   /bin/sh -c #(nop)  ENV GO111MODULE=on CGO_EN…   0B        
4b45c5bb3b60   50 minutes ago   /bin/sh -c chmod +x /etc/kickStart.d/kick_st…   327B      
516957abdce4   50 minutes ago   /bin/sh -c #(nop) COPY file:063b1bd47099a218…   327B      
4c72f0036ea9   50 minutes ago   /bin/sh -c #(nop) COPY file:1edd608d8faba17f…   381B      
5eccd3fb7501   50 minutes ago   /bin/sh -c #(nop) ADD file:446cb8b7dbc762daa…   13.5MB

快收藏!超强图解Docker常见命令与实战!

(三)容器的可读写层

容器的可读写层便是容器是能够用exec -it 去进入容器,但是镜像不可,容器可更改,镜像不可

[root@VM-0-14-centos ordersystem]# docker ps CONTAINER ID   IMAGE             COMMAND                  CREATED       STATUS       PORTS                                                  NAMES67252e999d5d   mysql             "docker-entrypoint.s…"   9 days ago    Up 9 days    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysqlffcb1d91e28f   ordersystem:2.2   "/etc/kickStart.d/ki…"   2 weeks ago   Up 2 weeks   0.0.0.0:9020->8000/tcp, :::9020->8000/tcp              ordersystem853c6e86eee6   nginx             "/docker-entrypoint.…"   5 weeks ago   Up 2 weeks   0.0.0.0:80->80/tcp, :::80->80/tcp                      mynginx[root@VM-0-14-centos ordersystem]# docker exec -it ffcb1d91e28f /bin/sh/go # lsbin              src              supervisord.log  supervisord.pid

(四)编译镜像以及发布

docker run :运转镜像生成容器( d表示运转在后台,-p表示绑定到指定的主机端口)

docker build -t hellogin -f Dockerfile
docker images
docker run --name=hellogin -d -p 9020:8000 hellogin

让本地和长途同享文件

docker run --name=hellogin -d -p 9020:8000 hellogin

参考文档

1.10张图带你深入了解Docker容器和镜像

2.Docker搬迁与备份

3.docker prune 指令

阅读原文