• Docker 学习笔记总结(一)


    1. docker 简介


    项目的环境配置相当麻烦,换一台机器,就要重新来一次,非常费时。

    Docker就给出了一套标准化解决方案,系统平滑移植,容器虚拟化技术

    可以理解为docker把原始环境一摸一样地复制过来,通过镜像,达到一个平滑移植,跨平台的效果。。

    Docker是基于Go语言实现的云开源项目。
    在这里插入图片描述


    传统虚拟机技术 与 容器虚拟化技术 的区别:

    • 虚拟机的使用过程:
      在这里插入图片描述
      (缺点:需要多台虚拟机,资源占用多,冗余步骤多,启动慢。)

    • Docker容器虚拟化技术过程:
      在这里插入图片描述


    由于docker的出现,开发/运维(DevOps)混合型工程师,新一代开发工程师。

    简而言之,就是一台物理机上面,可以跑多太容器,大大提升了物理服务器的CPU和内存的利用率。
    在这里插入图片描述

    2. docker 的 三个组成


    docker官方:https://www.docker.com/

    docker hub镜像仓库:https://hub.docker.com/

    docker实质上是在已经运行的linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的linux主机。

    docker(docker引擎)必须部署在linux内核的系统上。

    在这里插入图片描述
    查看自己的内核的两个命令:

    cat /etc/redhat-release
    uname -r 
    
    • 1
    • 2

    Docker的三个基本组成:

    • 镜像(image)
    • 容器(container)
    • 仓库(repository)

    Docker 镜像 、 Docker 容器 、Docker 仓库:

    • docker镜像就是一个只读模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
    • 容器类似一个微小的linux虚拟机,运行实例。例如:docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。
    • 仓库就是集中存放镜像文件的场所。
      • 仓库分为公开仓库(public) 和 私有仓库(private) 俩种形式。
      • 最大的公开仓库是 Docker Hub (国外网站,访问速度很慢) , 一般使用国内的,如阿里云、网易云等等。

    3. docker 的 工作原理


    docker是一个client-server的结构系统,docker守护进程运行在主机上。
    在这里插入图片描述

    docker整体的执行原理如下:
    在这里插入图片描述

    4. centos系统上安装 docker


    centos安装文档地址https://docs.docker.com/engine/install/centos/
    在这里插入图片描述


    官方安装文档:https://docs.docker.com/engine/install/centos/

    第一步:确定你是centos7以上的版本。

    第二步:根据情况,卸载旧版本。

    # Uninstall old versions
    # Older versions of Docker were called docker or docker-engine. If # these are installed, uninstall them, along with associated dependencies.
    
    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    第三步:yum 安装 gcc 相关。

    # 保证 centos7 能够上外网。
    $ yum -y install gcc
    $ yum -y install gcc-c++
    
    • 1
    • 2
    • 3

    第四步:安装需要的软件包。

    • 执行 yum install -y yum-utils命令,安装软件包。
      在这里插入图片描述

    第五步: 设置stable镜像仓库。

    • 不要按照官方来配置镜像仓库,因为是国外资源,使用起来很慢,经常遇到下面的错误。
      在这里插入图片描述

    • 执行命令一下命令,设置阿里云镜像仓库资源:

    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1

    第六步:更新yum软件包索引。相当于重建一下yum安装的索引,这样安装以后快一点。

    $ yum makecache fast
    
    • 1

    第七步:安装 docker engine (docker引擎)。

    $ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
    • 1

    第八步:启动docker服务。

    # 启动docker服务
    $ sudo systemctl start docker
    # 查看docker版本
    $ docker version
    
    • 1
    • 2
    • 3
    • 4

    第九步:执行一个helloworld,测试docker执行。

    # 执行helloworld
    $ docker run hello-world
    
    • 1
    • 2

    在这里插入图片描述

    出现以上内容,就表示docker服务安装成功,并且能够正常使用。


    卸载docker步骤如下:
    在这里插入图片描述
    官方步骤如下:
    在这里插入图片描述

    5. 阿里云镜像加速器


    进入阿里云官方,直接搜索,容器镜像服务:
    在这里插入图片描述

    创建容器镜像服务,实例列表:
    在这里插入图片描述

    根据阿里云文档,进行配置加速:
    在这里插入图片描述

    6. docker run命令执行流程


    docker run命令执行流程:
    在这里插入图片描述

    7. docker 命令

    7.1 帮助启动类命令


    类似linux命令,docker的一些启动运行命令:
    在这里插入图片描述
    在这里插入图片描述

    7.2 镜像命令


    # 列出本地主机上的镜像
    docker images 
    
    # -a: 列出本地所有的镜像
    docker images -a
    # -q:只显示镜像ID
    docker images -q
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    解释一下tag作用:同一个仓库源可以有多个不同的tag,tag不具体说明,默认安装的就是最新版本(latest版本)。一般我们都要指定tag标签版本的。


    # 去远程仓库,模糊查找某个镜像名称
    docker search [某个镜像的名字]
    
    # --limit:只列出N个镜像,默认25个。
    docker search --limit 5 [某个镜像的名字]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    在这里插入图片描述


    # 下载拉取镜像 , :TAG是指定版本 
    docker pull 镜像名字[:TAG]
    # 没有TAG就是最新版等同于 docker pull 镜像名称:latest
    
    • 1
    • 2
    • 3

    在这里插入图片描述


    linux命令 : df -h 。 disk free 硬盘内存情况。
    在这里插入图片描述

    # 查看镜像/容器/数据卷所占的空间
    docker system df 
    
    • 1
    • 2

    在这里插入图片描述


    # rmi就是remove image,就是移除某个image镜像
    docker rmi [某个镜像名字ID]
    # -f 参数:就是force,强制删除。
    docker rmi -f [某个镜像名字ID]
    
    # 删除多个image镜像
    docker rmi -f 镜像名1:TAG 镜像名2:TAG ... 
    
    # 删除全部镜像
    docker rmi -f $(docker images -qa)
    # 解释一下上面命令:
    # docker images -qa 是查询全部镜像的imageID,将该命令获取的imageID传递给docker rmi -f 这个命令,这就是linux的一个用法。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    (从上图不难看出,image ID其实很长,显示的时候仅仅显示了开头的一小部分。)


    面试题:谈谈docker虚悬镜像是什么?

    • 解释:仓库名、标签都是的镜像,俗称虚悬镜像 dangling image 。
    • 这种镜像一般都是要删除的!留着容易出问题!
      在这里插入图片描述

    7.3 容器命令

    7.3.1 docker run 命令详解


    有镜像才能创建容器。

    例如:下面在docker服务上面创建了一个ubuntu环境容器。
    在这里插入图片描述

    # 启动容器命令:
    docker run [option] 镜像 [command] [arg...]
    
    • 1
    • 2

    解释option参数选项:

    • –name=“容器新名字” : 为容器指定一个名称。
    • -d : 后台运行容器并返回容器ID,也即启动守护式容器(后台运行)。
    • -i :以交互模式运行容器,通常与 -t 同时使用。
    • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
    • 一般是-it 一起使用,it就是interactive交互式 、tty终端的意思。
    • -P:随机端口映射。
    • -p:指定端口映射。
      在这里插入图片描述
      在这里插入图片描述

    实例:

    # 从仓库拉去一个ubuntu系统(centos系统比ubuntu大一点)
    docker pull ubuntu
    # -it: it就是interactive交互式 、tty终端的意思
    docker run -it ubuntu /bin/bash
    # 用bash也可以。
    docker run -it ubuntu bash 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在这里插入图片描述


    # 列出当前所有正在运行的容器
    docker ps [options]
    
    • 1
    • 2

    在这里插入图片描述
    NAMES:如果没有指定容器名称,那么系统就会随机分配一个名称。

    执行了多次run命令,相当于创建了多个docker容器:
    在这里插入图片描述

    7.3.2 docker ps 命令详解


    docker ps [options]命令:就是查看当前运行的容器。

    参数命令如下:
    在这里插入图片描述

    7.3.3 容器服务的一些命令


    退出容器方式:

    • run进去容器,exit退出,容器停止。
    • run进去容器,ctrl + p + q 退出,容器不停止。

    启动已停止运行的容器:

    docker start 容器ID或者容器名
    
    • 1

    重启容器:

    docker restart 容器ID或者容器名
    
    • 1

    停止容器:

    docker stop 容器ID或者容器名
    
    • 1

    强制停止容器:

    docker kill 容器ID或者容器名
    
    • 1

    删除已经停止的容器:

    docker rm 容器ID或者名字
    
    # -f 强制删除
    docker rm -f 容器ID或者名字
    
    # 一次性删除全部(多个)容器实例: (生产环境绝对不能用!!)
    docker rm -f $(docker ps -a -p)
    # 以下也可以实现,xargs是linux的输入参数,docker ps -a -q的结果集放到xargs中作为输入参数,执行docker rm命令。
    docker ps -a -q | xargs docker rm
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    7.3.4 容器的交互常用命令


    之前是交互式容器,操作容器进行交互。

    与之相反的是守护式容器。

    启动守护式容器(后台服务器):

    • 大部分场景下,一般docker的服务是在后台运行的。-d 参数指定后台运行模式。
    • docker run -d 容器名 命令。
      在这里插入图片描述

    注意:
    docker容器后台运行,就必须有一个前台进程!,原因如下:
    在这里插入图片描述

    不过像mysql,redis这些后台服务器,最好式后台守护式启动!
    在这里插入图片描述


    # 查看容器日志
    docker logs 容器ID
    
    • 1
    • 2

    一般那个容器出现问题了,就要查看日志去:
    在这里插入图片描述


    # 查看容器内的进行进程情况
    docker top 容器ID
    
    • 1
    • 2

    在这里插入图片描述


    # 查看容器内部细节 inspect检查审阅的意思。
    docker inspect 容器ID
    
    • 1
    • 2

    在这里插入图片描述


    进入正在运行的容器,如何再交互式访问该容器:

    # 再次以交互式方式访问正在运行的容器ID , 以下两个命令都可以:
    docker exec -it 容器ID /bin/bash
    docker attach 容器ID
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    attach 和 exec的区别:
    在这里插入图片描述
    工作中,一般使用docker exec命令,这样退出容器终端,就不会导致容器停止。

    7.3.5 容器备份的常用命令


    从容器内拷贝文件到主机上:

    # 从容器内拷贝文件到主机上
    docker cp 容器ID:容器内路径 目的主机路径
    
    • 1
    • 2

    容器的导入和导出:
    在这里插入图片描述

    # 将容器导出,不指定路径的情况下默认导出再当前文件夹下面
    # 相当于将整个容器备份了。
    docker export 容器ID > 文件名.tar
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    # 将备份的tar文件,导入成一个镜像文件:
    cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
    # 案例:
    cat abc.tar | docker import - itholmes/ubuntu:1.0.0
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    8. 镜像的分层概念


    镜像的概念:
    在这里插入图片描述

    分层的镜像效果:
    在这里插入图片描述

    这就涉及到了UnionFS(联合文件系统),Union文件系统是Docker镜像的基础。
    在这里插入图片描述

    特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。一层层的叠加。


    docker镜像加载原理:

    • 了解rootsf 和 bootfs。
      在这里插入图片描述

    为什么平时安装的虚拟机centos都是好几个G,而docker才200M?

    • docker是基于容器的虚拟化,仅包含业务运行所需要的runtime环境,Centos/Ubuntu基础镜像仅170M;宿主机可以部署很多很多容器。
    • 对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,这也就为什么像vim的一些命令没有安装的原因。
      在这里插入图片描述

    在这里插入图片描述


    为什么Docker镜像要采用这种分层结构?
    在这里插入图片描述

    容器层 与 镜像层 :

    • docker镜像层都是只读的,容器层是可写的。
      在这里插入图片描述
      在这里插入图片描述

    9. commit 提交 容器


    如何在容器内部安装vim?

    # 1. 先交互式运行容器
    docker run -it ubuntu
    # 2. 更新包管理工具(一定想着更新一下包管理工具)
    apt-get update
    # 3. 安装vim
    apt-get install vim
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    docker commit作用就是提交容器副本使之成为一个新的镜像:

    # 提交格式如下:
    docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
    
    • 1
    • 2

    在这里插入图片描述

    我们给ubuntu容器内部安装vim,这样就相当于又加了一层镜像一层层的叠加,最后commit成为一个镜像。效果如下:
    在这里插入图片描述

    10. 本地镜像发布到阿里云上


    本地镜像发布到阿里云的流程:
    在这里插入图片描述


    将本地镜像推送到阿里云的步骤:

    第一步:进入阿里容器镜像服务控制台。

    第二步:进入个人实例,先创建命名空间,在创建镜像仓库。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    第三步:按照阿里云生成的命令进行相关操作。
    在这里插入图片描述

    将镜像推送到阿里云仓库,就走上图的第3个步骤:
    在这里插入图片描述

    从阿里上面拉去镜像,执行上图的第2个步骤:
    在这里插入图片描述

  • 相关阅读:
    保险行业大洗牌,250万线下从业人员消失的背后逻辑
    【ARM Coresight 系列文章 3.3 - ARM Coresight JTAG 详细介绍】
    【基础篇】二、Flink的批处理和流处理API
    深入理解与使用go之中间件--实现
    代码随想录算法训练营第五十六天 | 动态规划 part 14 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和(dp)
    24年计算机等级考试22个常见问题解答❗
    Mybatis的一对一和一对多的标签介绍
    4.查询用户的累计消费金额及VIP等级
    【Java面试】Java有几种文件拷贝方式,哪一种效率最高?
    Spring Authorization Server 实现授权中心
  • 原文地址:https://blog.csdn.net/IT_Holmes/article/details/126482435