Docker 镜像(image)& 容器(container)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 什么是 Docker 镜像(image)? 镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象; 镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包; 镜像可以运行一个或多个容器,同时镜像也可以停止某个容器的运行,并从中创建新的镜像;【镜像(iamge)的分类】...

什么是 Docker 镜像(image)?

  • 镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象;
  • 镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包;
  • 镜像可以运行一个或多个容器,同时镜像也可以停止某个容器的运行,并从中创建新的镜像;

镜像(iamge)的分类

image.png

镜像(image)常用命令

# 下载镜像(默认从远程公有镜像仓库服务Docker Hub中下载);
docker image pull 

# 从Docker Hub的 apline 仓库中拉取【标签/版本】为latest的镜像;
docker image pull alpine:latest

# 从Docker Hub的 nginx 仓库中拉取【标签/版本】为latest的镜像;
docker image pull nginx:latest

# 拉取仓库中的全部镜像,参数 -a 所有all;
docker image pull -a nginx/xxx

# 列出本机Docker主机上存储的镜像(不显示标注内容),参数-a 所有all;
docker image ls -a 或者 docker images -a

# 查看 nginx 镜像安装信息;
docker image history nginx

# 查看 ubuntu 镜像分层信息,展示镜像所有细节(包含镜像层数据和元数据);
docker image inspect ubuntu:latest

# 删除 ubuntu:latest 镜像;
docker image rm ubuntu:latest

# 构建一个全新的镜像;
docker image build

查看镜像管理(command)命令配置参数

# 显示 image 对应管理命令的配置参数
docker image [具体命令名称] --help

参数过滤 --filter

# 返回悬虚(dangling/没有标签的镜像被称为悬虚镜像,在列表中展示为<none>:<none>)镜像;
docker image ls --filter dangling=true

# 移除全部的悬虚镜像,如果添加了-a 参数,Docker 会额外移除没有被使用的镜像(那些没有被任何容器使用的镜像);
docker image prune

Docker 目前支持如下的过滤器:

  • dangling:可以指定 true 或者 false,仅返回悬虚镜像(true),或者非悬虚镜像(false)。
  • before:需要镜像名称或者 ID 作为参数,返回在之前被创建的全部镜像。
  • since:与 before 类似,不过返回的是指定镜像之后创建的全部镜像。
  • label:根据标注(label)的名称或者值,对镜像进行过滤。

Docker image 命令应用示例

# reference 完成过滤并且仅显示标签为 latest 的示例;
docker image ls --filter=reference="*:latest" 

# 参数 --format 通过 Go 模板对输出内容进行格式化,只返回 Docker 主机上镜像的大小属性;
docker image ls --format "{{.Size}}"

# 返回全部镜像,但是只显示仓库、标签和大小信息;
docker image ls --format "{{.Repository}}: {{.Tag}}: {{.Size}}"

=》返回官方[official]或非官方[automated]镜像

# 简单模式,搜索所有“NAME=nginx”字段中包含特定字符串的仓库;
docker search nginx 

# 返回 nginx 的内容只显示官方镜像;
docker search nginx --filters "is-official=true" 

# 返回 nginx 的内容只显示非官方镜像;
docker search nginx --filters "is-automated=true" 

# 说明:`docker search` 默认情况下,`Docker` 只返回 `25` 行结果 ,
# 可以通过参数 `--limit` 增加返回内容的行数,最多 `100` 行;
例如:docker search nginx --limit 60

Docker 文件操作

# 编辑index.html文件信息,vim 可能需要安装,Linux默认 vi;
vi/vim index.html 

# 复制拷贝index.html文件到docker容器里面,后跟容器ID:存放路径;
docker cp index.html 41c15dlacff0://usr/share/nginx/html 

# 删除镜像文件,后面可以是镜像名称或者镜像ID;
docker rm nginx 

# 参数 -f 强行删除,且无提示;
docker rm -f xxx 

# 删除文件夹及其子文件夹中的的所有文件,参数 -r 向下递归删除;
docker rm -rf xxx 

# 移动或重命名;
docker mv 

# 移动Dockerfile到 ../chait/下面;
docker mv Dockerfile ../chait/ 

# 重命名为docfile;
docker mv Dockerfile docfile 

# 提交文件,参数 -m 文件名称,后跟原来镜像ID,新的镜像名称;
docker commit -m 'xxx' 41c15dlacff0 newimagename 

Linux 常用基础命令

Linux 文件操作

# 查看该路径下面的所有文件;
ls 

# 新增文件夹;
mkdir xxx 

# 编辑文件;
vi / vim xxx

# 删除文件,参数-f 强制删除;
rm -f xxx 

# 删除目录及所有子目录和文件,参数 -r 向下递归, -f 强制删除;
rm -rf xxx 

# 查看文件内容;
cat xxx 

# 退出并保存编辑内容;
:wq 

# 安装 lrzsz 文件上传工具;
sudo apt install lrzsz 

# 文件上传,基于 lrzsz;
rz 

查看端口号

# 切换 root 用户;
su root 

# 输出端口信息;
lsof -i:port

# 查看所有开启的端口号;
netstat -aptn 

# 查看所有使用 udp 协议的端口号;
netstat -nupl 

# 查看所有使用 tcp 协议的端口号;
netstat -ntpl

Linux 重启命令

# 重新启动
reboot [-n] [-w] [-d] [-f] [-i]

# 参数说明:
-n : 在重开机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
-d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
-f : 强迫重开机,不呼叫 shutdown 这个指令
-i : 在重开机之前先把所有网络相关的装置先停止

除了上面的 reboot 命令,我们还可以使用 shutdown 命令

# 立刻重启
shutdown -r now

# 过10分钟自动重启 
shutdown -r 10

# 在时间为20:35时候重启 
shutdown -r 20:35 
说明:如果是通过 shutdown 命令设置重启的话,可以用 shutdown -c 命令取消重启;

Linux 关机命令

# 立刻关机(一般加 -p 关闭电源)
halt [-n] [-w] [-d] [-f] [-i] [-p]
# 参数说明:
-n : 在重开机前不做将记忆体资料写回硬盘的动作
-w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
-d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
-f : 强迫重开机,不呼叫 shutdown 这个指令
-i : 在重开机之前先把所有网络相关的装置先停止

# 立刻关机 
poweroff 

# 立刻关机
shutdown -h now 

# 10分钟后自动关机 
shutdown -h 10 
说明:如果是通过 shutdown 命令设置关机的话,可以用 shutdown -c 命令取消关机;

删除资源,快速清理(暴力)

# 删除所有docker主机上面的image镜像, 参数 `-f` 强制删除
rm $(docker image ls -a)  -f 

# 删除所有 `docker` 主机上面的 `container` (容器 id 删除)
docker container rm $(docker container ls -aq) 

(推荐)优雅方式:stoprm =》先暂停,在删除;

重启 doker 服务

# 启动 docker 服务;
systemctl start docker 

# 重启守护进程 daemon;
sudo systemctl daemon-reload 

# 重启 docker 服务;
systemctl restart docker

# 重启 docker 服务; 
sudo service docker restart 

# 关闭 docker 服务;
service docker stop 

# 关闭 docker 服务;
systemctl stop docker 

镜像(image)的命令集合

# 查看 image 所有管理命令
docker image --help 

image.png

什么是 Docker 容器(container)?

容器(container)是镜像(image)的运行实例,一个镜像可以创建多个容器(1:n);

image.png

1、容器 & 虚拟机(VM)的区别?

容器启动更快并且更轻量级,与虚拟机运行在完整的操作系统之上相比,容器会共享其所在主机的操作系统/内核。

2、镜像 & 容器的区别?

  • 状态不同,镜像是构建时(build-time)结构,容器是运行时(run-time)结构;
  • 镜像只读不可写入,容器即可读取也可写入;

image.png

3、镜像 & 容器的关系?

  • 一个镜像可以构建多个容器,1:n 一对多关系;
  • 容器的设计初衷就是快速和小巧,所以镜像通常都比较小。
  • 容器的创建依赖镜像基础;
docker container run 
docker service create

从某个镜像启动一个或多个容器。一旦容器从镜像启动后,二者之间就变成了互相依赖的关系,并且在镜像上启动的容器全部停止之前,镜像是无法被删除的。尝试删除镜像而不停止或销毁使用它的容器,会导致出错;

关于镜像的说明

1、镜像通常比较小

【容器(container)目的】就是运行应用或者服务,这意味着容器的镜像中必须包含应用/服务运行所必需的操作系统和应用文件。

但是,容器又追求快速和小巧,这意味着构建镜像的时候通常需要裁剪掉不必要的部分,保持较小的体积。

例如:Docker 镜像通常不会包含 6 个不同的 Shell 让读者选择,通常情况 Docker 镜像中只有一个精简的 Shell,甚至没有 Shell

2、镜像中还不包含内核

容器都是共享所在 Docker 主机的内核。所以有时会说容器仅包含必要的操作系统(通常只有操作系统文件和文件系统对象)。

提示: Hyper-V 容器运行在专用的轻量级 VM 上,同时利用 VM 内部的操作系统内核。

Docker 官方镜像 Alpine Linux 大约只有 4MB,可以说是 Docker 镜像小巧这一特点的比较典型的例子。

但是,镜像更常见的状态是如 Ubuntu 官方的 Docker 镜像一般,大约有 110MB。这些镜像中都已裁剪掉大部分的无用内容。

3、Windows 镜像要比 Linux 镜像大一些(这与 Windows OS 工作原理相关)

比如:

  • 未压缩的最新 Microsoft .NET 镜像(microsoft/dotnet:latest)超过 1.7GB
  • Windows Server 2016 Nano Server 镜像(microsoft/nanoserver:latest)在拉取并解压后,其体积略大于 1GB

容器(container)常用命令

# 指定了启动所需的镜像以及要运行的应用;
docker container run <image> <app>

# 启动 ubuntu 容器,并运行 Bash Shell 作为其应用;
docker container run -it ubuntu /bin/bash

# 启动 nanoserver 容器,并运行 PowerShell 作为其应用; 
docker container run -it microsoft- /powershell:nanoserver pwsh.exe

# 命令会在前台启动一个 Ubuntu 容器,并运行 Bash Shell; 
docker container run -it ubuntu /bin/bash 

【Ctrl+PQ】会断开 Shell 和容器终端之间的链接,并在退出后保持容器在后台处于运行(UP)状态。

参数 -it 可以将当前终端连接到容器的 Shell 终端之上。

容器随着其中运行应用的退出而终止,其中 Linux 容器会在 Bash Shell 退出后终止,而 Windows 容器会在 PowerShell 进程终止后退出。验证方法就是启动新的容器,并运行 sleep 命令休眠 10s,容器会启动,然后运行休眠命令,在 10s 后退出,执行如下命令:

docker container run alpine:latest sleep 10

docker container 其他命令

# 列出所有在运行(UP)状态的容器。如果使用 -a 标记,还可以看到处于停止(Exited)状态的容器。
docker container ls 

# 命令会在容器内部启动一个 Bash Shell 进程,并连接到该 Shell(用于创建容器的镜像必须包含 Bash Shell,该命令在将 Docker 主机 Shell 连接到一个运行中容器终端时非常有用);
docker container exec -it <container-name or container-id> bash 
 
# 停止运行中的容器,并将状态置为 Exited(10s 停止);
docker container stop <container-name or container-id>
 
# 重启 Exited 状态的容器;
docker container start <container-name or container-id>
 
# 删除停止运行的容器;
docker container stop <container-name or container-id>

# 显示容器的分层配置细节和运行时信息; 
docker container inspect <container-name or container-id> 

容器(container)命令集

# 查看容器所有管理命令
docker container --help 

image.png

检查 Docker daemon(守护进程)

docker version

image.png

如果 server 部分中包含了错误码,表示 Docker daemon 很可能没有运行,或者当前用户无权限访问;

解决 Linux 中无权限访问

  1. 确认当前用户是否属于本地 Docker UNIX 组,如果不是,通过【usermod -aG docker <user>】添加,退出重新登录 Shell,修改生效;
  2. 用户属于 docker 用户组,可能是 Docker daemon 没有运行导致,根据 Docker 主机的操作系统选择如下对应的命令检查 daemon 状态;
//使用 Systemd 在 Linux 系统中执行该命令
$ service docker status
docker start/running, process 29393
 
//使用 Systemd 在Linux 系统中执行该命令
$ systemctl is-active docker
active
 
//在Windows Server 2016的 PowerShell 窗口中运行该命令
> Get-Service docker
 
Status Name DisplayName
------ ---- -----------
Running Docker docker

Docker 命令集

# 查看 docker 中所有管理命令;
docker --help
# 查看 docker 信息;
docker --info 

image.png

管理命令 Management Commands

image.png

image.png

目录
相关文章
|
6天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
2天前
|
关系型数据库 MySQL API
|
19天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
47 5
|
3天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
5天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
29 1
|
13天前
|
存储 缓存 Docker
docker中挂载数据卷到容器
【10月更文挑战第16天】
19 2
|
14天前
|
存储 关系型数据库 MySQL
|
15天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第13天】
20 2
|
16天前
|
运维 监控 数据可视化
Docker容器可视化管理工具 - WGCLOUD基础介绍
WGCLOUD是新一代运维监测平台,它可以监控Docker容器的各种性能数据,比如内存,cpu,Image,运行时间,运行状态,端口映射等信息
|
17天前
|
存储 数据库 Docker
正确删除容器和镜像的方式
【10月更文挑战第24天】本文介绍了在Docker中如何正确删除容器和镜像,包括停止容器、删除已停止容器、删除未被使用的镜像以及注意事项,如数据备份、依赖关系检查和权限问题。其他容器管理工具的操作类似,但命令和语法可能不同。

热门文章

最新文章