docker容器基本知识和使用

docker使用基础命令

1、容器生命周期管理命令:

docker create:创建一个容器
docker start: 启动一个容器
docker run : 创建并运行一个容器
docker pause: 暂停一个容器
docker unpause:恢复一个容器
docker stop:停止一个运行的容器
docker rm : 删除一个处于终止状态的容器
docker kill : 杀死容器进程
docker container prine: 删除所有终止状态容器

2、docker run后常用选项

  1. -d:以后台方式启动容器;
  2. -p:容器端口与宿主机端口进行映射;
  3. -it:在容器启动后,通过命令行终端与容器交互;
  4. -h:指定容器的hostname。

3、若要进入容器进行调试,有两种方法:

docker attach命令
- docker attach命令直接进入已启动的容器的命令终端,不会启动新的进程
- usage:docker attach [OPTIONS] CONTAINER
dcoker exec命令
- docker exec命令是在容器中打开新的终端。
- usage:docker exec [OPTIONS] container command [ARG..]

4、docker容器的状态

  1. created
  2. exited
  3. running
  4. paused

5、容器镜像

容器镜像是容器的模板,容器是镜像的运行实例,runtime根据容器镜像创建时间。
容器镜像挂在容器根目录下,是为容器中的应用提供隔离后执行环境的文件系统。

  • 容器镜像打包了整个操作系统的文件和目录,当然也包括应用本身,即,应用及其运行所需的所有依赖,都在被封装在容器镜像中。保证了本地环境和云端环境的高度一致。

容器镜像采用分层结构:

  • 所有容器共享宿主机内核,并且不能修改宿主机内核,即,容器运行过程中使用容器镜像里的文件,使用宿主机os上的内核。

对于软件开发而言,容器镜像打通了“开发-测试-部署”的流程。

5、base镜像

从scratch构建,不依赖其他镜像

  • 本身是个空镜像。
  • 其他镜像可以在base镜像上进行扩展,创建新的镜像。

最常用的base镜像是各Linux发行版的docker镜像,如ubuntu、centos等。

容器镜像采用分层结构,可分为镜像层和容器层:

  • 镜像层:只读,每一个镜像层都可以共享。
  • 容器层:可读写,在容器启动时被加载到镜像层之上。

容器是由若干只读镜像层和最上面的一个可写容器层构成。分层结构使镜像共享、容器创建,分发非常高效。

6、UnionFS联合文件系统

UnionFS主要的功能是将多个不同位置的目录联合挂载到同一个目录下。

每一个镜像层都是Linux操作系统文件与目录的一部分,在使用镜像时,docker会将所有的镜像层联合挂载到一个统一的挂载点上,表现为一个完整的Linux操作系统供容器使用。

docker镜像分层结构的实现,借助于UnionFS联合文件系统的能力。

Union File System联合文件系统,是实现Docker镜像的技术基础。它是一种轻量级高性能分层文件系统,支持将文件系统中的修改进行提交和层层叠加,这个特性使得镜像可通过分层实现和继承。同时支持将不同目录挂载到同一个虚拟文件系统下。

7、容器copy-on-write特性

创建文件:新文件只能被添加在容器层中。

删除文件:依据容器分层结构由上而下依次查找。找到后,在容器层中记录该删除操作。具体实现是UnionFS会在容器层创建一个"whiteout"文件,将被删除的文件“遮挡起来”。

修改文件:依据容器分层结构由上往下依次查找。找到后,将镜像层中的数据复制到容器层进行修改,修改后的数据保存到容器层中。

读取文件:依据容器分层结构由上往下依次查找。

所有storage driver都支持镜像分层结构和写时复制(CoW)策略。

8、构建镜像

docker commit命令:可将一个运行中的容器保存为镜像。

  • 运行一个容器
  • 修改容器内容
  • 将容器保存为镜像
1、docker run -d centos /bin/bash #运行一个centos容器中运行/bin/bash
2、docker commit 
3、docker history #指令会显示镜像的构建过程,并且按照镜像层的顺序由上至下排列

9、Dockerfile

Dockerfile:文件指令集,描述如何自动创建Docker镜像。
Dockerfile文件中的指令执行后,会创建一个新的镜像层。
Dockerfile文件中的注释以“#”开始。
Dockerfile一般由4部分组成:

  1. 基础镜像信息
  2. 维护者信息
  3. 镜像操作指令
  4. 容器启动指令

bulid context:为镜像构建提供所需的文件或目录。

指令 作用 命令格式
FROM 指定base镜像 FROM :
MAINTAINER 注明镜像的作者 MAINTAINER
RUN 运行指定的命令 RUN
ADD 将文件从build context复制到镜像中 ADD [–chown = :] …
COPY 将文件从build context复制到镜像中 COPY[–chown = :] …
ENV 设置环境变量 ENV
EXPOSE 指定容器中的应用监听端口 EXPOSE [/… ]
USER 设置启动容器的用户 USER [:]
CMD 设置在容器启动时运行指定的脚本或命令 CMD command param1 param2
ENTRYPOINT 指定的是一个可执行的脚本或者程序的路径 ENTRYPOINT command param1 param2
VOLUME 将文件或目录声明为volume,挂载到容器中 VOLUME [/data]
WORKDIR 设置镜像的当前工作目录 WORKDIR /path/to/workdir

如果使用Dockerfile来构建镜像,Dockerfile的第一条有效信息(注释除外)必须是镜像信息,维护者信息紧随其后,而镜像操作指令则在维护者信息之后,因为操作指令的不同,自然会构建出千差万别的镜像来,最后是镜像启动指令,他被用作设置镜像的默认启动命令。

Dockerfile的指令根据作用分为两种:

  • 构建指令:构建指令用于构建Image,其指定的操作不会在运行image的容器上执行。
  • 设置指令:设置指令用于设置image的属性,其指定的操作将在运行iamge的容器中执行。

Dockerfile指令使用注意事项:

  • RUN等指令后运行的必须是基础Image支持的命令,如基础image选择了centos,那么软件管理部分只能使用centos的命令。
  • ADD指令与COPY指令的不同在于,在ADD指令中,若src是压缩文件,则会自动解压到dest。
  • Dockerfile中若有多条CMD命令,则只执行最后一条。
  • Dockerfile中若有多条ENTRYPOINT命令,则只执行最后一条。
  • CMD与ENTRYPOINT的不同在于,当Docker run command的命令匹配到CMD command时,会替换CMD执行的命令。

Dockerfile在执行过程中,会启动临时容器,然后在临时容器中执行一条指令对容器内容进行修改,再将该日本分区保存为一个新的镜像层,最后删除这个临时容器,若dockefile中有多条指令,则会重复这个过程,直到执行结束。

使用docker build命令构建镜像时,使用–no-cache参数可表面不使用镜像缓存。

10、镜像命名

格式:
image name = repository:tag
tag一般用于描述镜像版本,若未指定tag,则默认为“latest”

11、Registry

Registry是存放容器镜像的仓库,用户可以进行镜像下载和访问,分为公有和私有两类Registry。

公有镜像仓库:

  1. Docker Hub是Docker公司为公众提供的托管Registry。
  2. Quay.io现为Red Hat下的公共托管Registry。

你可能感兴趣的:(docker容器)