Docker镜像,容器和仓库(一)

241 阅读6分钟

1.Docker镜像

1.1 获取镜像

docker pull NAME[:TAG] 从镜像源下载镜像

NAME:镜像仓库名称

TAG:标签,默认latest

命令选项描述
-a是否获取仓库中所有镜像
默认false
--disable-content-trust取消镜像内容校验
默认true

1.2 查看镜像信息

1.2.1 ls

docker images 或 docker image ls 列出本地已有镜像基本信息

1.2.2 tag

docker tag IAMGE_NAME:TAG NEW_IMAGE_NAME:NEW_TAG 为本地镜像任意添加新标签

docker tag 命令添加标签类似链接的作用,他们实际上指向同一个镜像文件,只是别名不同

1.2.3 inspect

docker inspect NAME:TAG 获取镜像的详细信息

1.2.4 history

docker history NAME:TAG 查看镜像历史信息

1.3 查找镜像

docker search [option] keyword 从镜像源中搜索镜像

命令选项描述
--filter filter过滤输出内容
--format string格式化输出内容
--limit int限制输出个数
默认25
--no-trunc不截断输出结果

1.4 删除清理镜像

1.4.1 rmi

docker rmi IMAGE [IMAGE...] 删除本地镜像

IMAGE:镜像ID或者标签

命令选项描述
-f强制删除镜像,即使有容器依赖
-no-prune不清理未带标签的父镜像

1.4.2 prune

docker image prune 清理镜像临时文件

命令选项描述
-a同时删除所有未使用的镜像
-filter filter清理符合给定过滤器的镜像
-f强制删除镜像,不进行确认提示

1.5 创建镜像

创建镜像主要有两种方式:基于已有镜像的容器创建,基于Dockerfile创建

1.5.1 基于已有容器创建

docker commit [option] CONTAINER NAME[:TAG]

CONTAINER:容器ID

NAME:自定义名称

TAG:自定义标签

命令选项描述
-a, --author string作者信息
-c, --change=[]提交时执行Dockerfile指令
-m, --message string提交信息
-p, --pause=true提交时暂停容器的运行

1.5.2 基于Dockerfile创建

Dockerfile是一个文本文件,给定指令描述基于父镜像创建新镜像

docker build [option] NAME[:TAG]

NAME:名称

TAG:标签

更多使用Dockerfile的技巧后续介绍

1.6 存出和载入镜像

1.6.1 存出镜像

docker save [option] NAME[:TAG]

NAME:镜像仓库名称

TAG:标签

命令选项描述
-o, -output string导出镜像到指定文件中

1.6.2 载入镜像

docker load -i FILE 或 docker load < FILE

FILE:指定文件载入镜像

1.7 上传镜像

docker push NAME[:TAG] 上传本地镜像

NAME:镜像仓库名称

TAG:标签

2.Docker容器

docker容器是docker镜像的一个运行实例

2.1 创建容器

docker create [option] NAME[:TAG] 创建一个停止状态的新容器

NAME:镜像仓库名称

TAG:标签

常用命令选项:

命令选项描述
-d, --detach=true|false是否后台运行容器
默认false
--expose=[]容器暴露出来的端口或端口范围
-i, --interactive=true|false保持标准输入打开
默认false
--net string容器网络模式
默认bridge
-p, --publish=[]指定容器到主机的端口映射
--rm=true|false容器推出后是否自动删除
-t, --tty=true|false是否分配一个伪终端
默认false
-v, --volume挂载主机上的文件卷到容器内
--dns=[]自定义DNS服务器
-e, --env=[]指定容器内的环境变量
-h, --hostname=""指定容器内的主机名
--ip=""指定容器IPv4地址
--ip6=""指定容器IPv6地址
--link=[]连接到其它容器
--mac-address=""指定容器Mac地址
--name=""指定容器别名
-m, --memory=""限制容器内应用使用的内存
单位:b, k, m, g

2.2 启动容器

docker start CONTAINER 启动一个已经创建的容器

2.3 重启容器

docker restart CONTAINER 重启运行中的容器

2.4 创建并启动容器

docker run [option] NAME[:TAG] [/bin/bash] 创建并启动容器

NAME:镜像仓库名称

TAG:标签

/bin/bash:启动一个bash终端

可用命令选项同create操作

2.5 暂停容器

docker pause CONTAINER [CONTAINER...] 暂停运行中的容器

docker unpause CONTAINER [CONTAINER...] 恢复暂停的容器到运行中

2.6 终止容器

docker stop CONTAINER 终止运行中的容器

终止状态的容器可以使用start命令重新启动

2.7 进入容器

当创建容器时使用-d参数,容器启动后会进入到后台运行。

使用官方的attachexec命令可以进入到容器内部。

2.7.1 attach

docker attach [option] CONTAINER

命令选项描述
--detach-keys[=[]]退出attach模式的快捷键序列
默认ctrl-p ctrl-q
--no-stdin=true|false是否关闭标准输入
默认false(打开)
--sig-proxy=true|false是否代理收到的系统信号给应用进程
默认true

当有多个窗口同时attach到同一个容器时,所有窗口会同步显示,当某个窗口阻塞时,其它窗口也无法执行操作

2.7.2 exec

docker exec [option] CONTAINER /bin/bash 进入指定的容器并启动一个bash

/bin/bash:启动一个bash终端

命令选项描述
-d, --detach在容器中后台执行命令
--detach-keys=""指定将容器切回后台的按键
-e, --env=[]指定环境变量列表
-i, --interactive=true|false打开标准输入,接受用户输入命令
默认false
--privileged=true|false是否给执行命令最高权限
默认false
-t, --tty=true|false是否分配伪终端
默认false
-u, --user=""执行命令的用户名或ID

2.8 删除容器

docker rm [option] CONTAINER [CONTAINER...] 删除容器

命令选项描述
-f, --force=false是否强制终止并删除一个运行中的容器
-l, --link=false删除容器的连接,保留容器
-v, --volumes=false删除容器挂载的数据卷

2.9 查看容器

2.9.1 查看容器详情

docker container inspect CONTAINER [CONTAINER...]

2.9.2 查看容器内进程

docker [container] top [option] CONTAINER [CONTAINER...]

命令选项描述
-a, --all输出所有容器统计信息
默认仅运行中的容器
-format string格式化输出信息
-no-stream不持续输出
默认自动持续更新实时结果
-no-trunc不截断输出信息

2.10 其它

2.10.1 文件复制

docker [container] cp [option] SRC_PATH CONTAINER:DEST_PATH

将源路径SRC_PATH复制到指定容器的目标路径DEST_PATH

命令选项描述
-a, -archive打包模式
-L, -follow-link跟随软链接

2.10.2 查看容器内文件系统的变更

docker [container] diff CONTAINER

2.10.3 查看端口映射

docker container port CONTAINER

3.Docker仓库

Docker仓库(Repository)是集中存放Docker镜像的地方,它可以分为私有仓库和公有仓库。

3.1 DockerHub公共镜像市场

Docker官方提供了一个最大的公共镜像仓库DockerHub,对于绝大部分镜像的需求都可以在DockerHub中直接下载。国内从DockerHub拉取镜像是会遇到困难,可以通过配置镜像加速器解决解决。

3.2 第三方镜像市场

国内有大量的云服务商都提供了Docker镜像市场,如:腾讯云,网易云,阿里云等。

3.3 本地私有仓库搭建管理

3.3.1 搭建

使用Docker官方提供的registry镜像

docker run -d -p 5000:5000 registry:2

默认情况下,仓库会被创建到容器的/var/lib/registry目录,此时本地将会启动一个私有仓库服务,监听的端口为:5000。

3.3.2 管理

常用命令参考以上章节,使用私有仓库时,需要在镜像名称前添加地址(ip:port,如:172.0.0.1:5000)。

对于比较新版本的Docker,对于安全性的要求也比较高,要求仓库支持SSL/TLS证书,对于仅在内部使用的私有仓库,可以配置证书或关闭对仓库安全性的检查。

通过修改Docker daemon启动参数,添加受信任的私有仓库地址

DOCKER_OPTS="--insecure-registry ip:port"