Administrator
发布于 2024-06-04 / 22 阅读
0
0

docker 安装(CentOS7)

参考(写于 2024/6/7,请注意内容的时效性)

本文安装环境是 CentOS7,一般是企业用。个人虚拟机一般用 Ubantu(看个人习惯),Ubantu 安装可参考 docker 官网(优先),或者看本站另一篇文章 —— docker 安装(Ubantu)。

虚拟机安装(VMWare)请看本站另一篇文章。

docker手册:https://docs.docker.com/engine/install

菜鸟教程:https://www.runoob.com

一、什么是 docker

docker是开源的应用容器引擎,相比virtual machine更加轻量、更加便捷。docker 提出build once, run anywhere, configure once, run anywhere

docker 和 vm 架构对比:

使用VM需要安装Guest OS(即用户操作系统),而Docker Engine则运行在宿主机上,单单启动速度 docker 就甩了 vm 几条街。docker 还共享了底层二进制库文件更加轻量。

我们通过 docker 下载好镜像后,构建成我们应用容器。容器可以看作镜像的实例,类比 java:

Image container = new TomcatImage();

container 是我们通过 docker run 构建出来的容器,可以构建多份。和普通软件安装的最大区别,我体会最深的是 docker 的隔离性。普通软件安装一般会占用指定端口,要安装多份需要修改配置、修改端口,十分繁琐和易错;而 docker 安装,只要硬件资源够,我可以构建 10个、20个 mysql,无须关注配置,不用考虑环境变量冲突等问题。

我们要安装的是 Docker CE(Community Edition),也称为 docker Engine-community,是 Docker 的社区版。

二、docker 安装(CentOS7、root 用户)

非 root 用户安装,请看扩展。一般外包可能遇到,客户分配非 root 用户来部署程序。

1、脚本安装

请使用官网或者镜像源的脚本,进行安装。

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2、手动安装

2.1 卸载旧版本

注意:这里不是指卸载现有的 docker-ce,而是老版本的 docker,老版本因文件名变动和现有版本会冲突。而现有已安装了 docker-ce,再次运行 yum install docker-ce 是不会有问题的,如果已经是最新版本会提示已安装且 nothing to do。

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.2 安装前置:安装 yum-utils

yum-utils 提供了 yum-config-manager,我们需要用它来配置 yum 仓库,把 docker 仓库(镜像仓库)加到 yum 仓库,这样我们就能通过 yum 来安装 docker 了。

sudo yum install -y yum-utils
# 阿里云yum镜像源
sudo yum-config-manager --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清华大学yum镜像源(今天使用阿里云镜像源不知道为什么特别慢, 切换清华大学就好了)
$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

2.3 安装/更新 docker-ce

这里安装的是 Latest 版本,请看清官方的支持版本,特别是 CentOS7 2024.6.30 后就不维护的,官方最新版本不支持 CentOS7 也是合情合理的。指定版本安装,请看最后的扩展说明。

本次安装的是当前最新版 26.1.3,yum 信息可以看到安装包 114M,安装后 401M。

# 官方的安装命令, 有一个 docker-buildx-plugin, 感觉用不上我就没装了。 
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 个人使用安装命令
# ps:docker info, 可以看到 buildx 也安装上了...所以, 这两条命令本质应该是一样的。
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

3、启动 docker

sudo systemctl start docker
# 验证安装, 我的是当前最新版 26.1.3
sudo docker version
sudo docker run hello-world

三、docker 卸载

sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

镜像、容器、卷或自定义配置文件都不会自动删除,如果需要删除:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

四、扩展说明

1、docker 设置开机自启

systemctl start docker.service
systemctl enable docker.service

2、配置国内镜像源 docker registry(加快访问)

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置多个镜像源。Docker 官方和国内很多云服务商都提供了国内加速器服务,常用公共镜像源

拉取逻辑:优先使用 docker.io 官方源,获取不到则使用镜像源。某一个镜像源拉取不到镜像,会切换另一个镜像源。遇到官方源或者镜像源很慢,可手动指定镜像源地址如:ccr.ccs.tencentyun.com/library/nginx:latest

# 校验镜像地址是否可用
docker pull ccr.ccs.tencentyun.com/library/nginx:latest
docker pull ccr.ccs.tencentyun.com/library/hello-world:latest
docker pull <你的ID>.mirror.aliyuncs.com/library/nginx:latest

# 不可用, 2024/6/7
docker pull docker.nju.edu.cn/library/nginx:latest
docker pull reg-mirror.qiniu.com/library/nginx:latest
docker pull hub-mirror.c.163.com/library/nginx:latest
docker pull docker.mirrors.ustc.edu.cn/library/nginx:latest

# 注意: docker pull 显示 docker.io, 但实际上是某一个镜像站下载的。
# 不要以为都是 docker.io 下载的, 而镜像站没用。
$ docker pull tomcat:9.0.89-jre8
Digest: sha256:xxx
Status: Downloaded newer image for tomcat:9.0.89-jre8
docker.io/library/tomcat:9.0.89-jre8

阿里云需要配置个人的镜像地址,登录阿里云》容器镜像服务》镜像工具》镜像加速器,可以找到个人的地址。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ccr.ccs.tencentyun.com/",
						"https://<你的ID>.mirror.aliyuncs.com"]
}
EOF

# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证镜像是否配置成功:看到新增的 Registry Mirrors 表示成功了。
$ docker info
Registry Mirrors:
    https://docker.mirrors.ustc.edu.cn/

如果出现最坏的情况:我需要的 image 是新出的,所有镜像站都没有我想要的镜像,怎么办?请看第 5 点,镜像转存(转存到阿里个人镜像站)。

3、指定版本安装

3.1 列出并排序存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64            3:26.1.3-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:26.1.3-1.el7                     @docker-ce-stable
docker-ce.x86_64            3:26.1.2-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:26.1.1-1.el7                     docker-ce-stable 

3.2 通过完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-26.1.3。

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
# 本次安装的是 26.1.3, 如下. 
$ sudo yum install docker-ce-26.1.3 docker-ce-cli-26.1.3 containerd.io docker-buildx-plugin docker-compose-plugin

4、非 root 用户安装

服务器管理员安装(root 用户)或者将非 root 用户加入 sudoers(提权),安装完 docker 后,将非 root 用户加入 docker 用户组。如果是非 root 用户安装,到这一步就可以回收 sudoers 权限了。

4.1 创建用户 gavin,将 gavin 加入 sudoers(可选)

# 创建用户 gavin, 设置密码
sudo adduser gavin
passwd gavin
# 1、关键: 将 gavin 加入 sudoers, nopassed: 表示提权不用输入密码
echo 'gavin ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
# 至此, 您可以使用 yum install 或者 手动安装脚本 安装 docker 了
# 但是指定 docker 命令, 如 docker ps, 提示没有权限

4.2 将 gavin 加入 docker 用户组

# 查看 docker 用户组是否存在
cat /etc/group | grep docker
# 不存在, 创建 docker 用户组
sudo groupadd docker
# 这里有两种方法将 gavin 用户加入到 docker 用户组
# 方式一:-a 表示添加一个用户到一个组
sudo gpasswd -a gavin docker
# 方式二:aG 表示 append groups
sudo usermod -aG docker gavin
# 更新 docker 用户组或者重新登录终端
newgrp docker

5、镜像转存(转存到阿里个人镜像站)

遇到 公共镜像站 没有想要的镜像怎么办?可以利用 Github Action 下载镜像到阿里云的个人镜像仓库。方案来源:https://www.bilibili.com/video/BV1Zn4y19743

5.1 登录阿里云 - 配置个人仓库实例

容器镜像服务》实例列表》个人版,根据右下角指引依次:

  • 设置访问凭证

  • 创建命名空间

5.2 github 配置 action

  • fork 项目(https://github.com/new-point/docker_image_pusher

  • Setttings 配置四个阿里云获得参数(registry 地址、账号、密码、命名空间)

  • Actions 跑起来。

  • 回到 Code 修改 images.txt,加入想要的镜像名称,commit 即可。

  • 回到 Actions 可以看到 in progress(构建开始了)

  • 回到阿里云镜像仓库,可以看到镜像已经下载下来了。

这里只是粗略的记录步骤,方便我日后回忆。细节请看视频,或者登录 github 看上述 fork 项目的 readme.md

5.3 拉取镜像

# 1、登录阿里云 Docker Registry
docker login --username=xxx registry.cn-shenzhen.aliyuncs.com
# 2、从 Registry 中拉取镜像, xx 是命名空间
docker pull registry.cn-shenzhen.aliyuncs.com/xx/alpine

6、打包 A 服务器镜像到 B 服务器

A 服务器

docker save alpine> alpine.tar

传输到 B 服务器

docker load < alpine.tar

7、使用代理拉取镜像

(1)linux 配置代理

这里使用的是虚拟机,网络是默认的 NAT 模式。代理软件-开启局域网共享,查看到 http 端口为 21882。本机,使用 ipconfig 查询局域网 ip(例如 192.168.31.192)。配置 linux 代理:

# 当前 shell 有效
export http_proxy='http://192.168.31.192:21882'
export https_proxy='http://192.168.31.192:21882'
# 验证
curl www.google.com

(2)docker 配置代理

docker 有自己的网络,需要另外配置代理。

# 创建配置文件
sudo mkdir -p /etc/systemd/system/docker.service.d
# 修改配置文件
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.31.192:21882"
Environment="HTTPS_PROXY=http://192.168.31.192:21882"
# 重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看 docker 配置
sudo systemctl show --property=Environment docker


评论