Docker 系列<一> Docker 安装


Docker 是什么

Github Docker

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

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

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

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

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

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

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

docker build 
docker push
docker run

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

Docker 单机版安装(Linux 版)

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

➜  ~ uname -ir
4.18.0-147.5.1.el8_1.x86_64 x86_64

操作系统发行版本

➜  ~ lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 8.1.1911 (Core)
Release:        8.1.1911
Codename:       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 docker
Repository epel is listed more than once in the configuration
docker-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/docker
sudo rm -fr ~/.docker

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

1. 设置 docker 源(非必须)

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

# yum 用户请安装 yum-utils , 可以提供 yum-config-manager
sudo 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 3
docker-ce.x86_64            3:19.03.8-3.el7                     docker-ce-stable
docker-ce.x86_64            3:19.03.7-3.el7                     docker-ce-stable

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

安装 Docker 的指定版本

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

# 这里注意下 docker ce 和 cli 的版本,去冒号 : 和中划线 - 之间的部分, 我这里选的 19.03.8
sudo 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 daemon
sudo systemctl start docker
sudo 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

# 当前所在组
groups
dylan wheel nginx

# 查看 docker 用户组是否已存在
sudo cat /etc/group | grep docker

# 把当前用户加入 docker 组
sudo usermod -aG docker $USER

# 更新用户组
newgrp docker

# 再次查看,已经计入了 docker 用户组
groups
docker wheel nginx dylan

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

➜  ~ docker version
Client: Docker Engine - Community
 Version:           19.03.8

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8

至此,Docker 安装就结束了。

5. 镜像加速

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

docker image 加速器

其他镜像加速地址:

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


文章作者: peifeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 peifeng !
 上一篇
Docker 系列<二> Docker 架构 Docker 系列<二>Docker 架构
上一篇文章我们介绍了 Docker 的安装,本文将深入到 Docker 内部,着重描述它的架构以及几个核心点。其中着重描述 docker container 网络的内部通信机制,告诉你 curl container api 时,网络做了什么事情。
2020-04-18
下一篇 
Middlewares -- Redis<完> Middlewares -- Redis<完>
当我们谈论 redis 时,我们在谈论什么?redis 的缓存, redis 的分布式锁,redis 的内存优化策略,redis 基于 LRU 的缓存策略,等等。本系列将逐一粗略涉足
2020-04-14
  目录