一篇文章搞懂 docker

一、概念:

镜像(image) 一堆只读层(read-only layer)的统一视角 (类)

容器(container) 也是一堆层的统一视角,区别在于容器最上面那一层是可读可写的 (对象)

容器 = 镜像 + 读写层

容器的定义没有提及是否要运行容器

运行态容器(running container)

一个可读写的统一文件系统 + 隔离的进程空间 + 包含其中的进程。

二、资源:

docker官网:http://www.docker.com

Docker Windows 入门:https://docs.docker.com/docker-for-windows/

Docker CE(社区版) Ubuntu:https://docs.docker.com/install/linux/docker-ce/ubuntu/

Docker mac 入门:https://docs.docker.com/docker-for-mac/

Docker 用户指引:https://docs.docker.com/config/daemon/

扫描二维码关注公众号,回复: 9948727 查看本文章

Docker 官方博客:http://blog.docker.com/

Docker Hub: https://hub.docker.com/

Docker开源: https://www.docker.com/open-source

三、命令:

容器生命周期管理:

run、 start/stop/restart、 kill 、rm、 pause/unpause、create、exec

容器操作

ps、inspect、top、attach、events、logs、wait、export、port

容器roofts命令

commit、cp、diff

镜像仓库

login、pull、push、search

本地镜像管理

images、rmi、tag、build、history、save、load、import

info|version

info、version

docker create

为指定的镜像(image)添加一个可读写层,构成了一个新容器。此时容器并没有运行

docker start

为容器文件系统创建了一个进程隔离空间。每个容器只能够有一个进程隔离空间

docker run

docker create + docker start

docker ps

列出 所有运行中的容器。docker ps -a 列出所有容器

docker images

列出所有顶层(top-level)镜像。只有创建容器时使用的镜像或者是直接pull下来的镜像能被成为顶层镜像,并且每一个顶层镜像下面都隐藏了多个镜像层

docker images -a

列出所有的可读层。 想要查看某一个image-id 下的所有层,可以使用docker history 来查看

docker stop

向运行中的容器发送一个SIGTERM 的信号,然后停止所有的进程

docker kill

向所有运行在容器中的进程发送了一个不友好的SIGKILL信号

docker pause

利用cgroups的特性将运行中的进程空间暂停。

docker rm

移除构成容器的可读写层。这个命令只能对非运行态容器执行

docker commit

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

docker rmi

移除构成镜像的一个只读层。只能够使用 docker rmi 来移除最顶层(top level layer)(也可以说是镜像) ,也可以使用 -f 参数来强制删除中间的只读层

docker build

build 命令根据Dockerfile 文件中的FROM指令获取到镜像,然后重复地
  1. run
  2. 修改
  3. commit
在循环中的每一步都会生成一个新的层,因此许多新的层都会被创建

docker exec

在运行中的容器执行一个新进程

docker inspect or

提取出容器或者镜像最顶层的元数据

docker save

创建一个镜像压缩文件,这个文件能够在另一台主机的Docker上使用。和export 命令不同,这个命令为每一个层都保留了它们的元数据。这个命令只对镜像生效

docker export

该命令会创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成了一个层,只保存了当前统一视角看到的内容(export 后的容易再import 到Docker 中,通过docker images -tree 只能看到一个镜像;而save后的镜像则不同,它能看到这个镜像的历史镜像)

docker history

递归地输出指定镜像的历史镜像

Dockerfile

FROM

指定构建镜像的基础源镜像。本地如果没有,会从Docker公共库 pull下来

FROM 必须是Dockerfile中非注释行的第一个指令,即一个Dockerfile从FROM语句开始

FROM 可以在一个Dockerfile中出现多次,如果有需求需要创建多个镜像

如果FROM语句没有指定镜像标签,则默认使用latest标签

MAINTAINER

指定创建镜像的用户

RUN

RUN “executable”,“param1”,“param2”

每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建,类似源码的版本控制

CMD “executable”,“param1”,“param2”

CMD “param1”,“param2”

CMD command param1 param2

CMD 指定在Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效

CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令

EXPOSE [……]

告诉Docker 服务端容器对外映射的本地端口,需要在docker run 使用 -p 或者 -P选项生效

ENV #只能设置一个变量

ENV =…… #允许一次设置多个变量

指定一个环节变量,会被后续RUN指令使用,并在容器运行时保留

ADD ……

复制本地主机文件、目录或者远程文件URLS并添加到容器指定路径中

COPY ……

用法同ADD,唯一不同是不能指定远程文件URLS

ENTRYPOINT “executable”,“param1”,“param2”

ENTRYPOINT command param1 param2

配置容器启动后执行的命令,并且不可被docker run 提供的参数覆盖,而CMD是可以被覆盖的。如果需要覆盖,则可以使用docker run --entrypoint 选项
每个 Dockerfile 中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效。

VOLUME 【"/data"】

创建一个可以从本地主机或者其他容器挂载的挂载点

USER daemaon

指定运行容器时的用户名或者UID,后续的RUN,CMD,ENTRYPOINT也会指定用户

WORKDIR path/to/workdir

为后续的RUN,CMD,ENTRYPOINT指令配置工作目录,可以多个WORKDIR指令,相当于cd

ONBUILD [INSTRUCTION]

配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令

例如,Dockerfile 使用如下的内容创建了镜像 image-A:

[…] ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build --dir /app/src […]

如果基于 image-A 创建新的镜像时,新的 Dockerfile 中使用 FROM image-A 指定基础镜像时,会自动执行 ONBUILD 指令内容,等价于在后面添加了两条指令。
\# Automatically run the following ADD . /app/src RUN /usr/local/bin/python-build --dir /app/src

使用ONBUILD指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild。

发布了225 篇原创文章 · 获赞 385 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/104788693