Docker(三)镜像管理&常用命令的使用方法

Docker镜像介绍

Docker 镜像含有启动容器所需要的文件系统及所需要的内容, 因此镜像主要用于创建并启动 docker 容器。

Docker 镜像含里面是一层层文件系统,叫做 Union FS(联合文件系统) ,联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通 linux 的目录结构一样, docker 通过这些文件再加上宿主机的内核提供了一个 linux 的虚拟环境,每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读( readonly)、读写( readwrite)和写出( whiteout-able),但是 docker 镜像中每一层文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统,一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样,当使用镜像的时候,我们只会看到一个完全的整体,不知道里面有几层也不需要知道里面有几层,结构如下:
在这里插入图片描述

一个典型的 Linux 文件系统由 bootfs 和 rootfs 两部分组成, bootfs(boot filesystem) 主要包含 bootloader 和 kernel, bootloader 主要用于引导加载 kernel,当 kernel 被加载到内存中后 bootfs 会被 umount 掉, rootfs (root file system) 包含的就是典型 Linux 系统中的/dev, /proc, /bin, /etc 等标准目录和文件, 下图就是 docker image 中最基础的两层结构,不同的 linux 发行版(如 ubuntu和 CentOS ) 在 rootfs 这一层会有所区别。但是对于 docker 镜像通常都比较小, 官方提供的 centos 基础镜像在 200MB 左右,一些其他版本的镜像甚至只有几 MB, docker 镜像直接调用宿主机的内核,镜像中只提供 rootfs,也就是只需要包括最基本的命令、工具和程序库就可以了, 比如 alpine 镜像,在 5M 左右。

下图就是有两个不同的镜像在一个宿主机内核上实现不同的 rootfs。

在这里插入图片描述
容器、 镜像父镜像:
在这里插入图片描述

Docker常用命令示例

  1. 搜索官方镜像
# 带指定版本号
docker search centos:7.2.1511 
# 不带版本号默认 latest
docker search centos 
  1. 下载镜像
docker pull 仓库服务器:端口/项目名称/镜像名称:版本号
查看本地镜像
docker images

REPOSITORY # 镜像所属的仓库名称
TAG # 镜像版本号(标识符), 默认为 latest
IMAGE ID # 镜像唯一 ID 标示
CREATED # 镜像创建时间
VIRTUAL SIZE # 镜像的大小

  1. 镜像导出:可以将镜像从本地导出问为一个压缩文件,然后复制到其他服务器进行导入使用
# 方法1
docker save centos -o /opt/centos.tar.gz
# 方法2
docker save centos > /opt/centos-1.tar.gz

查看镜像内容:包含了镜像的相关配置, 配置文件、分层

tar xvf centos.tar.gz
cat manifest.json

镜像导入:将镜像导入到 docker

docker load < /opt/centos.tar.gz

删除镜像

docker rmi centos

删除容器(-f 强制)

docker rm 容器 ID/容器名称

Docker常用命令格式介绍及使用示例

命令格式

docker [OPTIONS] COMMAND

常用的COMMAND

[COMMAND]
attach      此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭
build       从Dockerfile构建一个镜像
commit      从容器的更改中创建一个新镜像
cp          在容器和本地文件系统之间复制文件/文件夹
create      创建新容器
diff        检查容器文件系统上文件或目录的更改
events      从服务器获取实时事件
exec        在运行的容器中运行命令
export      将容器的文件系统导出为tar包
history     显示镜像的历史
images      列出镜像
import      从tarball导入内容以创建文件系统镜像
info        显示整个系统的信息
inspect     返回Docker对象的底层信息
kill        停止一个或多个正在运行的容器
load        从tar包或标准输出加载镜像
login       Log in to a Docker registry
logout      Log out from a Docker registry
logs        获取容器的日志
pause       暂停一个或多个容器中的所有进程
port        列出容器的端口映射或特定映射
ps          列出正在运行的容器
pull        下载镜像
push        上传镜像
rename      重命令一个容器
restart     重启容器
rm          移除一个或多个容器
rmi         移除一个或多个镜像
run         在新容器中运行命令
save        将一个或多个图像保存到tar存档文件(默认情况下流到STDOUT)
search      在Docker仓库中搜索镜像
start       启动一个或多个处在停止状态的容器
stats       显示容器资源使用统计数据的实时流
stop        停止一个或多个正在运行的容器
tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top         显示容器的运行进程
unpause     Unpause all processes within one or more containers
update      Update configuration of one or more containers
version     查看版本
wait        阻塞直到一个或多个容器停止,然后打印它们的退出代码

子命令帮助

docker COMMAND --help
退出容器不注销:Ctrl + P + Q

run 在新容器中运行命令

命令格式 docker run [选项] 镜像名 [shell 命令] [参数…]

常用选项

-p list           指定容器的端口发布到主机
-P                将所有公开的端口发布到随机端口
--name string     为容器分配一个名称
-d                在后台运行容器并打印容器ID
-it               创建并进入容器
--rm              当容器退出时自动删除它

例如:

启动的容器在执行完 shell 命令就退出了

#docker run [镜像名] [shell 命令]
docker run centos /bin/echo 'hello wold' 

从镜像启动一个容器:会直接进入到容器, 并随机生成容器 ID 和名称

docker run -it docker.io/centos bash

随机映射端口:

前台启动并随机映射本地端口到容器的 80
docker run -P docker.io/nginx 

前台启动的会话窗口无法进行其他操作,除非退出, 但是退出后容器也会退出随机端口映射, 其实是默认从 32768 开始

指定端口映射:

方式 1:本地端口 81 映射到容器 80 端口:

docker run -p 81:80 --name "nginx-test" nginx
方式 2:本地 IP:本地端口:容器端口

docker run -p 192.168.10.205:82:80 --name "nginx-test" docker.io/nginx
 方式 3:本地 IP:本地随机端口:容器端口

docker run -p 192.168.10.205::80 --name "nginx-test" docker.io/nginx
方式 4:本机 ip:本地端口:容器端口/协议,默认为 tcp 协议

docker run -p 192.168.10.205:83:80/udp --name "nginx-test" docker.io/nginx
 方式 5:一次性映射多个端口+协议:

docker run -p 86:80/tcp -p 443:443/tcp -p 53:53/udp --name "nginx-test" docker.io/nginx
  1. 后台启动容器
docker run -d -P --name "nginx-test" docker.io/nginx

容器退出后自动删除

docker run -it --rm --name nginx-test docker.io/nginx

指定容器 DNS:
Dns 服务,默认采用宿主机的 dns 地址
一是将 dns 地址配置在宿主机
二是将参数配置在 docker 启动脚本里面 –dns=1.1.1.1

docker run -it --rm --dns 223.6.6.6 centos bash   ## --rm 容器退出后删除容器,一次性

ps 列出正在运行的容器

命令格式 docker ps [OPTIONS]

常用选项

-a 显示所有容器(默认显示正在运行)
-f 根据提供的条件过滤输出
-n int 显示最后创建的n个容器(包括所有状态)(默认值-1)
-l 显示最新创建的容器(包括所有状态)
–no-trunc 不截断输出
-q 只显示数字id
-s 显示总文件大小

例:

显示正在运行的容器:

docker ps

显示所有容器

docker ps -a

rm 移除一个或多个容器

命令格式 :
docker rm [OPTIONS] CONTAINER [CONTAINER…]

常用选项

-f 强制移除正在运行的容器(使用SIGKILL)
-l 删除指定链接
-v 删除与容器关联的卷

例:

删除运行中的容器:即使容正在运行当中, 也会被强制删除掉

docker rm -f 11445b3a84d3   # 11445b3a84d3是CONTAINER ID,通过docker ps 查询

批量删除已退出容器

docker rm -f `docker ps -aq -f status=exited`

批量删除所有容器

docker rm -f $(docker ps -a -q)

logs 获取容器的日志

命令格式

docker logs [OPTIONS] CONTAINER

常用选项

–details 显示提供给日志的额外细节
-f 跟踪日志输出
–since string 显示从时间戳开始的日志(如:42m表示42 分钟)
–tail string 从日志末尾显示的行数(默认为“all”)
-t 显示时间戳
–until string 在时间戳前显示日志(如:42m表示42 分钟)

例:

查看 Nginx 容器访问日志

docker logs nginx-test-port3 #一次查看

docker logs -f nginx-test-port3 #持续查看

load 从tar存档或STDIN加载镜像

命令格式
docker load [OPTIONS]

常用选项

-i string 从tar存档文件中读取,而不是从STDIN中读取
-q 不输出

例:

导入镜像

docker load -i nginx.tar.gz

port

列出容器的端口映射或特定映射

命令格式
docker port CONTAINER [PRIVATE_PORT[/PROTO]]

例:
查看容器已经映射的端口

docker port nginx-test

stop 停止一个或多个正在运行的容器

命令格式

docker stop [OPTIONS] CONTAINER [CONTAINER…]

常用选项

-t int 等待stop几秒钟后再杀死它(默认为10)

例:

容器的关闭

docker stop f821d0cd5a99

批量关闭正在运行的容器

docker stop $(docker ps -a -q) 

kill 杀死一个或多个正在运行的容器

命令格式

docker kill [OPTIONS] CONTAINER [CONTAINER…]

常用选项
-s string 发送到容器的信号(默认为“KILL”)
例:

批量强制关闭正在运行的容器
docker kill $(docker ps -a -q)

start 启动一个或多个停止的容器

命令格式

docker start [OPTIONS] CONTAINER [CONTAINER…]

常用选项

-a 附加STDOUT/STDERR和转发信号
–detach-keys string 覆盖用于分离容器的键序列
-i 将容器的STDIN

例:

容器的启动

docker start f821d0cd5a99

attach

此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭

命令格式

docker attach [OPTIONS] CONTAINER

常用选项

–detach-keys string 覆盖用于分离容器的键序列
–no-stdin 不附加STDIN
–sig-proxy 代理所有接收到的进程信号(默认为true)

例:

docker attach 63fbc2d5a3ec

exec

执行单次命令与进入容器,不是很推荐此方式, 虽然 exit 退出容器还在运行

命令格式

docker exec [OPTIONS] CONTAINER COMMAND [ARG…]

常用选项

-d 分离模式:在后台运行命令
–detach-keys string 覆盖用于分离容器的键序列
-e list 设置环境变量
-i 保持STDIN打开,即使没有连接
–privileged 为该命令授予扩展特权
-t 分配一个pseudo-TTY
-u string 用户名或UID(格式:< name| UID >[:<group|gid>])
-w string 容器内的工作目录

例:

进入容器

docker exec -it centos-test /bin/bash

inspect 返回Docker对象的底层信息

命令格式

docker inspect [OPTIONS] NAME|ID …

常用选项

-f string 使用给定的Go模板格式化输出

例:

可以获取到容器的 PID

# docker inspect -f "{{.State.Pid}}" centos-test3
5892 

commit 从容器的更改中创建一个新镜像

命令格式

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

常用选项

-a string 作者
-c list 对创建的映像应用Dockerfile指令
-m string 提交消息
-p 提交期间暂停容器(默认为true)

例:

在宿主机基于容器 ID 提交为镜像

docker commit -a "xu" -m "nginx_yum_v1" --change="EXPOSE_80_443" f5f8c13d0f9f centos-nginx:v1

提交的时候标记 tag 号:

标记 tag 号,生产当中比较常用,后期可以根据 tag 标记创建不同版本的镜像以及创建不同版本的容器。

docker commit -m "nginx image" f5f8c13d0f9f xu/centos-nginx:v1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值