资讯详情

狂神 docker知识点汇总

Docker基础知识

有狂神视频做笔记。适合有狂神视频。Linux基础知识(必要)和SpringBoot。视频地址:https://www.bilibili.com/video/BV1og4y1q7M4?p=6&spm_id_from=pageDriver


文章目录

  • Docker基础知识
  • 一、docker的学习路线
  • 二、Docker概述
    • 1、Docker概述
    • 2、Docke历史
    • 3、Docke能干嘛
  • 三、Docker安装
    • 1、Docker术语
    • 2、安装Docker
    • 2、配置docker阿里云镜像加速器(博主没有服务器,没有配置)
    • 3、回顾hello-word的流程
    • 4.底层工作原理
  • 四、Docker的常用命令
    • 1、帮助命令
    • 2、镜像命令
    • 3、容器命令
    • 4.其他常用命令
    • 5、命令小结
    • 6、作业练习
    • 7、可视化
  • 五、Docker镜像讲解
    • 什么是镜像?
    • 2、Docker镜像加载原理
    • 3、分层理解
    • 4、commit镜像
  • 六、容器数据卷
    • 1.容器卷是什么?
    • 2.使用数据卷
    • 3、**实战:安装MySQL**
    • 4、**具名挂载和匿名挂载**
    • 5、**初识Dockerfile**
    • 6、**数据卷容器**
  • 七、DockerFile
    • 1、DockerFile介绍
    • 2、DockerFile构建过程
    • 3、DockerFile常用指令
    • 3、实战测试
    • 4、实战:Tomcat镜像
    • 发布自己的镜像
    • 6.发布到阿里云镜像服务
    • 7、小结
  • 八、Docker网络
    • 1、理解Docker0(docker0 docker网络核心)
    • 2、--link
    • 3定义网络
    • 4、网络连通
    • 实战:部署Redis集群
  • ...更新中


一、docker的学习路线

  1. Docker概述
  2. Docker安装
  3. Docker命令
    • 镜像命令
    • 容器命令
    • 操作命令
  4. Docker镜像
  5. 容器数据卷
  6. DockerFile
  7. Docker网络原理
  8. IDEA整合Docker
  9. Docker Compose
  10. Docker Swarm
  11. CI/CD Jenkine

二、Docker概述

1、Docker概述

产品:开发–上线 两套环境! 应用环境,应用配置! 开发 — 运维:

  • (1)问题:
    • 我可以在我的电脑上运行!你不能!
    • 版本更新导致服务器不可用。对于运维,考验非常大。(开发和运维)
    • 配置环境很麻烦,每台机器都要部署环境(集群Redis、ES、Hadoop…)!费时费力。
    • 以前的jar除了发布项目 jar ,还得需要 环境(Redis MySQL jdk ES) ,每个人都需要在服务器上安装和配置。配置太麻烦了,不能跨平台。因此,项目能否带来环境安装和包装!
    • 传统:程序猿包装jar,运维部署环境(需要自己配置,很麻烦)、配置等。
    • 现在:程序猿包装jar,部署上线(大部分官方环境配置都写好了,只需要安装),一套流程就完成了。(以前两个人做的事现在可以一个人做)。
  • (2)解决方案
    • Docker对上述问题提出了解决方案。
    • 安卓程序使用流程:
      • 安卓程序猿 —> apk应用 —>向应用商店发布 — > 张三使用 —>下载apk即可使用。
    • Docker使用过程(类似于安卓):
      • 程序猿 —> 编写代码并提供环境 —>带环境(也称镜像)的包装项目。 — > 发布到Docker仓库()商店—>下载我们的镜像操作。
  • (3)Docker的思想就来自与集装箱-
    • 假设有多个应用程序需要防止端口冲突,端口号需要交叉使用
    • 隔离:Docker核心思想!包装箱!每个盒子都是相互隔离的。不需要考虑端口冲突等问题。
    • Docker服务器可以通过隔离机制使用到极致!
  • (3)所有的技术都是由于一些问题,我们需要解决,才能学习!

2、Docke历史

  • 2010年,几个搞IT年轻人在美国成立了公司 dotCloudk,做一些pass云计算服务和LXC(虚拟机) 相关容器技术!Linux虚拟机技术。他们把自己的技术(容器化技术)命名为Docker !
  • Docker刚出生的时候,没有引用|关注行业! dotCloud ,活不下去!
  • 所以提出了开源。开发源代码!2013年, Docker开源!Docker越来越多的人发现了docker优点! Docker每月更新一个版本!2014年4月9日, Docker1.0发布!
  • Docker为什么这么火?
    • 很轻在出来之前,我们都过。!虚拟机:在window中装一个 Vmware ,通过这个软件,我们可以虚拟一台或多台电脑!笨重!占用内存!虚拟机也属于虚拟化技术, Docker 容器技术,也是虚拟化技术!
      • vm : linux centos原生镜像 (相当于电脑! ) 若需要隔离,则需要打开多机! 占内存几个G 运行几分钟
      • docker: 镜像相互隔离,镜像相互隔离 (核心环境4m jdk环境 mysq1环境) 十分的小巧,运行镜像就可以了! 小巧! 内存M或KB级别 秒级启动!
      • 如果电脑不好,几台虚拟电脑会卡住,但是Docker不会。
  • 聊聊Docker
    • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
    • Docker使用文档地址
    • 存放镜像仓库地址 :与get类似
  • 使用场景
    • Web 应用的自动化打包和发布。
    • 自动化测试和持续集成、发布。
    • 在服务型环境中部署和调整数据库或其他的后台应用。
    • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

3、Docke能干嘛

    • 虚拟化技术特点:
    • 传统虚拟机,虚拟出硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
    • Docker容器内的应用直接运行在,容器是没有自己的内核的,也没有虚拟硬件。
      • 传统方式:一堆的帮助文档,参考帮助文档,安装环境和程序
      • 使用Docker之后:一键运行大包成镜像,发布测试。
      • 使用Docker之后,我们的部署应用就像搭积木一样。
        • 将当前的环境、应用打包后,发现那个那个环境需要升级,就将当前包进行升级在打成包即可。
        • 项目打包成一个镜像,需要扩展。服务器A 需要扩展,服务器B,运行服务器A,B就被扩展起来了(B上可以扩展其他镜像),而且容器与容器直接也能够进行通信。
      • 在容器化之后,我们的开发,测试环境都是高度一致的。不会出现,自己电脑能运行,别人电脑不能运行的情况。
      • Docker是内核级别的虚拟机(直接运行在内核之上的),可以在一个物理机上运行很多的容器实例!服务器的性能可以被压榨到极致。

三、Docker安装

1、Docker术语

  • :Docker镜像好比是一个模板,可以通过这个模板来创建容器服务。如:tomcat镜像==>通过run运行==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)。
  • : Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。容器可以停止,删除等一些基本命令。目前就可以把这个容器理解为就是一个建议的Linux系统。
  • :仓库就是存放镜像的地方。仓库分为私有和共有仓库。Docker Hub 默认是国外的。阿里云…都要容器服务器(配置镜像加速)

2、安装Docker

    • 需要会一点点耳的Linux的基础.
    • CentOS7镜像
    • 使用Xshell(或者FinalShell)连接远程服务器进行操作!
    • Xshell连接到Linux环境后,查看当前环境
# 系统内核是3.10以上的
[root@haodop1 ~]# uname -r
3.10.0-957.el7.x86_64
    • Xshell连接到Linux环境后,查看当前系统
# 存储系统信息的文件 /etc/os-release 
[root@haodop1 ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
    • centOS安装Docker官网
    • 卸载旧版本的Docker
    #1.卸载旧版本的Docker
    [root@haodop1 ~]# yum remove docker \
    >                   docker-client \
    >                   docker-client-latest \
    >                   docker-common \
    >                   docker-latest \
    >                   docker-latest-logrotate \
    >                   docker-logrotate \
    >                   docker-engine
    
    • 需要的安装包
    #2.安装需要的安装包
    [root@haodop1 ~]# yum install -y yum-utils
    
    • 配置镜像的下载路径
    #3、默认的Docker自己的仓库镜像地址,国外的 下载速度慢
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    #阿里云的仓库镜像地址,推荐这个
    yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 更新软件包索引
    [root@localhost ~]# yum makecache fast
    已加载插件:fastestmirror, langpacks
    Loading mirror speeds from cached hostfile
     * base: mirrors.tuna.tsinghua.edu.cn
     * extras: mirrors.tuna.tsinghua.edu.cn
     * updates: mirrors.tuna.tsinghua.edu.cn
    base                                                                                                                       | 3.6 kB  00:00:00     
    docker-ce-stable                                                                                                           | 3.5 kB  00:00:00     
    extras                                                                                                                     | 2.9 kB  00:00:00     
    updates                                                                                                                    | 2.9 kB  00:00:00     
    元数据缓存已建立
    
    • 安装docker的相关内容
    #4.安装docker相关的内容(最新版) docker-ce 社区版(推荐) ee 企业版
    #安装时 中途会提示你是否安装 需要输入 y 确定
    yum install docker-ce docker-ce-cli containerd.io
    #安装时指定版本
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    
    • 启动docker
    	#5.启动docker,docker相当于一个服务了
    	systemctl start docker
    	# 设置开机自启动
    	systemctl enable docker
    
    • 查看docker版本
    #6.查看docker版本
    [root@localhost ~]# docker version 
    Client: Docker Engine - Community
     Version:           20.10.8  #版本号
     API version:       1.41
     Go version:        go1.16.6
     Git commit:        3967b7d
     Built:             Fri Jul 30 19:55:49 2021
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community  #社区版
     Engine:
      Version:          20.10.8
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.16.6
      Git commit:       75249d8
      Built:            Fri Jul 30 19:54:13 2021
      OS/Arch:          linux/amd64  #Linux系统
      Experimental:     false
     containerd:
      Version:          1.4.9
      GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
     runc:
      Version:          1.0.1
      GitCommit:        v1.0.1-0-g4144b63
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
    • 启动测试helloWord
    # 7.启动 官方的 hello-world 镜像
    [root@localhost ~]# docker run hello-world
    Unable to find image 'hello-world:latest' locally  #找不到hello-world镜像 尝试去下载
    latest: Pulling from library/hello-world #远程拉取镜像
    2db29710123e: Pull complete 
    Digest: sha256:393b81f0ea5a98a7335d7ad44be96fe76ca8eb2eaa76950eb8c989ebf2b78ec0
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!  #docker已经安装成功了
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    
    • 查看所有镜像
    #8.查看下载的这个hello-word镜像
    [root@localhost ~]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    feb5d9fea6a5   26 hours ago   13.3kB
    
    • 了解卸载
     #1.卸载依赖
     sudo yum remove docker-ce docker-ce-cli containerd.io
     #2.删除资源
     sudo rm -rf /var/lib/docker
     sudo rm -rf /var/lib/containerd
    
    • docker的默认工作路径: /var/lib/docker

2、配置docker阿里云镜像加速器(博主没有服务器,就没配置)

  • 进入阿里云官网,登陆阿里云
  • 搜索容器镜像服务
  • 找到镜像服务
  • 配置使用(需要使用自己的容器服务进行加速)
    sudo mkdir -p /etc/docker
    sudo tee /etc/ docker/daemon. json <<-' EOF '
    { 
              
    "registry- mirrors": ["https://qiyb9988.mirror. aliyuncs. com"]
    }
    EOF
    sudo systemct1 daemon-reload
    sudo systemct1 restart docker
    

3、回顾hello-word的流程

  • 命令下载流程
  • 下载镜像流程图
  • 找不到镜像抛出错误
    #镜像找不到错误
    [root@localhost docker]# docker run 666666666
    Unable to find image '666666666:latest' locally
    docker: Error response from daemon: pull access denied for 666666666, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
    See 'docker run --help'.
    

4、底层工作原理

    • Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socker从客户端访问!Docker Server接收到Docker-Client的指令,就会执行这个指令!
    • 1、Docker比虚拟机更少的抽象层
    • 2、docker利用宿主机的内核,VM需要的是Guest OS
    • 3、所以说,新建一个容器的时候, docker不需要想虚拟机一样重新加载一个操作系统内核,避免引导。虛拟机是加载GuestOS ,分钟级别的,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!、
    • 4、Docker和VM的对比如下:

四、Docker的常用命令

命令官方文档地址

1、帮助命令

  • [root@localhost docker]# docker version 
    
  • #显示镜像个数,镜像启动个数等情况
    [root@localhost docker]# docker info 
    
  • #显示某个命令的帮助文档
    [root@localhost docker]# docker 命令 --help
    [root@localhost docker]# docker images --help 
    Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
    List images
    Options:
      -a, --all             Show all images (default hides intermediate images)
          --digests         Show digests
      -f, --filter filter   Filter output based on conditions provided
          --format string   Pretty-print images using a Go template
          --no-trunc        Don't truncate output
      -q, --quiet           Only show image IDs
    

2、镜像命令

  • 查看所有本地的主机上镜像
    [root@localhost docker]# docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    feb5d9fea6a5   27 hours ago   13.3kB
    #解释:
    REPOSITORY  镜像的仓库源
    TAG         镜像的标签
    IMAGE ID    镜像的id
    CREATED     镜像的创建时间
    SIZE        镜像的大小
    # 可选参数
    -a/--all 列出所有镜像
    -q/--quiet 只显示镜像的id
    #显示所有的镜像
    [root@localhost docker]# docker images -a
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    hello-world   latest    feb5d9fea6a5   27 hours ago   13.3kB
    #显示所有镜像的ID
    [root@localhost docker]# docker images -q
    feb5d9fea6a5
    #显示所有镜像的ID
    [root@localhost docker]# docker images -aq
    feb5d9fea6a5
    
    • 官网搜索镜像地址
    • 命令搜索
    [root@localhost docker]# docker search mysql
    NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   11461     [OK]       
    mariadb                           MariaDB Server is a high performing open sou…   4351      [OK]       
    mysql/mysql-server                Optimized MySQL Server Docker images. Create…   848                  [OK]
    
    #可选参数 -f, --filter 过滤条件 
     #过滤条件为STARS大于3000的 
    [root@localhost docker]# docker search mysql -f=STARS=3000
    NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql     MySQL is a widely used, open-source relation…   11461     [OK]       
    mariadb   MariaDB Server is a high performing open sou…   4351      [OK]       
    #过滤条件为STARS大于5000的 
    [root@localhost docker]# docker search mysql -f=STARS=5000
    NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql     MySQL is a widely used, open-source relation…   11461     [OK]  
    
    • 不指定版本默认下载最新版
      [root@localhost docker]# docker pull mysql
      Using default tag: latest     #如果不写tag默认就是latest
      latest: Pulling from library/mysql
      a330b6cecb98: Pull complete   #分层下载,docker image的核心-联合文件系统
      9c8f656c32b8: Pull complete 
      88e473c3f553: Pull complete 
      062463ea5d2f: Pull complete 
      daf7e3bdf4b6: Pull complete 
      1839c0b7aac9: Pull complete 
      cf0a0cfee6d0: Pull complete 
      1b42041bb11e: Pull complete 
      10459d86c7e6: Pull complete 
      b7199599d5f9: Pull complete 
      1d6f51e17d45: Pull complete 
      50e0789bacad: Pull complete 
      Digest: sha256:99e0989e7e3797cfbdb8d51a19d32c8d286dd8862794d01a547651a896bcf00c
      Status: Downloaded newer image for mysql:latest
      docker.io/library/mysql:latest   #下载来源的真实地址 
      #docker pull mysq l等价于 docker pull docker.io/library/mysql:latest
      
    • 指定版本下载指定版本的(必须存再改版本才能够下载,不存在不能下载,可在官网搜索镜像查找镜像版本信息)
      [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker pull mysql:5.7
      5.7: Pulling from library/mysql
      6ec7b7d162b2: Already exists
      fedd960d3481: Already exists
      7ab947313861: Already exists
      64f92f19e638: Already exists
      3e80b17bff96: Already exists
      014e976799f9: Already exists
      59ae84fee1b3: Already exists
      7d1da2a18e2e: Pull complete
      301a28b700b9: Pull complete
      529dc8dbeaf3: Pull complete
      bc9d021dc13f: Pull complete
      Digest: sha256:c3a567d3e3ad8b05dfce401ed08f0f6bf3f3b64cc17694979d5f2e5d78e10173
      Status: Downloaded newer image for mysql:5.7
      docker.io/library/mysql:5.7
      
    • 通过镜像id或者名称来删除
    #删除指定的镜像id
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id
    #删除多个镜像id
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id
    #通过镜像的名称删除镜像
    [root@localhost docker]# docker rmi mysql
    
    • 删除所有的镜像
    #删除全部的镜像id $(...) 代表参数信息 docker images -aq 获取所以镜像id
    [root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)
    

3、容器命令

#下载一个centOS镜像
[root@localhost ~]# docker pull centos

4、其他常用命令

锐单商城 - 一站式电子元器件采购平台