Docker 是什么


我们常常说,“在我电脑上跑的好好的啊!怎么你这就不行了?”

由于各式各样的环境配置,总是能导致我们辛辛苦苦写出来的代码,遇到各种问题。

虚拟机是个不错的解决方案。然而虚拟机是一个完整的操作系统,需要为它开辟指定的内存和磁盘,这些系统资源并不会因为你的服务没有占用而释放,同时,也因为是一个完整的操作系统,启动必然很慢。

后来 linux 开发出了 LXC(Linux Containers) 技术,所谓的内核容器虚拟化技术。它通过 linux 内核提供的 cgroups 和 namespace 特性,能很好的实现容器虚拟化。

那么 cgroups 和 namespace 又是什么东西呢?这里先不说。

Docker 的早期版本中,LXC 作为底层架构的一个模块,用来创建容器,现在用的则是自己开发的 libcontainer 。无论是 LXC 还是 libcontainer ,都离不开 cgroup 和 namespace。

Docker 的主旨是 BUILD,SHIP,RUN ,即构建镜像,装进仓库,启动镜像。通常对应三个命令:

docker build docker pushdocker run

Docker 相比传统的虚机,能用更少的资源、更小的体积、更方便的操作以及更快的速度启动我们的服务。

Docker 单机版安装(Linux 版)


内核版本及硬件平台(hardware-platform)

➜  ~ uname -ir4.18.0-147.5.1.el8_1.x86_64 x86_64

操作系统发行版本

➜  ~ lsb_release -aLSB Version:    :core-4.1-amd64:core-4.1-noarchDistributor ID: CentOSDescription:    CentOS Linux release 8.1.1911 (Core)Release:        8.1.1911Codename:       Core

Docker 提供社区版和 pro 版本,分别叫做 CE(Community Edition) 和 EE(Enterprise Edition),我们肯定选 CE,毕竟 EE 可是要收费的。

0. 卸载 Docker

如果之前没有安装过 Docker ,这一步可直接忽略。我会先卸载,再重新安装一次。

ps:如果只有 yum ,需要将下述命令的 dnf 改成 yum

# 官方给的删除方案sudo dnf remove docker                   docker-client                   docker-client-latest                   docker-common                   docker-latest                   docker-latest-logrotate                   docker-logrotate                   docker-ce

这个时候,我们需要再看下还有没有未删除的:

➜  ~ sudo dnf list installed  | grep dockerRepository epel is listed more than once in the configurationdocker-ce-cli.x86_64                        1:19.03.8-3.el7                                  @docker-ce-stable

可以看到,还有 cli (当然你可以不删除),这里我把它也删掉:

sudo dnf -y remove docker-ce-cli

如果你想删除的十分彻底,你甚至可以这样做(请务必保证你知道你在干什么)

# 这会把你之前下载的镜像、容器、网络、卷等等,一起干掉,请务必小心!!!sudo rm -rf /var/lib/docker# 有关 docker 的一些配置,如 registry mirror, 登录信息等sudo rm -fr /etc/dockersudo rm -fr ~/.docker

到这里, 你机器上有关 docker 的东西就都删除完毕了。

1. 设置 docker 源(非必须)

我们为什么要设置源,因为这能让我们安装的更加快速。

# yum 用户请安装 yum-utils , 可以提供 yum-config-managersudo yum install -y yum-utils

这里我们使用 阿里云 docker-ce.repo

sudo dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo​# yum 用户这样操作:sudo yum-config-manager  --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  sudo dnf makecache && sudo yum makecache  # 查看安装的源 dnf repolist  # 或者  yum repolist

2. 安装 Docker

Docker 官方提供了三种安装方式:

  • 通过 docker repo 安装(推荐)
  • 下载 RPM package 安装
  • 通过脚本安装

这里我们使用第一种安装方式,后两种请参考 这里


查看 Dokcer 版本

➜  ~ dnf list docker-ce --showduplicates | sort -r | head -n 3docker-ce.x86_64            3:19.03.8-3.el7                     docker-ce-stabledocker-ce.x86_64            3:19.03.7-3.el7                     docker-ce-stable​➜  ~ dnf list docker-ce-cli --showduplicates | sort -r | head -n 3docker-ce-cli.x86_64              1:19.03.8-3.el7               docker-ce-stabledocker-ce-cli.x86_64              1:19.03.7-3.el7               docker-ce-stable

安装 Docker 的指定版本

我们先按照官网给的步骤走一遍:

# 这里注意下 docker ce 和 cli 的版本,去冒号 : 和中划线 - 之间的部分, 我这里选的 19.03.8sudo dnf -y install docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io...Installed:docker-ce-3:19.03.8-3.el7.x86_64  docker-ce-cli-1:19.03.8-3.el7.x86_64   libcgroup-0.41-19.el8.x86_64

使用了阿里云的 repo 后,安装一下子快乐起来,很开心。

可以看到,我们安装了

  • docker-ce-3:19.03.8-3.el7.x86_64
  • docker-ce-cli-1:19.03.8-3.el7.x86_64
  • libcgroup-0.41-19.el8.x86_64

3. Docker 开机自启动

这个时候,如果我们运行 docker version ,会提示 docker daemon 无法连接。因为 Docker 是 CS 架构,docker daemon 此时还未启动。

# 启动 docker daemonsudo systemctl start dockersudo systemctl status docker # 此时可以看到 docker 处于 active(running) 状态# 设置开机自启动sudo systemctl enable docker

Docker 验证

sudo docker run hello-world

输出了一大堆东西,可是我们还是看到了 Hello from Docker! 字样,说明我们 Docker 已经可以正常工作了。

docker run 这个命令,事实上做了两个动作

  • docker pull : 发现没有 hello-world 镜像时,先 pull 镜像,然后再 run
  • docker run : 运行 hello-world 镜像

4. 非 root 账号使用 Docker

docker 会创建 docker group,我们可以把自己加入到该用户组,以避免通过 root 来使用 docker

# 当前所在组groupsdylan wheel nginx​# 查看 docker 用户组是否已存在sudo cat /etc/group | grep docker​# 把当前用户加入 docker 组sudo usermod -aG docker $USER​# 更新用户组newgrp docker​# 再次查看,已经计入了 docker 用户组groupsdocker wheel nginx dylan

通过 docker version 查看,版本为 19.03.8 ,完美。

➜  ~ docker versionClient: Docker Engine - Community Version:           19.03.8​Server: Docker Engine - Community Engine:  Version:          19.03.8

至此,Docker 安装就结束了。

5. 镜像加速

如果你使用阿里云,可以在 这里 找到你的镜像加速专属地址:

bce21c09b82fa388206b4d2b282bbf53.png

其他镜像加速地址:

  • 七牛云: https://reg-mirror.qiniu.com
  • 中科大: https://docker.mirrors.ustc.edu.cn
  • 网易云: https://hub-mirror.c.163.com
  • 腾讯云: https://mirror.ccs.tencentyun.com

Links

阿里云开源镜像站 : 这个可以说很良心了,基本上涵盖了国外的很多软件,更新也很及时,deserve it。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐