容器的仓库与镜像管理及其相关shell指令

目录

引言

镜像仓库

docker login

docker pull

docker push

docker search

docker logout

镜像

镜像常见命令(后面有详解)

部分容器命令

Docker 镜像详解

更多的镜像指令


引言

容器技术,如 Docker,已经成为现代软件开发和部署中不可或缺的一部分。容器化应用程序使得开发者能够在任何环境中一致地运行他们的应用,无论是本地开发环境、测试环境还是生产环境。为了有效地使用容器,我们需要理解容器镜像和仓库的概念,以及如何使用相关的 shell 命令来管理它们,本文将主要介绍这部分知识。

镜像仓库

什么是镜像仓库呢?顾名思义就是存放镜像的仓库。这是常见的关于“仓库”相关的shell指令。

命令
功能
docker login
登录仓库
docker pull
拉取镜像
docker push
推送镜像
docker search
查找镜像
docker logout
登出仓库

下面介绍各个函数的语法

docker login

登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub(需要科学上网才能登陆)。
Shell
docker login [OPTIONS] [SERVER]
关键参数
-u : 登陆的用户名
-p : 登陆的密码

docker pull

功能
从镜像仓库中拉取或者更新指定镜像
Shell
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
容器的仓库与镜像管理及其相关shell指令_第1张图片
关键参数
-a : 拉取所有 tagged 镜像
--disable-content-trust : 忽略镜像的校验 , 默认开启
一般采用的是name:tag形式,这样通俗易懂。

docker push

功能

将本地的镜像上传到镜像仓库 , 要先登陆到镜像仓库
Shell
docker push [OPTIONS] NAME[:TAG]
样例
Shell
docker push myapache:v1

docker search

功能
Docker Hub 查找镜像,因 docker 网站被封,该命令暂时国内无法实操,需要国外网络联系。
但是我们一般不会在shell中直接去search镜像,因为可以直接在docker hub中通过name:tag的方式更加精确地查找到镜像的信息。

docker logout

功能
登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
Shell
docker logout

镜像

很多初学者对于镜像与容器并不能很好的区分,下面用一个例子讲解。

镜像是一个静态的文件,包含了创建容器所需的所有信息。它是一个只读的模板,用于创建容器。你可以把镜像想象成是一个应用程序的“安装包”,里面包含了运行这个应用程序所需的所有依赖项、配置文件、库等。

想象一下,你想要烤一个蛋糕。为了烤蛋糕,你需要一个食谱,这个食谱详细说明了你需要哪些材料(面粉、糖、鸡蛋等),以及如何混合和烘烤它们。在这个例子中,食谱就像是镜像。它包含了烤蛋糕所需的所有信息,但本身并不能烤出蛋糕。

容器是一个镜像的运行实例。它是动态的,可以启动、停止、暂停和删除。容器是基于镜像创建的,并在镜像的基础上运行应用程序。你可以把容器想象成是一个正在运行的蛋糕,它是根据食谱(镜像)烤出来的。

继续上面的例子,当你根据食谱(镜像)将所有材料混合在一起,并放入烤箱烘烤后,你得到了一个实实在在的蛋糕。这个烤好的蛋糕就是容器。你可以吃它(运行)、分享它(交互)、或者把它放回冰箱(停止)。

镜像是静态的,只读的,用于创建容器的模板。就像是一个食谱。

容器是动态的,可运行的,是基于镜像创建的实例。就像是一个烤好的蛋糕。

镜像常见命令(后面有详解)

1. docker images

功能
列出本地镜像。
语法
Shell
docker images [OPTIONS] [REPOSITORY[:TAG]]
关键参数
-a : 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests : 显示镜像的摘要信息;
-f : 显示满足条件的镜像;
--format : 指定返回值的模板文件;
--no-trunc : 显示完整的镜像信息;
-q : 只显示镜像 ID

 

Shell
# 列出本地全部镜像
docker images
# 列出本地镜像中 REPOSITORY ubuntu 的镜像列表。
docker images ubuntu
2. docker image inspect
功能
查看镜像详细信息
语法
Shell
docker image inspect [OPTIONS] IMAGE [IMAGE...]
Shell
# 查看镜像详细信息
docker images inspect nginx:1.23.3
3. docker tag
功能
标记本地镜像,将其归入某一仓库。我们推送镜像的时候,一般都需要tag一下。
语法
Shell
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
样例        
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04

部分容器命令

1. docker run
功能
创建一个新的容器并运行一个命令
语法
Shell
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
关键参数
-d: 后台运行容器,并返回容器 ID
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口 随机 映射到主机的端口
-p: 指定端口映射,格式为: 主机 ( 宿主 ) 端口 : 容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的 hostname
-e username="ritchie": 设置环境变量;
--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2": 绑定容器到指定 CPU 运行;
-m : 设置容器使用内存最大值;
--network="bridge": 指定容器的网络连接类型;
--link=[]: 添加链接到另一个容器;
--volume , -v: 绑定一个卷
--rm :shell 退出的时候自动删除容器
样例
Shell
# 使用 docker 镜像 nginx:latest 以后台模式启动一个容器 ,并将容器命名为 mynginx
docker run --name mynginx -d nginx:latest
# 使用镜像 nginx:latest ,以后台模式启动一个容器 , 将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
docker ps
功能
列出容器
语法
Shell
docker ps [OPTIONS]
关键参数
-a : 显示所有的容器,包括未运行的。
-f : 根据条件过滤显示的内容。
--format : 指定返回值的模板文件。如 json 或者 table
-l : 显示 latest 的容器。
-n : 列出最近创建的 n 个容器。
--no-trunc : 不截断输出。
-q : 静默模式,只显示容器编号。
-s : 显示总的文件大小。

Docker 镜像详解

Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、 源码、库文件、依赖、工具等一些运行 application 所必须的文件。
我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器。
image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。
每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读( readonly )、读写( readwrite )和写出( whiteout-able ),但是 docker镜像中每一层文件系统都是只读的。
构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
为什么需要镜像?
在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操作,非常费劲。
然而, Docker 镜像就是为了解决这个小小的 打包 功能,突然一夜之间成名。那么,你可能说d ocker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。
docker 最大的贡献就是定义了容器镜像的分层的存储格式 docker 镜像技术的基础是联合文件系统 (UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。
docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开 共享
了解了这些知识之后,我们对镜像就有可能更深入的认知,下面介绍更多的镜像指令。

更多的镜像指令

docker rmi
删除本地镜像
docker build
通过 dockerfile 制作镜像
docker save
将指定镜像保存成 tar 归档文件
docker load
导入使用docker save 命令导出的镜像
docker image inspect
查看镜像详细信息
docker history
查看镜像历史
docker import
从归档文件 docker export 中创建镜像。
docker image prune
删除不使用的镜像
6. docker rmi
功能
删除镜像。
语法
Shell
docker rmi [OPTIONS] IMAGE [IMAGE...]
关键参数
-f : 强制删除;
--no-prune : 不移除该镜像的过程镜像,默认移除;
7. docker save
功能
将一个或多个 Docker 镜像打包成一个 tar 归档文件。这个归档文件包含了镜像的所有层和相关的元数据,可以用于备份、传输或者在其他的 Docker 环境中导入镜像。
语法
Shell
docker save [OPTIONS] IMAGE [IMAGE...]
Shell
root@139-159-150-152:/data/myworkdir# docker save -o 
mynginx_1.22.1.tar nginx:1.22.1
root@139-159-150-152:/data/myworkdir# ll
total 142756
drwxr-xr-x 2 root root 4096 Mar 13 15:05 ./
drwx--x--x 5 root root 4096 Mar 13 15:03 ../
-rw------- 1 root root 146172416 Mar 13 15:05 mynginx_1.22.1.tar
8. docker load
功能
导入使用 docker save 命令导出的镜像。
语法
Shell
docker load [OPTIONS]
Shell
root@139-159-150-152:/data/myworkdir# docker load -i
mynginx_1.22.1.tar
Loaded image: nginx:1.22.1
9. docker image inspect
功能
查看镜像详细信息
语法
Shell
docker image inspect [OPTIONS] IMAGE [IMAGE...]
注意事项:
docker inspect 会自动检查是镜像还是容器然后显示相关信息
Shell
# 查看镜像详细信息
docker images inspect nginx:1.23.3
10. docker history
功能
显示镜像历史,Docker history 可以查看分层。
语法
Shell
docker history [OPTIONS] IMAGE
关键参数
-H , --human : 大小和日期采用人容易读的格式展现
--no-trunc : 显示全部信息,不要隔断;
-q, --quiet: 只显示镜像 id 信息;
11. docker import
功能
从归档文件中创建镜像。
语法
Shell
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
关键参数
-c : 应用 docker 指令创建镜像;
-m : 提交时的说明文字;
样例
Shell
docker import my_ubuntu_v3.tar maxhou/ubuntu:v4
12. docker image prune
功能
删除不使用的镜像。
语法
Shell
docker image prune [OPTIONS]
关键参数
-a , --all : 删除全部不使用的镜像;
--filter filter: 指定过滤条件;
-f, --force : 不提示是否删除;
Shell
docker image prune
13. docker build
功能
docker build 命令用于使用 Dockerfile 创建镜像(这部分知识笔者会在后续的镜像创建文章中专门介绍)。
语法
Shell
docker build [OPTIONS] PATH | URL | -
关键参数
--build-arg=[] : 设置镜像创建时的变量;
-f : 指定要使用的 Dockerfile 路径;
--label=[] : 设置镜像使用的元数据;
--no-cache : 创建镜像的过程不使用缓存;
--pull : 尝试去更新镜像的新版本;
--quiet, -q : 安静模式,成功后只输出镜像 ID
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构
建中为一个镜像设置多个标签。
--network: 默认 default 。在构建期间设置 RUN 指令的网络模式
样例
Shell
docker build -t mynginx:v1 .

你可能感兴趣的:(docker,docker,linux)