1、全网最详细Docker入门级教程

目录

1、Docker概念

2、为什么需要容器?

2.1、面临的问题

2.2、Docker虚拟化容器的价值

3、Docker的组成部分

4、Docker的体系架构

 5、容器的应用场景

6、Docker资源汇总

 7、Docker版本介绍

8、安装Docker

 8.1、安装Linux操作系统

8.2、使用YUM方式安装Docker

8.3、使用二进制包方式安装Docker


1、Docker概念

Docker 是一个开源的容器运行时软件(容器运行时是负责运行容器的软件),基于 Go 语言编写,并遵从 Apache2.0 协议开源。

Docker可以让开发者打包自己的应用以及依赖到一个轻量的容器中,然后发布到任何流行的Linux系统上(docker主要理念:一次封装随处运行)。

Docker的思想来源于集装箱,让容器与容器之间相互隔离,与系统相互隔离提高程序之间的安全,更重要的是容器性能开销极低。

2、为什么需要容器?

2.1、面临的问题

    在项目迭代开发和部署过程中,运维人员不可避免会遇到这些情况:同样的代码需要被 部署到不同的运行环境中;由于运行环境不同导致项目部署失败,无法正常运行。

    导致上述问题的原因可能不同。下面列举几种比较典型的原因。

  • 运行环境发生了变化。例如,在开发阶段,代码是运行在程序员的本地环境 或测试环境中的;而在生产环境中,代码则被切换到集群环境或云平台上了。
  • 代码的依赖发生了变化。例如,在开发阶段使用的是 JDK 1.7,而在生产环 境中使用的是JDK 1.8。
  • 操作系统发生了变化。例如:在开发阶段使用的是Redhat Linux,而在生产 环境中使用的是CentOS。
  • 随着系统架构不断变复杂,微服务架构得到了广泛的应用,这就要求每个功 能模块需要单独进行部署。图1-1展示了一个典型的微服务架构。

图1-1

  • 对于开发人员而言,除需要关注业务代码本身的实现外,还需要额外花费精 力去处理这种底层执行环境的问题。
  • 对于运维人员而言,需要考虑如何将开发人员新开发的业务代码不断集成与 发布。

    有没有一种办法能使得开发人员和运维人员只要关注他们需要关注的问题,而不需要关 注其他的问题呢?答案是有的——使用虚拟化容器技术。

    有了虚拟化容器技术,开发人员在业务开发过程中只需要关注业务代码的实现;而运维人 员也可以很方便地实现项目的持续集成与持续发布( CI/CD)。Docker是虚拟化容器技术中的 典型代表,也是云计算中的重点。

2.2、Docker虚拟化容器的价值
  • 从系统的架构层面上看:Docker 可以方便地支持并实现微服务架构,从而更 方便灵活地实现架构的变化和系统的扩展。同时,Docker虚拟化容器有助于DevOps 的落地,可以大大提升开发效率,加速迭代。
  • 从底层基础层面上看:利用Docker 虚拟化容器技术可以方便地实现系统的移 植,,帮助实现企业应用上云,让应用在自有数据中心和云端之间实现动态迁移。

随着云计算技术的不断发展,在产生Docker 虚拟化容器技术后,一批相关的虚拟化容 器管理技术也随之诞生,例如Kubernetes ( K8s)等。这样的工具极大地推动了技术的分工, 也极大地促进了技术和业务的创新。

3、Docker的组成部分

  • Docker客户端通常指Docker 提供的命令行工具,是Docker 最基本的用户接口。用户通过 Docker 客户端提交Docker指令,Docker守护进程接收并执行该指令。Docker 也有图形化的客户端工具
  • Docker守护进程(Daemon)在Docker宿主机上运行Docker,实际上运行的是 Docker守护进程。用户并不 直接和Docker守护进程交互,而是通过 Docker客户端的命令来和它进行交互
  • Docker镜像(images)一个Docker镜像是一个只读的模板。例如,一个Docker镜像可以包含一个 CentOS的操作系统、一个MySQL的数据库和一个Tomcat的应用服务器。 Docker镜像被用来创建Docker容器.Docker提供了一个简单的方式来构建一个 新的镜像或更新一个已经存在的镜像。用户也可以从镜像仓库下载其他人已经创 建好的Docker 镜像
  • Docker容器(container)通过Docker镜像可以创建Docker容器。Docker的容器可以保存任何东西,而这 些东西是运行一个应用所必需的。可以把.Docker 容器看成是一个虚拟机。 Docker容器可以被运行、开启、停止、移动和删除。每一个容器都是一个分离 的、安全的应用平台。Docker容器是Docker的运行组件
  • 镜像仓库(Repository)Docker的镜像仓库用于保存Docker镜像,它可以是公共的存储地方,也可以是 私有的存储地方。 1、公共的镜像仓库由Docker Hub提供,它提供了一个用户可以使用的已有镜 像的集合。这些集合中的镜像可以是你自己创建的,也可以是别人创建的。 2、私有的镜像仓库需要自己在私有环境中搭建,例如在企业内网中自行搭建。 Harbor是一个典型的私有的镜像仓库

最大的公开仓库为docker hub:https://hub.docker.com

国内的公开仓库包括:阿里、网易、中科大

4、Docker的体系架构

    Docker是一个客户端服务器(Client-Server)架构。Docker 客户端和Docker守护进 程交流,而Docker守护进程是运作Docker 的核心,起着非常重要的作用(如构建、运行和分 发Docker容器等)。

    我们在使用Docker 创建容器时需要有镜像。镜像是一个只读的模板。而存放镜像的地 方叫作“镜像仓库”。镜像仓库,可以是公有镜像仓库(例如官方提供的公有镜像仓库 Docker Hub),也可以是私有镜像仓库(例如 Harbor)。

    下图展示了Docker的体系架构

 5、容器的应用场景

    容器非常适合持续集成和持续交付(CI / CD)工作流程,开发人员在本地写代码推送到仓库,通过集成服务器拉取代码后并使用 Docker 封装成镜像,镜像推送到测试环境中,并执行自动或手动测试。测试完成后,将镜像推送到生产环境部署

6、Docker资源汇总

  • Docker 官方主页:https://www.docker.com
  • Docer 官方博客::https://blog.docker.com/
  • Docker 官方文档:https://docs.docker.com/
  • Docker Cloud(云平台文档): https://cloud.docker.com
  • Docker Hub: https://hub.docker.com
  • Docker Hub备用地址:https://hub-stage.docker.com/
  • Docker 常见问题:https://docs.docker.com/engine/faq/

 7、Docker版本介绍

     Docker 从 1.17.0 版本之后分为:

  • CE(Community Edition: 社区版)免费,功能有限,不提供官方技术支持。
  • EE(Enterprise Edition: 企业版)收费,功能全面,提供官方技术支持。

8、安装Docker

    Docker 实现虚拟化的本质是:在已经运行的Linux中创建了一个逻辑隔离的运行环境。 因此,其执行效率几乎等同于宿主机的 Linux主机。

    Docker必须部署在Linux系统上。如果想在其他系统(如Windows)上部署Docker,则 需要先安装一个虚拟 Linux环境。下图列举了本案例所使用的实验环境。

 8.1、安装Linux操作系统

略...

8.2、使用YUM方式安装Docker

    YUM的全称是Yellow dogUpdater Modified。利用YUM方式可以很方便地添加、删 除和更新Linux系统的程序包,并且能够自动解决包的依赖性问题。使用 YUM也能够方便地 管理大量的系统更新问题。一般使用YUM方式需要连接外部的网络。

(1)为了验证虚拟机是否可以访问外部的网络,这里输入以下的命令访问百度主页。

[root@centos7-6 ~]# ping www.baidu.com
PING www.a.shifen.com (183.2.172.42) 56(84) bytes of data.
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=29 ttl=128 time=9.29 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=30 ttl=128 time=10.5 ms
64 bytes from 183.2.172.42 (183.2.172.42): icmp_seq=31 ttl=128 time=10.6 ms

(2)执行以下命令使用YUM方式安装Docker。

[root@centos7-6 ~]# yum -y install docker

(3)安装完成后的界面如下所示。

已安装:
  docker.x86_64 2:1.13.1-209.git7d71120.el7.centos                                                                                    

作为依赖被安装:
  atomic-registries.x86_64 1:1.22.1-33.gitb507039.el7_8       container-selinux.noarch 2:2.119.2-1.911c772.el7_8                     
  container-storage-setup.noarch 0:0.11.0-2.git5eaf76c.el7    containers-common.x86_64 1:0.1.40-11.el7_8                             
  docker-client.x86_64 2:1.13.1-209.git7d71120.el7.centos     docker-common.x86_64 2:1.13.1-209.git7d71120.el7.centos                
  fuse-overlayfs.x86_64 0:0.7.2-6.el7_8                       fuse3-libs.x86_64 0:3.6.1-4.el7                                        
  oci-register-machine.x86_64 1:0-6.git2b44233.el7            oci-systemd-hook.x86_64 1:0.2.0-1.git05e6923.el7_6                     
  oci-umount.x86_64 2:2.5-3.el7                               python-dmidecode.x86_64 0:3.12.2-4.el7                                 
  python-pytoml.noarch 0:0.1.14-1.git7dea353.el7              python-syspurpose.x86_64 0:1.24.53-1.el7.centos                        
  slirp4netns.x86_64 0:0.4.3-4.el7_8                          subscription-manager.x86_64 0:1.24.53-1.el7.centos                     
  subscription-manager-rhsm.x86_64 0:1.24.53-1.el7.centos     subscription-manager-rhsm-certificates.x86_64 0:1.24.53-1.el7.centos   

完毕!
[root@centos7-6 ~]# 

(4)执行以下命令启动Docker服务和开机自启。

[root@centos7-6 ~]# systemctl start docker.service
[root@centos7-6 ~]# systemctl enable docker.service

(5)执行以下命令确定Docker的版本。

[root@centos7-6 ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7d71120/1.13.1
 Built:           Wed Mar  2 15:25:43 2022
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-209.git7d71120.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7d71120/1.13.1
 Built:           Wed Mar  2 15:25:43 2022
 OS/Arch:         linux/amd64
 Experimental:    false

    从上面信息可以看到,Docker分为Client 端和 Server端,当前安装的Docker是1.13.1版 本。

8.3、使用二进制包方式安装Docker

    使用YUM方式安装Docker非常简单,但需要连接外部的网络。而在实际的企业生产环 境中,通常不能直接访问外部的网络。这时可以使用Docker 官方提供的二进制包进行Docker 的离线安装。下图展示的是Docker官方提供的二进制包下载网页。

(1)安装wget下载工具。

[root@centos7-6 ~]# yum -y install wget

(2)下载Docker安装包。

  • 地址:https://download.docker.com/linux/static/stable/x86_64/
[root@centos7-6 ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz

(3)使用tar命令解压缩Docker二进制安装包。

[root@centos7-6 ~]# tar -zxvf docker-20.10.9.tgz

(4)查看Docker二进制包提供的执行命令。

[root@centos7-6 ~]# ls docker
containerd  containerd-shim  containerd-shim-runc-v2  ctr  docker  dockerd  docker-init  docker-proxy  runc

 (5)将Docker的可执行命令复制到“/usr/bin”目录下。

[root@centos7-6 ~]# cp docker/* /usr/bin/

(6)执行以下命令启动Docker服务。启动成功后输出日志信息如下所示。

[root@centos7-6 ~]# /usr/bin/dockerd
INFO[2023-11-20T15:41:28.369015828+08:00] Starting up                                  
WARN[2023-11-20T15:41:28.381360490+08:00] could not change group /var/run/docker.sock to docker: group docker not found 
INFO[2023-11-20T15:41:28.389154362+08:00] libcontainerd: started new containerd process  pid=10317
INFO[2023-11-20T15:41:28.389270573+08:00] parsed scheme: "unix"                         module=grpc
INFO[2023-11-20T15:41:28.389311029+08:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2023-11-20T15:41:28.389358570+08:00] ccResolverWrapper: sending update to cc: {[{unix:///var/run/docker/containerd/containerd.sock  <nil> 0 <nil>}] <nil> <nil>}  module=grpc
INFO[2023-11-20T15:41:28.389378858+08:00] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2023-11-20T15:41:28.608666397+08:00] starting containerd                           revision=5b46e404f6b9f661a205e28d59c982d3634148f8 version=v1.4.11

(7)新开启一个命令窗口,执行以下语句查看 Docker 的版本信息(包括 Docker 客 户端与Docker服务器端的版本),可以看到Docker的版本为20.10.9

[root@centos7-6 ~]# /usr/bin/docker version
Client:
 Version:           20.10.9
 API version:       1.41
 Go version:        go1.16.8
 Git commit:        c2ea9bc
 Built:             Mon Oct  4 16:03:22 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.9
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.8
  Git commit:       79ea9d3
  Built:            Mon Oct  4 16:07:30 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.4.11
  GitCommit:        5b46e404f6b9f661a205e28d59c982d3634148f8
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

(8)在“/etc/systemd/system/docker.service”文件中输入以下内容:

[root@centos7-6 ~]# vim /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

(9)在创建“/etc/systemd/system/docker.service”文件后,需要给该文件添加可 执行权限。

[root@centos7-6 ~]# chmod u+x /etc/systemd/system/docker.service

(10)启动Docker,并设置Docker为开机自启模式。

[root@centos7-6 ~]# systemctl daemon-reload 
[root@centos7-6 ~]# systemctl start docker.service 
[root@centos7-6 ~]# systemctl enable docker.service

    至此,通过使用二进制包完成了Docker安装。不管使用YUM方式还是二进制包方式, 在安装完成后,Docker的使用方式是完全一样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值