linux12 - docker容器01 --> 介绍、安装、镜像的使用

一、docker介绍

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

# Docker 
  容器,将应用程序打包到一个环境中,隔离运行,解决异构环境下应用部署问题。
  生命周期:
      docker生命周期很短暂,就是一个容器起来到结束,就是其生命周期。
docker的思想来之集装箱!
  # 隔离: Docker核心思想!
    打包装箱,每个箱子是互相隔离的,Docker是通过隔离机制,可以将服务器利用到极致
# docker文档  # https://docs.docker.com/get-docker/ 
# docker官网  # https://www.docker.com/
# docker仓库  # https://hub.docker.com/
0.为什么使用容器
# 1、上线流程繁琐
开发 -> 测试-> 申请资源-> 部署 -> 测试等环节
# 2、资源利用率低 
# 3、扩容、缩容不及时
# 4、服务器缓解臃肿
# 4、环境不一致性
1.Docker 容器虚拟化的好处
    在云时代,开发者创建的应用必须要能很方便地在网络上传播,也就是说应用必须脱离底层物理硬件的限制;同时必须满足“任何时间任何地点”可获取可使用的特点。因此,开发者们需要一种新型的创建分布式应用程序的方式,快速分发部署,而这正是 Docker 所能够提供的最大优势。
    Docker 提供了一种更为聪明的方式,通过容器来打包应用、解耦应用和运行平台。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类别的平台。这无疑帮助我们节约了大量的宝贵时间,并降低部署过程出现问题的风险。
# 容器与虚拟机之间区别?
- 进程级别的隔离 : 
- 操作系统级别的隔离:

# 优势:
- 容器启动时秒级,操作系统时分钟级,docker是轻量级的

虚拟机:在windows装一个VMware,通过这个软件开源虚拟处理一台(多台),笨重
虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术

VM: linux centos原生镜像(一台电脑)。隔离,需要开启多个虚拟机 几个G 几分钟  

docker: 隔离 镜像(宿主机的内核 4m +mysql + nginx) 十分的小巧,几个M kb  秒级启动 

在这里插入图片描述

在这里插入图片描述

2.Docker 在开发和运维中的优势
对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让
应用正常运行,而 Docker 恰恰可以实现这一中级目标。具体来说,在开发和运维过程中,Docker 具有以下几个方面的优势:

# 1、更快的交付和部署:
使用 Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。

# 2、更高效的利用资源:
运行 Docker 容器不需要额外的虚拟化管理程序的支持,Docker 是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker 的性能要提高 1 ~ 2 个数量级

# 3、更轻松的迁移和扩展:
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间轻松的迁移应用。

# 4、更轻松的管理和更新:
使用 Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
虚拟机技术缺点
资源占用十分多
冗余步骤多
启动很慢

# 容器化技术不是模拟的一个完整的操作系统
3.Docker 与虚拟机的比较
作为一种轻量级的虚拟化方式,Docker 在运行应用上跟传统的虚拟机的方式相比具有如下显著优势:
# Docker 容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
# Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器。
# Docker 通过类似 git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
# Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程。
docker是利用宿主机的内核,vm需要centos ,docker不需要虚拟机一样重新加载一个操作系统,启动是秒级的
# docker和虚拟机技术的不同:
1、传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
2、容器内的应用之间运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
3、每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
特性容器虚拟机
启动速度快秒级分钟级
性能接近原生较好
内存MB级GB级
硬盘适应MB级GB级
运行密度单台主机支持上千个单台主机支持几个
隔离性安全隔离完全隔离
迁移优秀一般

在这里插入图片描述

4、 DevOPs (开发、运维)
 DevOPs #dan v one ps
# 1、应用 更快速的交付和部署
传统: 一堆帮助文档,安装程序
DOcker: 打包镜像发布测试,一键运行
# 2、更便捷的升级和扩缩容
使用Docker之后,我们部署应用和搭积木一样
项目打包一个镜像,扩展 服务器A 服务器B
# 3、更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的
# 4、更高效的计算资源利用
Docker 内核级别的虚拟化,可以在一个物理机上运行多个服务
# 5、CICD
 #持续集成,持续部署

# 查看系统版本
[root@docter ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
[root@docter ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core

二、Docker 概念和使用

Docker 中有三个核心概念

# 1、镜像  
镜像就是启动一个容器的模板,可以通过这个模块来创建容器(就是一个独立的软件包)
# 2、容器     
容器就是对外提供服务的进程,或者容器就是镜像启动起来的一个实例(启动一下nginx,那么nginx就是容器) 就是一个简易的linux系统
# 3、仓库
仓库是用来存放镜像的地方 (公有仓库、私有仓库)
Docker hub          国外仓库
阿里云、华为云       国内仓库
# 阿里云  --- 配置镜像加速(容器服务器)

因此,准确把握这三大概念对于掌握 Docker 技术尤为重要

#1.镜像(Image)
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统

#2.容器(Container)
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

#3.仓库(Repository)
用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。
0.window安装docker

windows: 其实docker是无法安装到Windows,之所以能安装,是因为Windows版的dockers内核集成虚拟机

# https://www.docker.com/products/docker-desktop

根据docker安装的位置鼠标点点点

在这里插入图片描述

1.docker 安装
# docker.com官网安装
https://docs.docker.com/engine/install/centos/

# 1、卸载旧的版本
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2、安装需要的安装包     
[root@docter yum.repos.d]#  sudo yum install -y yum-utils
# 3、设置镜像的仓库
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的
    https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo #华为
# 4、清空缓存
[root@docter yum.repos.d]# yum clean all &&  yum makecache
# 5、安装docker
[root@docter yum.repos.d]# yum install docker-ce docker-ce-cli containerd.io
# 6、阿里云加速器
打开阿里云官网  产品  --> 容器与中间件  -->  容器与镜像服务ACR --> 管理控制台 --> 镜像加速器 --> CentOS

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://k7eoap03.mirror.aliyuncs.com"]
}
EOF
# 6、启动
[root@docter yum.repos.d]# systemctl daemon-reload
[root@docter yum.repos.d]# systemctl enable --now docker.service 
国内安装docker 01 – 阿里云
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
 sudo yum -y install docker-ce-[VERSION]
国内安装docker02 – 华为云
# 进入华为镜像站 docker源下载
#1.如果之前安装过docker,需要自行卸载   #华为镜像源 
[root@docter yum.repos.d]# sudo yum remove docker docker-common docker-selinux docker-engine -y
#2.初始化系统环境
[root@docter yum.repos.d]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#3.安装yum源
[root@docter yum.repos.d]# wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

#4.docter 源管理
sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

#5.清空缓存
[root@docter yum.repos.d]# yum clean all &&  yum makecache

#6.安装docker
[root@docter yum.repos.d]# yum install docker-ce -y  #ce社区版  #ee企业版

#7.docker优化
打开阿里云官网  产品  --> 容器与中间件  -->  容器与镜像服务ACR --> 管理控制台 --> 镜像加速器 --> CentOS

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://k7eoap03.mirror.aliyuncs.com"]
}
EOF
#8.启动并设置开机自启
[root@docter yum.repos.d]# systemctl daemon-reload
[root@docter yum.repos.d]# systemctl enable --now docker.service 
#9.检查docker
   1)第一种方式
[root@docter ~]# docker version   #版本信息
   1)第二种方式
[root@docter yum.repos.d]# docker info #推荐第一种方式 显示docker的系统信息
   2)第三种方式
[root@docter yum.repos.d]# docker run -d -P nginx
[root@docter yum.repos.d]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                     NAMES
2cf9d0e88a05   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:49153->80/tcp, :::49153->80/tcp   stoic_shirley

# 访问 192.168.15.30:49153

扩展:docker卸载

#1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2.删除目录
rm -rf /var/lib/docker   #docker默认的工作路径
#3.镜像加速器(docker优化)
 - 登录阿里云找到容器镜像服务
 - 找到镜像加速地址
 - 配置使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dElWSr1I-1626169590357)(C:\Users\17155\Desktop\docker img\1623939090235.png)]

三、docker镜像相关命令

Docker run运行原理图

在这里插入图片描述

Docker镜像加载原理
底层原理
# 1.docker是怎么工作的?
docker是一个CS结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问!
docker-server接收到docker-client的指令,就会执行这个命令!

在这里插入图片描述

1、常用镜像仓库
# 1.官方仓库:hub.docker.com
# 2.自己的私有仓库:Harbor
# 3.阿里云私有仓库:registry.cn-hangzhou.aliyuncs.com
2、搜索镜像
#格式:
docker search [镜像名称]

#实例:
[root@docker ~]# docker search mysql

#参数
[root@docter ~]# docker search --filter=STARS=3000   #搜索出来的镜像就是STARS大于3000的
"docker search" requires exactly 1 argument.
See 'docker search --help'.

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images
[root@docter ~]# docker search --filter=STARS=3000 nginx
NAME      DESCRIPTION                STARS     OFFICIAL   AUTOMATED
nginx     Official build of Nginx.   15051     [OK]  
-f:筛选
[root@docter ~]# docker search -f stars=2000 nginx
NAME                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                 Official build of Nginx.                        15034       [OK]       
jwilder/nginx-proxy   Automated Nginx reverse proxy for docker con…   2038                    [OK]

[root@docter ~]# docker search mysql
NAME                 DESCRIPTION           STARS           OFFICIAL            AUTOMATED
# 镜像名称            # 描述信息            #收藏个数       #是否官方镜像          #自构建镜像
mysql                            Redis is an open source key-value store that…   9586      [OK]       
bitnami/redis                    Bitnami Redis Docker Image                      185                  [OK]

# 自构建镜像  是依赖于其他镜像构建的

参数 --no-trunc 显示所有的简介
[root@docter ~]# docker search nginx --no-trunc

在这里插入图片描述

3、拉取镜像(下载镜像)
#格式:
docker pull [镜像名称]
# 获取镜像
	格式:docker pull [仓库URL]/[仓库命名空间]/[仓库名称]:[版本号]
	docker pull redis
	
	默认的仓库URL:index.docker.io
	默认的命名空间:library
	index.docker.io/library/redis
#实例:
[root@docker ~]# docker pull redis
Using default tag: latest  #如果不写tag.默认就是latest(版本号)
latest: Pulling from library/redis
#镜像层   #分层下载:docker image的核心  联合文件系统 UnionFS 联合文件系统
69692152171a: Already exists 
a4a46f2fd7e0: Pull complete 
bcdf6fddc3bd: Pull complete 
2902e41faefa: Pull complete 
df3e1d63cdb1: Pull complete 
fa57f005a60d: Pull complete 
#镜像ID号(镜像ID号是全球唯一)
Digest: sha256:7e2c6181ad5c425443b56c7c73a9cd6df24a122345847d1ea9bb86a5afc76325   #签名
#镜像下载状态
Status: Downloaded newer image for redis:latest
#镜像的全称(镜像的tag)
docker.io/library/redis:latest

#指定版本下载
docker pull mysql:5.7
联合文件系统(UFS)
# UnionFS
# 联合文件系统(docker安装l两个相同的nginx 就不需要2个nginx文件系统,只需要一个就ok)

# Docker镜像加载原理
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了,由此课件对于不同的linux发行版,bootfs是一致的,rootfs会有差异,因此不同的发行版可以用公用的bootfs。
虚拟机是分钟级别,容器是秒级。
# 谁白了,原来的os可能是全量   现在docker镜像就是把全量中多余的都删除,只留下最精的,最需要的

# bootfs是启动引导的加载
# rootfs 不同的版本

# 分层原理
Docker镜像是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部
这一层就是我们通常所说的容器层,容器之下都叫镜像层 #所有操作都是在容器层

[root@docker ~]# docker pull redis
Using default tag: latest  #如果不写tag.默认就是latest(版本号)
latest: Pulling from library/redis
#镜像层   #分层下载:docker image的核心  联合文件系统 UnionFS 联合文件系统
69692152171a: Already exists 
a4a46f2fd7e0: Pull complete 
bcdf6fddc3bd: Pull complete 
2902e41faefa: Pull complete 
df3e1d63cdb1: Pull complete 
fa57f005a60d: Pull complete 
#镜像ID号(镜像ID号是全球唯一)
Digest: sha256:7e2c6181ad5c425443b56c7c73a9cd6df24a122345847d1ea9bb86a5afc76325   #签名
#镜像下载状态
Status: Downloaded newer image for redis:latest
#镜像的全称(镜像的tag)
docker.io/library/redis:latest
4、查看当前系统上有哪些镜像
#格式
docker images 或者 docker image ls docker images  -a
# 方式一
[root@docter ~]# docker image ls
# 方式二
[root@docter ~]# docker images
REPOSITORY      TAG          IMAGE ID            CREATED                      SIZE
# 镜像名称      #镜像版本号   #镜像ID(缩写)    #镜像生成时间距离现在时长         #镜像大小
redis           latest       fad0ee7e917a       2 weeks ago                   105MB
nginx           latest       d1a364dc548d       3 weeks ago                   133MB

#参数
-a, --all: 显示全部镜像
-q :       只显示镜像ID
[root@docker ~]# docker images -q
fad0ee7e917a
d1a364dc548d

--digests=true|false:列出镜像的数字摘要值

[root@docter ~]# docker images --digests=true
REPOSITORY   TAG       DIGEST                                                                    IMAGE ID       CREATED       SIZE
redis        latest    sha256:7e2c6181ad5c425443b56c7c73a9cd6df24a122345847d1ea9bb86a5afc76325   fad0ee7e917a   2 weeks ago   105MB
nginx        latest    sha256:6d75c99af15565a301e48297fa2d121e15d80ad526f8369c526324f0f7ccb750   d1a364dc548d   3 weeks ago   133MB

在这里插入图片描述

5、获取镜像的详细信息
#格式
docker inspect [镜像名称或镜像ID]
[root@docter ~]# docker inspect redis
#参数
-f : 格式化输出
[root@docter ~]#  docker inspect -f '{{.Id}}' fad0ee7e917a
sha256:fad0ee7e917aeec77f15d0a106b8e415f4c0499d341b88c841b9a9f78c3c3ca5
[root@docker ~]# docker inspect -f '{{.ContainerConfig.Hostname}}' redis
ab0fc1cc2522
#‘.’相当于linux里的根===路径

6、登录镜像仓库
#格式
docker login  
[root@docter ~]# docker login
# 默认情况下,docker login登录的是官方仓库,如果登录其他镜像仓库则需要指定镜像仓库的URL连接。

#实例
[root@docter ~]# docker login registry.cn-hangzhou.aliyuncs.com
        Username: yangyang091022
        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@docter ~]# cat ~/.docker/config.json    #保存的登录信息
    {
        "auths": {
            "registry.cn-hangzhou.aliyuncs.com": {
                "auth": "eWFuZ3lhbmcwOTEwMjI6Y2hlbjE4NzkwMDcwODMw"
            }
        }
    }


# 参数
[root@docter ~]# docker login -h # 帮助信息
--username|-u : 指定用户名
--password|-p : 指定密码

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

#打标签
 #格式
 docker tag [镜像ID]  镜像标签
 #实例
[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        latest    fad0ee7e917a   2 weeks ago   105MB
nginx        latest    08b152afcfae   3 days ago   133MB
[root@docter ~]# docker tag 08b152afcfae nginx:v1

[root@docter ~]# docker tag 621ceef7494a registry.cn-hangzhou.aliyuncs.com/alvinos/redis:v2
[root@docter ~]# docker images  #改后查看(名字不同但是ID相同)
REPOSITORY                                        TAG       IMAGE ID       CREATED        SIZE
registry.cn-hangzhou.aliyuncs.com/alvinos/redis   v2        621ceef7494a   2 months ago   104MB
redis                                             latest    fad0ee7e917a   2 weeks ago    105MB
nginx                                             latest    d1a364dc548d   3 weeks ago    133MB
nginx                                             v1        08b152afcfae   3 days ago     133MB
8、镜像上传
#格式
docker push [镜像标签]
注:要想上传镜像,首先得登录镜像仓库,其次设置对应镜像仓库的tag

#实例
[root@docter ~]# docker push registry.cn-hangzhou.aliyuncs.com/alvinos/redis:v2
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/alvinos/redis]
3480f9cdd491: Pushed 
a24a292d0184: Pushed 
f927192cc30c: Pushed 
1450b8f0019c: Pushed 
8e14cb7841fa: Pushed 
cb42413394c4: Pushed 
v2: digest: sha256:7ef832c720188ac7898dbd8d1e237b0738e94f94fc7e981cb7b8efe84555e892 size: 1572


[root@docker ~]# docker images
lnmp-php                                                                          v1        303b103360fa   About an hour ago   1.28GB
[root@docker ~]# docker tag lnmp-php:v1 registry.cn-shanghai.aliyuncs.com/aliyun_mm/docker_lnmp_mm:v1
[root@docker ~]# docker push registry.cn-shanghai.aliyuncs.com/aliyun_mm/docker_lnmp_mm:v1

9、镜像的删除
#格式
docker rmi [镜像名称或者镜像ID]

# 注:正在运行的镜像的删除不了,强制删除只能删除镜像名字

#实例
[root@docter ~]# docker rmi nginx
[root@docter ~]# docker rmi nginx mysql redis  #删除多个镜像
[root@docter ~]# docker rmi -f $(docker images -aq)  #删除全部的镜像

#参数
-f  : 强制删除
[root@docter ~]# docker rmi -f mysql
Untagged: mysql:latest
Untagged: mysql@sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969
Deleted: sha256:c0cdc95609f1fc1daf2c7cae05ebd6adcf7b5c614b4f424949554a24012e3c09

# 注:当有容器正在使用镜像时,强制删除镜像,只能删除镜像的所有tag, 不会删除镜像。

[root@docter ~]# docker images  #默认镜像
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
<none>       <none>    d1a364dc548d   3 weeks ago   133MB
[root@docter ~]# docker rmi d1a364dc548d  # 删除不掉
Error response from daemon: conflict: unable to delete d1a364dc548d (cannot be forced) - image is being used by running container 2cf9d0e88a05
[root@docter ~]# docker ps   # 查看镜像
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS       PORTS                                     NAMES
2cf9d0e88a05   d1a364dc548d   "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:49153->80/tcp, :::49153->80/tcp   stoic_shirley
[root@docter ~]# docker rm -f 2cf9d0e88a05  #删除镜像的号
2cf9d0e88a05
[root@docter ~]# docker rmi d1a364dc548d  #重新删除成功
Deleted: sha256:d1a364dc548d5357f0da3268c888e1971bbdb957ee3f028fe7194f1d61c6fdee
Deleted: sha256:fcc8faba78fe8a1f75025781c8fa1841079b75b54fce8408d039f73a48b7a81b
Deleted: sha256:a476b265974ace4c857e3d88b358e848f126297a8249840c72d5f5ea1954a4bf
Deleted: sha256:56722ee1ee7e73a5c6f96ea2959fa442fb4db9f044399bcd939bb0a6eb7919dc
Deleted: sha256:c657df997c75f6c1a9c5cc683e8e34c6f29e5b4c1dee60b632d3477fd5fdd644
Deleted: sha256:e9e1f772d2a8dbbeb6a4a4dcb4f0d07ff1c432bf94fac7a2db2216837bf9ec5b
[root@docter ~]# docker image ls  #查看镜像
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

10、清空镜像
#格式
docker image prune

#实例
[root@Centos7 ~]# docker image prune #默认清空下不删除镜像
    WARNING! This will remove all dangling images.
    Are you sure you want to continue? [y/N] y
    Total reclaimed space: 0B

#参数
-a : 删除所有镜像
[root@docter ~]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: redis:latest
untagged: redis@sha256:7e2c6181ad5c425443b56c7c73a9cd6df24a122345847d1ea9bb86a5afc76325
deleted: sha256:fad0ee7e917aeec77f15d0a106b8e415f4c0499d341b88c841b9a9f78c3c3ca5
deleted: sha256:1fcc1c8f8d93df014639e7770125951e2a4014bb6ba113f654d95b5217e1639f
deleted: sha256:e1e32b76f9e2da08414af17e8413c768e26f0c1b9555df187214b25991421b16
deleted: sha256:9efc75a0d640ce670e852cdea02a0fd559c5933269feba3fa16a2a405674d2ba
deleted: sha256:d6f89a74ae79d19535904575f2ee6d08881742af9f33d1f78e2a000b0d3fa26b
deleted: sha256:ac98421641e727deccd15eed0f50bbe33f32689311fd387ad452d33731ba1f9f

11、查看镜像历史(镜像的构建历史)
#格式
docker history [镜像ID或镜像名称]

[root@docter ~]# docker pull alpine  #生成镜像
[root@docter ~]# docker pull nginx  #生成镜像

#实例
[root@docter ~]# docker history alpine
IMAGE          CREATED      CREATED BY                                      SIZE      COMMENT
d4ff818577bc   3 days ago   /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B        
<missing>      3 days ago   /bin/sh -c #(nop) ADD file:f278386b0cef68136…   5.6MB     
[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
alpine       latest    d4ff818577bc   3 days ago    5.6MB
nginx        latest    d1a364dc548d   3 weeks ago   133MB

12、保存镜像的三种方式
# 保存镜像(commit)
保存正在运行的容器直接为镜像

# 保存镜像(import/export)
 保存容器为镜像,保存正在运行的容器为镜像压缩包
 
# 保存镜像(save/load)
 保存镜像为压缩包

13、保存镜像(commit)
#1.docker commit 提交容器成为一个新的副本

#命令和get原理类似
docker commit -m="提交的描述信息" -a="作者" [容器ID]  目标镜像名:[TAG]

#实战测试
 - 启动一个默认的tomcat
 - 发现这个默认的tomcat,是没有webapps应用,镜像的原因,官方的镜像默认web apps下面是没有文件的
 - 我自己拷贝进去了进本的文件
 - 将我们操作过的容器通过commit提交为一个镜像,我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像。

# 保存正在运行的容器直接为镜像
#格式 
docker commit [容器ID|容器名称]
docker commit -a "作者" -m "描述信息" -p 容器ID 目标镜像名:t[TAG]
#实例
[root@docter ~]# docker ps  查看docter运行信息
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                     NAMES
c89471939880   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:49158->80/tcp, :::49158->80/tcp   stoic_mcnulty

[root@docter ~]# docker commit -a "mm" -m "这是一个docter镜像" -p c89471939880 test:v1
[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         v1        ad763deaccb4   19 seconds ago   133MB
alpine       latest    d4ff818577bc   3 days ago       5.6MB
nginx        latest    d1a364dc548d   3 weeks ago      133MB

#参数
-a:作者信息
-m:提交信息
-p:提交时,暂停容器运行
14、保存镜像(import/export)
# 保存容器为镜像,保存正在运行的容器为镜像压缩包
  #格式
docker export [容器的ID] > [包名称]
  # 实例
[root@docter[root@docter ~]# docker ps  # 查看docter运行信息
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                     NAMES
c89471939880   nginx     "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes   0.0.0.0:49158->80/tcp, :::49158->80/tcp   stoic_mcnulty
方式一:
[root@docter ~]# docker export c89471939880 > nginx.tar #保存镜像(打包)
方式二:
[root@docter ~]# docker export  -o nginx.tar.gz c89471939880
[root@docter ~]# ll |grep nginx
-rw-r--r--  1 root root 135603712 Jun 19 22:05 nginx.tar
[root@docter ~]# gzip nginx.tar 
-rw-r--r--  1 root root 51542981 Jun 19 22:05 nginx.tar.gz  #给镜像压缩
===========================================================================================
##  导入镜像包 
    #格式
docker import [包名称] [自定义镜像名称]
# 实例
[root@docter ~]# docker import nginx.tar.gz test:v3
sha256:fa817d20d563315ce78553cc7832235be1ae3eee75606edd2b56071651890df0
[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         v3        fa817d20d563   14 seconds ago   131MB
test         v1        ad763deaccb4   8 minutes ago    133MB
alpine       latest    d4ff818577bc   3 days ago       5.6MB
nginx        latest    d1a364dc548d   3 weeks ago      133MB

15、保存镜像(save/load)
 保存镜像为压缩包
# 保存镜像的格式:
docker save [镜像名称|镜像ID] > [包名称]
[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         v3        fa817d20d563   4 minutes ago    131MB
test         v1        ad763deaccb4   12 minutes ago   133MB
alpine       latest    d4ff818577bc   3 days ago       5.6MB
nginx        latest    d1a364dc548d   3 weeks ago      133MB
方式一:
[root@docter ~]# docker save  d1a364dc548d > alpine.tar
total 184508
-rw-r--r--  1 root root 137382400 Jun 19 22:14 alpine.tar
方式二:
[root@docter ~]# docker save -o alpine1.tar.gz d4ff818577bc
[root@docter ~]# ll
total 190244
-rw-------  1 root root   5873664 Jun 19 22:16 alpine1.tar.gz
-rw-r--r--  1 root root 137382400 Jun 19 22:14 alpine.tar
====================================================================================================
# 导入镜像的格式:
	docker load < [包名称]
	
[root@docter ~]# docker load < alpine2.tar 
Loaded image ID: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83
[root@docter ~]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    <none>       <none>    7731472c3f2a   2 months ago     5.61MB

# 注:save/load保存镜像无法自定义镜像名称,save保存镜像时如果使用ID保存则load导入镜像无名称,使用名称导入时才有名称。

[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         v1        ad763deaccb4   25 minutes ago   133MB
busybox      latest    69593048aa3a   11 days ago      1.24MB
nginx        latest    d1a364dc548d   3 weeks ago      133MB
[root@docter ~]# docker save busybox:latest >bustbox.tar
[root@docter ~]# ll
total 51776
-rw-r--r--  1 root root  1463808 Jun 19 22:27 bustbox.tar
[root@docter ~]# docker save busybox:latest >bustbox.tar
[root@docter ~]# docker rmi 69593048aa3a
Untagged: busybox:latest
Untagged: busybox@sha256:930490f97e5b921535c153e0e7110d251134cc4b72bbb8133c6a5065cc68580d
Deleted: sha256:69593048aa3acfee0f75f20b77acb549de2472063053f6730c4091b53f2dfb02
Deleted: sha256:5b8c72934dfc08c7d2bd707e93197550f06c0751023dabb3a045b723c5e7b373
[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         v1        ad763deaccb4   26 minutes ago   133MB
nginx        latest    d1a364dc548d   3 weeks ago      133MB
[root@docter ~]# docker load < bustbox.tar 
5b8c72934dfc: Loading layer [==================================================>]  1.455MB/1.455MB
Loaded image: busybox:latest
[root@docter ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         v1        ad763deaccb4   26 minutes ago   133MB
busybox      latest    69593048aa3a   11 days ago      1.24MB
nginx        latest    d1a364dc548d   3 weeks ago      133MB
16、保存镜像三种方式的区别
1、export保存的镜像体积要小于save(save保存更完全,export保存会丢掉一些不必要的数据)
2、export可以重命名镜像名称而save则不行
3、save可以同时保存多个镜像而export则不行
4、save一般情况下使用的场景是项目迁移,import是作为基础镜像使用

# export/inport

适用于持久化容器(不是镜像),是导出容器当前的操作系统,不包含分层系统,仅包含当前系统中的状态,相当于虚拟机的快照

保存的镜像体积要小于save(但save保存更完全,export保存会丢掉一些不必要的数据)

export可以重命名镜像名称而save则不行

# save/load

可以同时保存多个镜像而export则不行
适用于持久化镜像(不是容器),是保存一个完整的镜像,包含分层系统统一打包,相当于虚拟机的完整模板机

# docter rmi 删除镜像
# docter rm -f 删除容器

17、显示docker的版本信息
[root@docter ~]# docker version 
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:58:10 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

...

18、显示docker的系统信息(包括镜像和容器的数量)
[root@docter ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)
...

19、万能帮助命令
# docker帮助文档  https://docs.docker.com/reference/
[root@docter ~]# docker --help 

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and
                           default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit
  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FikL-09-19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值