Docker——镜像相关命令

本文介绍了Docker镜像的相关命令,包括获取、查看、搜寻、删除和清理、创建、存出和载入以及上传镜像。通过这些操作,用户可以有效地管理和使用Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

镜像

镜像是Docker三大核心概念中最重要的,Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试从默认镜像仓库下载,用户也可以通过配置,使用自定义的镜像仓库。

1.获取镜像

docker [image] pull NAME[:TAG]
其中NAME是镜像仓库名称,TAG是镜像的标签。如果不显式指定TAG,则默认会选择latest标签。

[root@VM_0_8_centos ~]# docker pull ubuntu:18.04
Trying to pull repository docker.io/library/ubuntu ... 
18.04: Pulling from docker.io/library/ubuntu
5bed26d33875: Pull complete 
f11b29a9c730: Pull complete 
930bda195c84: Pull complete 
78bf9a5ad49e: Pull complete 
Digest: sha256:bec5a2727be7fff3d308193cfde3491f8fba1a2ba392b7546b43a051853a341d
Status: Downloaded newer image for docker.io/ubuntu:18.04

可以看到,镜像文件一般由若干层(layer)组成,比如5bed26d33875是层的唯一id,当多个镜像包括相同的层时,本地仅存储层的一部分,从而可以减少存储空间。
如果从非官方的仓库下载,则需要在仓库名称前面指定完整的仓库地址。例如:
docker pull hub.c.163.com/public/ubuntu:18.04

2.查看镜像信息

2.1 使用images命令列出镜像

[root@VM_0_8_centos ~]# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu                    18.04               4e5021d210f6        2 weeks ago         64.2 MB
docker.io/centos                    7.2.1511            9aec5c5fe4ba        13 months ago       195 MB
docker.io/ansible/centos7-ansible   latest              688353a31fde        3 years ago         447 MB
[root@VM_0_8_centos ~]# 

2.2 使用tag,命令添加镜像标签

[root@VM_0_8_centos ~]# docker tag ubuntu:18.04 myubuntu:18.04
[root@VM_0_8_centos ~]# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu                    18.04               4e5021d210f6        2 weeks ago         64.2 MB
myubuntu                            18.04               4e5021d210f6        2 weeks ago         64.2 MB

实际上指向同一个镜像文件,只是别名不同而已。

2.3 使用inspect命令查看详细信息

[root@VM_0_8_centos ~]# docker inspect ubuntu:18.04
[
    {
        "Id": "sha256:4e5021d210f65ebe915670c7089120120bc0a303b90208592851708c1b8c04bd",
        "RepoTags": [
            "docker.io/ubuntu:18.04",
            "myubuntu:18.04"
        ],
        "RepoDigests": [
            "docker.io/ubuntu@sha256:bec5a2727be7fff3d308193cfde3491f8fba1a2ba392b7546b43a051853a341d"
        ],

3.搜寻镜像

docker search [option] keyword
❑ -f, --filter filter:过滤输出内容;
❑ --format string:格式化输出内容;
❑ --limit int:限制输出结果个数,默认为25个;
❑ --no-trunc:不截断输出结果。

例如,搜索官方提供的带nginx关键字的镜像:

[root@VM_0_8_centos ~]# docker search --filter=is-official=true nginx
INDEX       NAME              DESCRIPTION                STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/nginx   Official build of Nginx.   12946     [OK]

4.删除和清理镜像

4.1 使用标签删除镜像

docker rmi IMAGE [IMAGE...]
❑ -f, -force:强制删除镜像,即使有容器依赖它;
❑ -no-prune:不要清理未带标签的父镜像

例如,删除myubuntu:18:04镜像,可以使用如下命令

[root@VM_0_8_centos ~]# docker rmi myubuntu:18.04
Untagged: myubuntu:18.0

4.2 使用镜像ID来删除镜像
docker rmi [ID]

4.3 清理镜像
使用Docker一段时间后,系统可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。

docker image prune
❑ -a, -all:删除所有无用镜像,不光是临时镜像;
❑ -filter filter:只清理符合给定过滤器的镜像;
❑ -f, -force:强制删除镜像,而不进行提示确认。

5.创建镜像

5.1 基于已有容器创建

docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
❑ -a, --author="":作者信息;
❑ -c, --change=[]:提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;
❑ -m, --message="":提交消息;
❑ -p, --pause=true:提交时暂停容器运行。

下面演示如何使用该命令创建一个新镜像。
首先启动一个镜像,并在其中进行修改操作。

[root@VM_0_8_centos ~]# docker run -it ubuntu:18.04 /bin/bash
root@3ae087767bbd:/# touch test
root@3ae087767bbd:/# exit
exit

记住容器ID为3ae087767bbd
现在这个容器中镜像与Ubuntu:18.04相比,已经发生了一些改变,所以可以使用docker [container] commit命令来提交为一个新的容器。

[root@VM_0_8_centos ~]# docker commit -m "Added a new file" -a "Docker Newbee" 3ae087767bbd test:0.1
sha256:1bdfc9d4d51c501a2a4a27cbe95d995b2ae123cecbe82296133aed094df2d93e

[root@VM_0_8_centos ~]# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
test                                0.1                 1bdfc9d4d51c        13 seconds ago      64.2 MB

5.2 基于本地模板导入
docker [image] import [OPTIONS] file|URL|-[REPOSITORY[:TAG]]

5.3 基于Dockerfile创建
Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。

6.存出和载入镜像

6.1 存出镜像
如果要导出镜像到本地文件,可以使用docker [image] save命令,这个命令支持-o、-output string参数,可以导出镜像到指定的文件中。

[root@VM_0_8_centos ~]# docker save -o ubuntu_18.04.tar ubuntu:18.04
[root@VM_0_8_centos ~]# ll
total 65056
-rw-r--r-- 1 root root        0 Apr  3 10:34 init-config.yaml
-rw-r--r-- 1 root root        0 Apr  3 10:39 init.default.yaml
-rw------- 1 root root 66612224 Apr  8 22:45 ubuntu_18.04.tar

6.2 载入镜像
可以使用docker [image] load将导出的tar文件再导入到本地镜像库中。支持-i、-input string选项,从指定文件中读入镜像内容。
例如从文件ubunt_18.04.tar导入镜像到本地镜像列表:

[root@VM_0_8_centos ~]# docker load -i ubuntu_18.04.tar 
Loaded image: ubuntu:18.04
[root@VM_0_8_centos ~]# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
myubuntu                            18.04               2d6d7f5710f3        About an hour ago   66.6 MB
test                                0.1                 1bdfc9d4d51c        2 hours ago         64.2 MB
ubuntu                              18.04               4e5021d210f6        2 weeks ago         64.2 MB
docker.io/ubuntu                    18.04               4e5021d210f6        2 weeks ago         64.2 MB
docker.io/centos                    7.2.1511            9aec5c5fe4ba        13 months ago       195 MB
docker.io/ansible/centos7-ansible   latest              688353a31fde        3 years ago         447 MB

7.上传镜像

可以使用docker [image] push命令上传镜像到仓库,默认上传到Docker Hub官方仓库。
docker [image] push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
不过需要先进行登录,之后登录信息会记录到本地~/.docker目录下。

### 使用 `docker run` 启动容器镜像 为了启动一个基于特定镜像的新容器,可以使用 `docker run` 命令。此命令不仅能够创建一个新的容器实例,还可以配置多种选项来定制容器的行为和环境设置。 #### 基本语法结构 最简单的形式如下所示: ```bash docker run [OPTIONS] IMAGE [COMMAND] [ARG...] ``` 其中 `[OPTIONS]` 是可选参数列表,用来定义容器的各种属性;`IMAGE` 表示要使用的镜像名称或者ID;而 `[COMMAND]` 和其后的 `[ARG...]` 则是用来覆盖默认入口点指令及其参数[^1]。 #### 关键选项解释 - `-d`: 让容器以后台模式运行,在这种情况下需要确保至少存在一个前台进程保持活跃状态以防止容器立即终止[^2]。 - `-p hostPort:containerPort`: 将主机端口映射到容器内部的服务监听端口上,例如将宿主机的80端口转发给Nginx服务器所在的容器内的相同编号端口[^5]。 - `-v hostPath:containerPath`: 实现文件系统的共享挂载功能,允许访问位于宿主机上的目录作为容器中的路径。 #### 示例演示 下面给出几个具体的例子来展示不同场景下的应用方式: ##### 运行带有交互终端的Ubuntu系统并进入Bash Shell ```bash docker run -it ubuntu /bin/bash ``` 这里通过指定 `-it` 参数组合实现了TTY分配以及标准输入打开的功能,从而让用户可以直接与新启动的Ubuntu容器互动执行命令[^4]。 ##### 部署Web服务并将页面公开至外部网络 ```bash docker run -d -p 80:80 nginx:latest ``` 这条语句指示Docker守护程序拉取最新的官方Nginx镜像版本,并以前台进程的形式持续提供HTTP请求处理能力,同时把容器里的第80号TCP通道暴露出来供外界连接访问。 #### 获取更多详情信息 如果想要进一步了解某个正在运行中的容器的具体情况,则可以通过另一个工具——`docker inspect` 来获取详细的元数据描述。通常做法是先利用 `docker ps -a` 查找目标对象的身份标识符(即Container ID),再调用上述提到的方法完成深入探究工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值