Docker 及 Docker Compose 安装及使用教程 (2020版)

本文提供了一份详尽的Docker及Docker Compose安装和使用教程,涵盖Docker的基本概念如镜像、容器、仓库,以及Docker的安装、镜像获取、容器管理和网络配置。同时,介绍了Docker Compose的安装和使用案例,展示了如何通过YAML文件定义和管理多容器应用。此外,还提到了Docker镜像加速、容器连接、Docker Hub个人仓库管理和DNS配置等内容。
摘要由CSDN通过智能技术生成

图文详细教程

1 Docker原理

  • 对 Docker 最简单并且带有一定错误的认知就是 “Docker 是一种性能非常好的虚拟机”。

    • 正如上面所说,这是有一定错误的说法。Docker 相比于传统虚拟机的技术来说先进了不少,
    • 具体表现在 Docker 不是在宿主机上虚拟出一套硬件(VMare VBox虚拟机都是需要虚拟硬件,需要占用内存和硬盘)后再虚拟出一个操作系统,
    • 而是让 Docker 容器里面的进程直接运行在宿主机上(Docker 会做文件、网络等的隔离),
    • 这样一来 Docker 会 “体积更轻、跑的更快、同宿主机下可创建的个数更多”。
  • Docker 中有三个核心概念:Image、Container、Repository。

    • Image 镜像:

      • 有领“好人卡”倾向的广大程序猿一定对 镜像 的概念不会陌生。
      • 但和 windows 的那种 iso 镜像相比,Docker 中的镜像是分层的,可复用的,
      • 而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 git 仓库的区别)。
    • Container 容器:

      • 容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。
      • 依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,
      • Container 就是一个与宿机隔离 “容器”。容器可宿主机之间可以进行 port、volumes、network 等的通信。
      • 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
      • 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
    • Repository 仓库:

      • Docker 的仓库和 git 的仓库比较相似,拥有仓库名、tag。
      • 在本地构建完镜像之后,即可通过仓库进行镜像的分发。
      • 常用的 Docker hub 有 https://hub.docker.com/ 、 https://cr.console.aliyun.com/ 等。
      • 以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,16.04, 18.04。
      • 我们可以通过 ubuntu:16.04,或者 ubuntu:18.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如 ubuntu,那将视为 ubuntu:latest。
      • 仓库名经常以 两段式路径 形式出现,比如 jwilder/nginx-proxy,前者往往意味着 Docker Registry 多用户环境下的用户名,后者则往往是对应的软件名。
    • 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,

    • 镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

2 Docker安装

  • Ubuntu虚拟机中安装docker:docker-ce docker-ce-cli docker-compose

  • docker全部安装完成后,镜像源修改中国的加速源地址,终端执行命令创建 sudo vi /etc/docker/daemon.json 文件,在其中输入如下内容。

      {
        "registry-mirrors": ["https://registry.docker-cn.com"]
      }
    
    • 然后输入:符号,输入wq保存退出
  • Ubuntu安装使用Docker注意:

    • Docker安装完成后,如果不修改源,网速不好,有时候启动或者执行命令会出现失败或者超时提示
    • 安装博文中提到卸载后重新安装,后面发现是网速问题,只需要新建daemon.json文件,添加中国源即可
    • 注意,有些命令需要使用sudo docker xxx xxx … 执行,直接docker执行会报错
    • 也可以将终端使用 su 回车 输入超级用户密码 回车 进入超级用户 显示符号位#
  • Docker拖取镜像速度慢的终极解决办法:

    • 上面daemon.json虽然添加了官方的加速源地址,电信速度还可以(有时也很慢),但是移动速度很慢,有时候超时或者失败
    • 推荐使用阿里云镜像,具体方法参考博文,docker下载镜像使用阿里云加速器
    • 具体步骤:
      • 1.注册阿里云账号,搜索容器镜像服务,然后进入
      • 2.镜像仓库里面新建一个镜像仓库
      • 3.左侧菜单栏有个镜像加速器,点开
      • 4.复制里面加速器地址,到daemon.json文件替换https://registry.docker-cn.com,保存退出
      • 5.依次执行命令:
        • sudo systemctl daemon-reload 重载daemon.json配置文件
        • sudo systemctl restart docker 重启docker服务
      • 此时下载速度已经可以达到你的宽带速度正常值,可以删除一个镜像,然后重新下载对比速度。
  • Docker安装注意事项:

    • Docker桌面版,WIN10系统只能专业版和企业版可以安装
    • 家庭版安装比较麻烦,需要视同toolbox工具或者修改注册表伪装为专业版骗过软件安装时候的检测
    • Docker安装在WIN10下面需要开启HyperV虚拟功能,该功能开启后会导致VMware和VirtualBox出错
    • 鉴于以上原因,不推荐在WIN10安装Docker,建议Ubuntu虚拟机服务器中安装
    • Win10安装可以具体参考我的QQ浏览器收藏夹中,python相关软件安装/docker安装,里面有家庭版和专业版安装收藏

3 镜像(Image)

3.1 获取镜像

  • Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。

    • 从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

      • docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
    • 具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

    • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。

    • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。

    • 对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

    • 比如:

      • docker pull ubuntu:18.04
        • 上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像,省略了官方用户名 library
        • 而镜像名称是 ubuntu:18.04 实际将会获取官方镜像 library/ubuntu 仓库源中获取标签为 18.04 的镜像
      • docker pull httpd 不指定版本,默认获取latest
      • docker pull tikazyq/crawlab:latest
        • 从DockerHub官方中的tikazyq用户获取crawlab镜像,版本为最新的latest
      • docker pull registry.cn-hangzhou.aliyuncs.com/crawlab-team/crawlab:latest
        • 镜像地址:registry.cn-hangzhou.aliyuncs.com
        • 仓库名:用户名/软件名
          • 用户名:crawlab-team
          • 软件名:crawlab
          • 标签:latest
          • 从下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。
          • 下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。
          • 并且下载结束后,给出该镜像完整的 sha256 的摘要,以确保下载一致性。
    • 镜像获取完成后,执行 docker images 即可看到本地所有的镜像
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97SjgG3P-1585754846132)(008_Docker容器/001_Docker获取镜像.png)]

  • 运行一个简单的容器,以ubuntu:18.04为基础镜像

    • docker run -it --rm ubuntu:18.04 /bin/bash
    • docker run 就是运行容器的命令,具体格式我们会在 容器 一节进行详细讲解,我们这里简要的说明一下上面用到的参数。
    • 参数 -it 实际是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
    • 参数 --rm 这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。
      • 我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
    • 参数 ubuntu:18.04 这是指用 ubuntu:18.04 镜像为基础来启动容器。
    • 参数 /bin/bash 放在镜像名后的是 命令,这里我们希望有个交互式 Shell 终端,因此用的是 bash
    • 改命令执行以后,就启动了一个ubuntu系统下的shell终端,然后我们可以终端操作
      • cat /etc/os-release 查看当前容器镜像系统版本信息,cat命令就是打开查看文件信息
      • ls 查看当前根目录下有哪些文件夹及文件
        - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5rqUq2iN-1585754846140)(008_Docker容器/002_以Ubuntu镜像运行一个容器.png)]
    • 最后我们通过 exit 命令退出了这个容器

3.2 查找拖取镜像

  • 查找镜像
    • Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/ 直接访问网速不好
    • docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务
    • 比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
    • docker search httpd
  • 拖去镜像(参考上面3.1)
    • docker pull httpd

3.3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值