docker基础

docker基础

储备知识

(什么是docker)docker背景:

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上 进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现 轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植 的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不 会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

一、为什么要使用docker

1、docker容器虚拟化的好处

在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制; 同时必须满足“任何时间任何地点”可获取可使用的特点。因此,开发者们需要一种新型的创建分布式应用程序 的方式,快速分发部署,而这正是 Docker 所能够提供的最大优势。Docker 提供了一种更为聪明的方式,通过 **容器来打包应用、解耦应用和运行平台。**这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了, 无论新旧服务器是否是同一类别的平台。这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风险。
简而言之,docker就是为了解决异构环境下的应用部署问题
异构环境指:多台服务器之间的运行环境不同

2、 Docker 在开发和运维中的优势

对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让应用正常运行,而 Docker恰恰可以实现这一终极目标。具体来说,在开发和运维过程中,Docker 具有以下几 个方面的优势:
1、更快的交付和部署:使用 Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。
2、更高效的利用资源运行 Docker容器不需要额外的虚拟化管理程序的支持,Docker 是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker 的性能要提高 1 ~ 2 个数量级
3、更轻松的迁移和扩展:Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间轻松的迁移应用。
4、更轻松的管理和更新:使用 Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。

3、 Docker 与虚拟机的比较

作为一种轻量级的虚拟化方式,Docker 在运行应用上跟传统的虚拟机的方式相比具有如下显著优势:
1、 Docker 容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
2、 Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器。
3、 Docker 通过类似 git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
4、 Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程。

特性容器虚拟机
启动速度秒级分钟级
性能接近原生较好
内存MB级GB级
硬盘适应MB级GB级
运行密度单台主机支持上千个单台主机支持几个
隔离性安全隔离(进程级隔离)完全隔离 (系统级的隔离)
迁移优秀一般

docker 是进程级别的隔离

二、 Docker 与虚拟化

Docker 以及其他容器技术,都属于操作系统虚拟化范畴,操作系统虚拟化最大的特点就是不需要额外的 supervisor 支持。Docker 虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。
在这里插入图片描述
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker 容器时在 操作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

三、 Docker 概念和使用

Docker 中有三个核心概念:镜像、容器和仓库。因此,准确把握这三大概念对于掌握 Docker 技术尤为重 要。

  1. 镜像(Image) Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完 整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  2. 容器(Container) 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  3. 仓库(Repository) 用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时, 可 以在仓库中下载下来。
1、 Docker安装

Docker 引擎是使用 Docker 容器的核心组件,可以在主流的操作系统和云平台上使用,包括 Linux 操作系统、 MacOSS 和 Windows 系统上。用户可以访问 Docker 官网(https://www.docker.com/get-started)去获取 Docker 安装包。
在这里插入图片描述

注意:windows中的docker与虚拟机是冲突的,所以Windows中的docker与虚拟机中的docker无法共存

在 CentOS 系统上安装 Docker Docker

目前支持 CentOS 7 及以后版本。系统的要求跟 Ubuntu 情况类似,64 位操作系统,内核至少是 3.10 以上。

更换系统 yum 源

# 查看系统内核版本 
[root@alvin-test-os ~]# uname -a 
Linux alvin-test-os 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 
# 备份原来 YUN 源 
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 
# 更换 YUM 源 
[root@backup ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 刷新 yum 源缓存 
yum makecache

** 首先,为了方便我们需要更新一下系统:**
[root@localhost ~]# yum update -y --exclud=kernel*
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile

  • base: mirrors.aliyun.com * extras: mirrors.aliyun.com
    • updates: mirrors.aliyun.com
      ** 安装所需的基础软件**
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

** 安装 yum 源**

[root@localhost ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo 

** 更新并安装 Docker-CE**

[root@localhost ~]# yum makecache fast 

元数据缓存已建立 
[root@localhost ~]#  yum -y install docker-ce 

#补充为centos加上阿里云镜像加速器
加速器路径:打开阿里云官网  产品  --> 容器与中间件  -->  容器与镜像服务ACR --> 管理控制台 --> 镜像加速器 --> CentOS
```bash
2. 配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://7e0f2ki2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
**1.1.5、 启动并设置开机自启动**
```bash
[root@localhost ~]# systemctl enable --now docker

** 测试启动**

[root@localhost ~]# docker info
Client: 
Debug Mode: false 
Server: 
Containers: 1 
Running: 1 
Paused: 0 
Stopped: 0 
Images: 1 
Server Version: 19.03.13 
Storage Driver: overlay2 
Backing Filesystem: xfs 
Supports d_type: true 
Native Overlay Diff: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog 
Swarm: inactive Runtimes: runc 
Default Runtime: runc 
Init Binary: docker-init 
containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175 
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd 
init version: fec3683 Security Options: 
seccomp 
Profile: default 
Kernel Version: 3.10.0-1127.el7.x86_64 
Operating System: CentOS Linux 7 (Core) 
OSType: linux 
Architecture: x86_64 
CPUs: 8 Total Memory: 15.67GiB 
Name: alvin-test-os 
ID: HR6P:IIZP:6CKH:N2L5:IQ2T:AJFP:CCAT:S2ZG:MWC4:DZBQ:XUZM:UKLC 
Docker Root Dir: /var/lib/docker
Debug Mode: false 
Registry: https://index.docker.io/v1/ 
Labels: 
Experimental: false 
Insecure Registries: 127.0.0.0/8 
Live Restore Enabled: false
在 Ubuntu 环境上安装 Docker

Ubuntu 操作系统对 Docker 的支持十分成熟,可以支持包括 x86_64、armhf 等系统架构,只要是 64 位即 可。Docker目前支持最低Ubuntu版本为14.04LTS,但实际上从稳定性上考虑,推荐使用16.04LTS 或18.04LTS 版本,并且系统内核越新越好,以支持 Docker 最新的特性。
1.2.1、 查看版本信息

# 第一种方式 root@alvin-test-os:~# uname -a 
Linux alvin-test-os 4.15.0-117-generic #118-Ubuntu SMP Fri Sep 4 20:02:41 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 
# 第二种方式 
root@alvin-test-os:~# cat /proc/version 
Linux version 4.15.0-117-generic (buildd@lcy01-amd64-008) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #118-Ubuntu SMP Fri Sep 4 20:02:41 UTC 2020

更新系统

root@alvin-test-os:~# apt-get update 
Get:1 http://mirrors.cloud.aliyuncs.com/ubuntu bionic InRelease [242 kB] 
Get:2 http://mirrors.cloud.aliyuncs.com/ubuntu bionic-updates InRelease [88.7 kB] 
Get:3 http://mirrors.cloud.aliyuncs.com/ubuntu bionic-security InRelease [88.7 kB] 
Get:4 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/universe Sources [9,051 kB] 
Get:5 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/main Sources [829 kB] 
Get:6 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/main amd64 Packages [1,019 kB] Get:7 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/main i386 Packages [1,007 kB] 
Get:8 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/main Translation-en [516 kB]
Get:9 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/universe amd64 Packages [8,570 kB] Get:10 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/universe i386 Packages [8,531 kB] Get:11 http://mirrors.cloud.aliyuncs.com/ubuntu bionic/universe Translation-en [4,941 kB] Get:12 http://mirrors.cloud.aliyuncs.com/ubuntu bionic-updates/main Sources [497 kB] ... 此处略去许多行

安装基础软件

root@alvin-test-os:~# apt-get -y install apt-transport-https ca-certificates curl software-properties-common 
Reading package lists... Done 
Building dependency tree Reading state information... Done 
curl is already the newest version (7.58.0-2ubuntu3.10). 
The following additional packages will be installed: 
python3-software-properties unattended-upgrades 
Suggested packages: 
。。。此处略去很多行

** 安装 GPG 证书**

root@alvin-test-os:~# curl -fsSL 
https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 
OK

写入软件源信息

root@alvin-test-os:~# sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" Hit:1 http://mirrors.cloud.aliyuncs.com/ubuntu bionic InRelease Hit:2 http://mirrors.cloud.aliyuncs.com/ubuntu bionic-updates InRelease Hit:3 http://mirrors.cloud.aliyuncs.com/ubuntu bionic-security InRelease
Get:4 https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic InRelease [64.4 kB] 
Get:5 https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 
Packages [13.0 kB] 
Fetched 77.4 kB in 0s (307 kB/s) 
Reading package lists... Done

** 更新并安装 Docker-CE**

root@alvin-test-os:~# sudo apt-get -y update 
Hit:1 http://mirrors.cloud.aliyuncs.com/ubuntu bionic InRelease 
Hit:2 http://mirrors.cloud.aliyuncs.com/ubuntu bionic-updates InRelease 
Hit:3 http://mirrors.cloud.aliyuncs.com/ubuntu bionic-security InRelease 
Hit:4 https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic InRelease 
Reading package lists... Done 
root@alvin-test-os:~# sudo apt-get -y install docker-ce 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
The following additional packages will be installed: 
aufs-tools cgroupfs-mount containerd.io docker-ce-cli git git-man libcurl3-gnutls liberror-perl pigz
 Suggested packages: 
 git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn 
 The following NEW packages will be installed: 
 aufs-tools cgroupfs-mount containerd.io docker-ce docker-ce-cli git git-man libcurl3-gnutls liberror-perl pigz 
 0 upgraded, 10 newly installed, 0 to remove and 86 not upgraded.

** 启动并检验**

root@alvin-test-os:~# docker version 
Client: Docker Engine - Community Version: 19.03.13
 API version: 1.40 
 Go version: go1.13.15 
 Git commit: 4484c46d9d 
 Built: Wed Sep 16 17:02:36 2020 
 OS/Arch: linux/amd64
Experimental: false 
Server: Docker Engine - Community 
Engine: 
Version: 19.03.13 
API version: 1.40 (minimum version 1.12) 
Go version: go1.13.15 Git commit: 4484c46d9d 
Built: Wed Sep 16 17:01:06 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.3.7 GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175 
runc: 
Version: 1.0.0-rc10 
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd 
docker-init: 
Version: 0.18.0

** 第一个 Docker 实例**

root@alvin-test-os:~# docker run -d --rm --name nginx -p 80:80 nginx 
Unable to find image 'nginx:latest' locally 
latest: Pulling from library/nginx 
bb79b6b2107f: Pull complete 
5a9f1c0027a7: Downloading [==============> ] 7.457MB/26.49MB 
5a9f1c0027a7: Downloading [======================> ] 12.17MB/26.49MB 166a2418f7e8: Download complete 
1966ea362d23: Download complete
2、 使用 Docker 镜像

docker 镜像是 docker 中三大概念之一,其主要作用是作为启动容器的模板。
** 获取镜像**
镜像是运行容器的模板,官方 Docker Hub 仓库已经提供了许多镜像共开发者使用。如果我们需要获取某 个镜像则可以去 docker 仓库下载所需的镜像。
下载镜像的格式:docker pull [仓库的 URL]/[名称空间]/[仓库的名称]:[版本号]
下载镜像实例:

[root@alvin-test-os ~]# docker pull nginx:1.17 
1.17: Pulling from library/nginx 
afb6ec6fdc1c: Pull complete 
b90c53a0b692: Pull complete 
11fa52a0fdc0: Pull complete 
Digest: sha256:6fff55753e3b34e36e24e37039ee9eae1fe38a6420d8ae16ef37c92d1eb26699 Status: Downloaded newer image for nginx:1.17 
docker.io/library/nginx:1.17

下载的时候,我们可以看到有若干层组成,像 afb6ec6fdc1c 这样的字符串是层的唯一 ID(实际上,完整的 ID 包括 256 比特, 64 个十六进制字符组成)。使用 docker pull 命令下载中会获取并输出镜像的各层信息。当不 同的镜像包括相同的层的时候,本地仅存一份内容,减小存储空间。

登录镜像仓库
#格式
docker login 镜像仓库url
注: 默认情况下,docker login登录的是官方仓库,如果登录其他镜像仓库则需要指定镜像仓库的URL连接。

# 实例(登录自己的镜像仓库,默认为docker的镜像仓库)
	[root@Centos7 ~]# docker login --username=small信仰 registry.cn-shanghai.aliyuncs.com
        Password: 
        WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
        Configure a credential helper to remove this warning. See
        https://docs.docker.com/engine/reference/commandline/login/#credentials-store

        Login Succeeded
	[root@Centos7 ~]# cat ~/.docker/config.json 
    {
        "auths": {
            "registry.cn-hangzhou.aliyuncs.com": {
                "auth": "eWFuZ3lhbmcwOTEwMjI6Y2hlbjE4NzkwMDcwODMw"
            }
        }
    }
# 参数
--username|-u : 指定用户名
--password|-p : 指定密码

** 查看镜像信息**
镜像主要包括镜像文件、镜像 tag 以及镜像详细信息等等。
** 镜像列表**

使用 docker images 或 docker images ls 命令可以列举本地主机上已有镜像的基本信息
[root@alvin-test-os ~]# docker images 
REPOSITORY                                                   TAG                                                 IMAGE ID CREATED                              SIZE 
registry.cn-hangzhou.aliyuncs.com/alvinos/teach 1000-teach-2020-10-28-13-40-27 22fdec3d9a6d                      3 weeks ago             1.02GB 
nginx                                                                                                                            1.17 9beeba249f3e                     6 months ago                                    127MB

列举信息中,可以看到几个字段信息:
镜像来源:来自哪个仓库,默认来自:hub.docker.com
镜像标签:比喻 1.17、1000-teach-2020-10-28-13-40-27
镜像 ID:例如 22fdec3d9a6d
镜像创建时间:例如:3 weeks ago
镜像大小:127MB

其中镜像的 ID 信息十分重要,它唯一标识了镜像。在使用镜像 ID 的时候,一般可以使用该 ID 的前若干个 字符组成的可区分串来替代完整的 ID。
TAG 信息用于标记来自同一个仓库的不同镜像。TAG 在同一个仓库中是唯一的。
镜像大小信息只是表示了该镜像的逻辑体积大小,实际上由于相同的镜像层本地只会存储一份,物理上占用 的存储空间会小于各镜像逻辑体积之和。
image 子命令主要支持如下选项:
-a : 列出所有(包括临时文件)镜像文件
alvin@AlvindeMacBook-Pro: docker images -a
REPOSITORY TAG IMAGE
ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/alvinos/teach
1000-teach-2020-10-22-19-03-16 d83921684085 3 weeks ago 1.05GB
test v1
2047b4806990 3 weeks ago 1.05GB 85b0590cd234 3 weeks ago 1.05GB 611b48e08ec2 3 weeks ago 1.05GB 9fbe4fba95d2 3 weeks ago 1.05GB 31b4192b2e41 3 weeks ago 1GB 2c8ba419a512 3 weeks ago 1GB
–digests=true|false:列出镜像的数字摘要值
REPOSITORY TAG DIGEST
IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/alvinos/teach 1000-teach-2020-10-28-13-40-27 sha256:1dd7db35cc9f3c2f0349806d05f93cbd18f1f583290c5bf2d513f942929bf068 22fdec3d9a6d 3 weeks ago 1.02GB
nginx 1.17 sha256:6fff55753e3b34e36e24e37039ee9eae1fe38a6420d8ae16ef37c92d1eb26699 9beeba249f3e 6 months ago 127MB
-q : 仅显示 ID 信息
** 为镜像添加 tag**
为了方便后续工作中使用特定的镜像,还可以使用 docker tag 命令来为本地的镜像添加标签。
在这里插入图片描述
查看镜像详细信息
docker inspect 镜像名
[root@docker1 ~]# docker inspect nginx
在这里插入图片描述

# 镜像标签的构成
docker.io/library/redis:latest
docker.io : 镜像仓库的URL
library :镜像仓库命名空间
redis : 镜像名称
latest : 镜像版本号

上传镜像

# 格式
	docker push [镜像标签]

# 注:要想上传镜像,首先得登录镜像仓库,其次设置对应镜像仓库的tag,打包的时候前面必须要带上自己的用户名称如:
docker tag 仓库url/命名空间/仓库名称:版本号
其中仓库url/命名空间/仓库名称:版本号缺一不可

[root@docker1 ~]# docker tag 106ff58d4308 yzl1600/k8s-kube-apiserver:v1.21.2  
[root@docker1 ~]# docker tag f7734694baa4 registry.cn-shanghai.aliyuncs.com/yzl_test/php:v1
[root@docker1 ~]# docker push registry.cn-shanghai.aliyuncs.com/yzl_test/php:v1
The push refers to repository [registry.cn-shanghai.aliyuncs.com/yzl_test/php]
3480f9cdd491: Pushed 
a24a292d0184: Pushed 
f927192cc30c: Pushed 
1450b8f0019c: Pushed 
8e14cb7841fa: Pushed 
cb42413394c4: Pushed 
v2: digest: sha256:7ef832c720188ac7898dbd8d1e237b0738e94f94fc7e981cb7b8efe84555e892 size: 1572

使用 inspect 命令查看详细信息
使用 docker inspect 命令获取镜像的详细信息,包括 PID、作者、架构等等。
在这里插入图片描述
** 搜索镜像**
在docker中搜索镜像主要使用Search子命令,默认只搜索Docker Hub官方镜像仓库中的镜像。
其语法为docker search [option] 镜像名。支持的命令选项主要包括:
-f : 过滤输出内容
在这里插入图片描述
–limit: 限制输出结果
在这里插入图片描述–no-trunc: 不截断输出结果(显示所有的介绍信息)
[root@alvin-test-os ~]# docker search -f stars=8 --limit 3 --no-trunc redis
NAME DESCRIPTION
STARS OFFICIAL AUTOMATED
redis Redis is an open source key-value store that functions as a data structure server.
8779 [OK]
bitnami/redis Bitnami Redis Docker Image
167 [OK]
rediscommander/redis-commander Alpine image for redis-commander - Redis management
tool. 47 [OK]
** 输出参数释义**
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、收藏的意思
AUTOMATED: 自动构建镜像

** 删除和清理镜像**
在 docker 中,删除镜像主要使用 rmi 子命令,清理镜像主要使用 prune 子命令。
** 使用标签删除镜像**

使用 docker rmi 或 docker image rm 命令可以删除镜像,命令格式为 docker rmi image
[root@alvin-test-os ~]# docker rmi redis 
Untagged: redis:latest 
Untagged: redis@sha256:5b98e32b58cdbf9f6b6f77072c4915d5ebec43912114031f37fa5fa25b032489

参数:
-f : 强制删除镜像。

[root@alvin-test-os ~]# docker rmi -f redis 
Untagged: redis:latest 
Untagged: redis@sha256:5b98e32b58cdbf9f6b6f77072c4915d5ebec43912114031f37fa5fa25b032489

总结:
docker rm 容器ID(删除容器)
docker rmi 镜像ID (删除镜像)
docker ps (查看镜像)

清理镜像
使用一段时间之后,docker 会产生很多临时文件,以及一些没有被使用的镜像,我们可以通过 docker image prune 命令来进行清理。
参数:
-a :删除所有无用的镜像,不光是临时镜像。
#查看原来的镜像
[root@alvin-test-os ~]# docker images
在这里插入图片描述
#删除所有的未被使用的镜像
[root@alvin-test-os ~]# docker image prune -a
在这里插入图片描述
-f :强制删除镜像,而不进行提示。

alvin@AlvindeMacBook-Pro: docker image prune -a -f 
Deleted Images: 
untagged: registry.cn-hangzhou.aliyuncs.com/alvinos/swoole:latest 
untagged: 
registry.cn-hangzhou.aliyuncs.com/alvinos/swoole@sha256:9f39e18ba29c4e5d064d3166 63d09ac125104d379cb2e7e4e6d3ee7ad4470584 
deleted:sha256:d48372a060549a465a0eb23adfbbd59506bc809fc1bf37125c3ce180d07cd455 deleted: sha256:c251abf00a09541780fd972d284bf9c5213a68890b922d2ff2e7ff36009db67e
deleted: sha256:b340ab85cc561d2dd2776be0197b0847f4b3228cd73eeaaebac7d17e03ba8388 deleted: sha256:a78a173ce6a255e9e941a9668eee7ae88a64faa19eb79f76c19ff12623c59d1d deleted: sha256:26f2d6d97c083ecff570e3b4b945395b1062bcf65f9eaec0afb6e90ef9b7b671 deleted: sha256:a84b2d4c28c5eec8c3401015ab5fffb759304a1b7b6aca09d9eb77ebede634ac deleted: sha256:2e215f5f1db2ad5093c4f3879dc6b9c4f7de494b3654e09572ee51738a7f559f deleted: sha256:aad5610214ba2382858fd8d436dfd34b86e39978ca89aefff61b2781018ab019 deleted: sha256:da7b0b2c986dcf127345bafad35ae18a66fd1ba2e99f8302fc3e73822c2d9959 deleted: sha256:9c7c0fade080ec64e220d78e6579d5a7fd37f64fd322d8b529148b8ca9d25e8f deleted: sha256:9b57ee5d38e3c490237848c2a37720f7fe7eb8cf35b4143dda2f921fd331d640 deleted: sha256:89c094c94208c4a064195ff1daf5db1b00b2584318a0e5fb28c31268a8086787 deleted: sha256:63fcc276289672a37ac9bb918e1a9839a48674057aaec5693181764e6945a756 deleted: sha256:3168d43cb9db5a2f62f4fb6ddf208891eec6f1ee03ceb1a44aa6df39d9d1cc51 deleted: sha256:fe7e89f5270da83dfbfe2df62622262cb2555c9701daececda29906b03136f80 deleted: sha256:a2af60f6d03fe6b181e0c1c3d8b008d598acd8c1098a1f267887a2e9de7c3998 deleted: sha256:47860335fff22fac8885ba0e7a22c9287a2c076aed25d06319fefeee1704cc1f untagged: nginx:latest

** 使用 history 命令查看镜像构建历史**
在这里插入图片描述
注意:有些构建信息过长,可以使用–no-trunc 选项来输出完整信息。

保存镜像

构建镜像一般有三种情况:
保存正在运行的容器直接为镜像(commit)
保存正在运行的容器为镜像压缩包(import/export)
保存镜像为压缩包(save/load)

** 基于容器保存**
主要格式:docker commit [容器ID] .
主要参数
| -a | 作者信息 |
| -c |将dockerfile指令应用于创建的镜像 |
| -m | 提交信息 |
| -p | 提交时,暂停容器运行 |
启动一个容器、修改并保存

# 实例
[root@Centos7 ~]# docker commit -a "Alvin" -m "这是一个docker镜像" -p be3b92e2886b  test:v1
sha256:4a06cd2af42877b5e2908073061f7ae1bf9e308a470bdfc0c6f906ef368aaed8
[root@Centos7 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
test         v1        4a06cd2af428   5 seconds ago   104MB

** 基于本地模板导入(import/export)**
** 保存镜像**
有时我们需要将一台电脑上的镜像复制到另一台电脑上使用,除了可以借助仓库外,还可以直接将镜像保存成一 个文件,再拷贝到另一台电脑上导入使用。
对于镜像的导出和导入,Docker 提供了两种方案,下面分别进行介绍。
使用 export 和 import
export 和 import 的针对点是容器,将本机的容器导出为镜像包。
基本格式:
docker export [容器ID] > [压缩包]
docker import [包名称] [自定义镜像名称]
** 使用 export 保存容器为镜像**

[root@instance-gvpb80ao docs]# docker export daf9c3656be3 > nginx.tar 
[root@instance-gvpb80ao docs]# ll | grep nginx.tar
-rw-r--r-- 1 root root 135117824 924 20:51 nginx.tar

** 使用 import 导入包为镜像**

[root@instance-gvpb80ao docs]# docker import nginx.tar test/nginx:v1 sha256:02107323de1b074c5d2034b01eff855fec5922b45776c2721882d100ba6dd15b [root@instance-gvpb80ao docs]# docker images | grep test 
test/nginx                                                                                       v1 
02107323de1b 22 seconds ago 131MB

** 使用 save 和 load**
save 和 load 的针对的点是镜像,将本机的镜像导入、导出为镜像包。
保存镜像的格式:
docker save [镜像ID] > [包名称]

** 使用 save 保存镜像**

[root@instance-gvpb80ao docs]# docker save 6858809bf669 > busybox.tar 
[root@instance-gvpb80ao docs]# ll | grep busy 
-rw-r--r-- 1 root root 1458176 924 21:01 busybox.tar

** 使用 save 保存多个镜像**

[root@instance-gvpb80ao docs]# docker save -o test.tar busybox nginx:1.18.0 
[root@instance-gvpb80ao docs]# docker load < test.tar 
Loaded image: busybox:latest 
Loaded image: nginx:1.18.0

** 使用 load 导入镜像**

[root@instance-gvpb80ao docs]# docker load < busybox.tar 
[root@instance-gvpb80ao docs]# docker load -i busybox.tar 
Loaded image ID: sha256:6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3 [root@instance-gvpb80ao docs]# docker images | grep 685880 
busybox latest 
6858809bf669 2 weeks ago 1.23MB
总结: 保存镜像的两种方案export、save的差别

export 导出的镜像文件体积小于 save 保存的镜像,因为save保存更完全,export保存会丢掉一些不必要的数据

** docker export 可以为镜像指定新名称,docker save 不能对载入的镜像重命名。
docker import为保存镜像的默认命令,docker load保存了镜像的所有命令。
docker export是仅仅保存镜像,docker save是完整的保存镜像
一般情况下,docker save用作项目迁移,docker export作为基础镜像**

** 是否包含镜像历史**
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅 保存容器当时的快照状态),所以无法进行回滚操作。
save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。

[root@instance-gvpb80ao docs]# docker history 6858809bf669cc5da7cb6af83d0fae838284d12e1be0182f92f6bd96559873e3 
IMAGE CREATED CREATED BY SIZE 
COMMENT 
6858809bf669 2 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0B 
<missing> 2 weeks ago /bin/sh -c #(nop) ADD file:72be520892d0a903d… 1.23MB

** 应用场景不同**
docker export 的应用场景:主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用, 比如作为基础的开发环境。
docker save 的应用场景:如果我们的应用是**使用 docker-compose.yml 编排的多个镜像组合,但我们要部 署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,**然后拷贝到客户服务器上使用 docker load 载入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值