前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 最佳实战:3 分钟,openEuler 22.03 LTS SP3 安装 Docker,有手就行!

Docker 最佳实战:3 分钟,openEuler 22.03 LTS SP3 安装 Docker,有手就行!

原创
作者头像
运维有术
修改2024-01-26 18:23:59
2.8K1
修改2024-01-26 18:23:59
举报
文章被收录于专栏:运维有术运维有术

2024 年云原生运维实战文档 99 篇原创计划 第 002 篇 |Docker 最佳实战「2024」系列 第 002 篇

前言

你好,欢迎来到运维有术

今天分享的内容是 Docker 最佳实战「2024」 系列文档中的 openEuler 22.03 LTS SP3 安装配置 Docker

内容导图

openeluer-docker-mindmap
openeluer-docker-mindmap

实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)

主机名

IP

CPU(核)

内存(GB)

系统盘(GB)

数据盘(GB)

用途

docker-node-1

192.168.9.81

4

16

40

100

Docker 节点 1

docker-node-2

192.168.9.82

4

16

40

100

Docker 节点 2

docker-node-3

192.168.9.83

4

16

40

100

Docker 节点 3

合计

3

12

48

120

300

实战环境涉及软件版本信息

  • 操作系统:openEuler 22.03 LTS SP3
  • Docker:24.0.7
  • Containerd:1.6.27

1. 为什么选择 openEuler?

1.1 政策理由

  • CentOS 7 将在 2024 年 6 月 30 日停止维护
  • 后 CentOS 时代,必须选择一款新的、生产环境可用的 Linux 发行版
  • RHEL 给出的选择方案无法满足我的需求(生产可用的只有 RHEL
centos-end-select
centos-end-select
  • 操作系统国产化、信创适配的要求越来越高、越来越快

信创: 信息技术应用创新产业,旨在通过实现信息技术领域的自主可控,保障国家信息安全。

  • 各大运营商、各个 Linux 发行版厂商也都基于欧拉定制开发了自己的 Linux 发行版
  • openEuler 2023 年市场份额达 36.8% ,成为中国第一服务器操作系统(数据来源于网络,关键词搜索 《2023 服务器操作系统报告》)。
  • openEuler 背靠华为(仅此一条,足以

1.2 技术理由

  • openEuler 使用体验接近于 CentOS(主要原因
  • openEuler 提供了 x2openEuler 原地升级工具,可以将源操作系统升级到新的采用欧拉技术路线的目标操作系统
  • 文档齐全(很重要)

仅基于个人考虑,此处不展开系统选型的争论。您可以根据实际需求选择最适合您的方案 (没有最好,只有最合适)。

2. 操作系统基础配置

在安装配置 Docker 之前,我们需要做好操作系统的基础配置。

2.1 配置主机名

代码语言:shell
复制
# 更改主机名
hostnamectl hostname docker-node-1

# 切入新的终端会话,验证主机名修改成功
bash

2.2 配置 DNS

代码语言:shell
复制
echo "nameserver 114.114.114.114" > /etc/resolv.conf

2.3 配置服务器时区

配置服务器时区为 Asia/Shanghai

代码语言:shell
复制
timedatectl set-timezone Asia/Shanghai

2.4 配置时间同步

  • 安装 chrony 作为时间同步软件。
代码语言:shell
复制
yum install chrony -y
  • 修改配置文件 /etc/chrony.conf,修改 ntp 服务器配置。
代码语言:shell
复制
vi /etc/chrony.conf

# 删除所有的 pool 配置
pool pool.ntp.org iburst

# 增加国内的 ntp 服务器,或是指定其他常用的时间服务器
pool cn.pool.ntp.org iburst

# 上面的手工操作,也可以使用 sed 自动替换
sed -i 's/^pool pool.*/pool cn.pool.ntp.org iburst/g' /etc/chrony.conf
  • 重启并设置 chrony 服务开机自启动。
代码语言:shell
复制
systemctl enable chronyd --now
  • 验证 chrony 同步状态。
代码语言:shell
复制
chronyc sourcestats -v

2.5 关闭系统防火墙

代码语言:shell
复制
systemctl stop firewalld && systemctl disable firewalld

2.6 禁用 SELinux

代码语言:shell
复制
# 使用 sed 修改配置文件,实现彻底的禁用
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 使用命令,实现临时禁用
setenforce 0

3. 操作系统磁盘配置

数据盘配置前提说明(你可以根据需求修改)

  • 服务器新增一块数据盘 /dev/sdb,用于 Docker 容器和镜像的持久化存储。
  • 新增数据盘的挂载点为 /data

3.1 使用 LVM 配置磁盘

为了满足部分用户希望在生产上线后,磁盘容量不足时可以实现动态扩容。本文采用了 LVM 的方式配置磁盘(实际上,本人维护的生产环境,几乎不用 LVM)。

  • 创建 PV
代码语言:bash
复制
 pvcreate /dev/sdb
  • 创建 VG
代码语言:bash
复制
vgcreate data /dev/sdb
  • 创建 LV
代码语言:bash
复制
# 方案一、使用所有空间,VG 名字为 data,LV 名字为 lvdata
lvcreate -l 100%VG data -n lvdata

# 方案二、使用 100G 空间 
lvcreate -L 100G data -n lvdata

3.2 格式化磁盘

代码语言:shell
复制
mkfs.xfs /dev/mapper/data-lvdata

3.3 磁盘挂载

  • 手工挂载
代码语言:bash
复制
mkdir /data
mount /dev/mapper/data-lvdata /data/
  • 开机自动挂载
代码语言:bash
复制
tail -1 /etc/mtab >> /etc/fstab

3.4 创建数据目录

  • 创建 Docker 数据目录
代码语言:bash
复制
mkdir -p /data/docker

4. 安装配置 Docker 引擎

4.1 安装方式介绍

Docker 常见的安装方式有两种:

  • 操作系统发行版安装包(RPM、Deb,在线安装时常用的建议方式,本文选用
  • 二进制安装包(适用于离线部署、集成定制化部署)

采用操作系统发行版安装包方案时,也有两种方式可选:

  • 利用官方脚本,自动安装配置(适用于网络不受限的环境
  • 手动安装配置

通用 Linux 发行版自动安装部署 Docker 的方法,参考如下:

代码语言:bash
复制
export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"

# 如您使用 curl
curl -fsSL https://get.docker.com/ | sh

# 如您使用 wget
wget -O- https://get.docker.com/ | sh

但是,上述方法默认不支持 openEuler,当执行上面的命令时,报错如下:

代码语言:bash
复制
[root@docker-node-1 ~]# export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
[root@docker-node-1 ~]# curl -fsSL https://get.docker.com/ | sh
# Executing docker install script, commit: e5543d473431b782227f8908005543bb4389b8de

ERROR: Unsupported distribution 'openeuler'

说明: 实际上可以下载安装脚本并修改部分内容,实现在 openEuler 上自动化安装 Docker。

所以,本文选择了 RPM 包手工安装部署的方案。

4.2 配置软件源

  • 下载 repo 配置文件
代码语言:shell
复制
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
  • 修改安装源为国内地址,适用于访问国外网络受限的环境
代码语言:bash
复制
sed -i 's#https://download.docker.com#https://mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
  • Docker 软件源支持的操作系统并不包含 openEuler
docker-source-list
docker-source-list
  • openEuler 的使用方式近似 CentOS,因此,修改软件源的配置,使用 centos 7 的软件源
代码语言:bash
复制
sed -i 's#$releasever#7#g' /etc/yum.repos.d/docker-ce.repo

4.3 安装 Docker

使用 yum 安装 Docker 时,如果不指定版本,默认会安装当前最新版。

代码语言:bash
复制
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker-pkg-25.0.1
docker-pkg-25.0.1

有特殊版本要求的场景,可以指定版本号安装。生产环境建议使用指定版本号。

  • 查询可用版本
代码语言:bash
复制
yum list docker-ce --showduplicates | sort -r
  • 查询结果如下
代码语言:bash
复制
[root@docker-node-1 ~]# yum list docker-ce --showduplicates | sort -r
Last metadata expiration check: 0:00:57 ago on Fri 26 Jan 2024 02:55:31 PM CST.
docker-ce.x86_64            3:25.0.1-1.el7                      docker-ce-stable
docker-ce.x86_64            3:25.0.0-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.8-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.7-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.6-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.5-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.4-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.3-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.2-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.1-1.el7                      docker-ce-stable
docker-ce.x86_64            3:24.0.0-1.el7                      docker-ce-stable
......(限于篇幅,有删减)
  • 安装指定版本
代码语言:bash
复制
yum install docker-ce-24.0.7 docker-ce-cli-24.0.7 docker-ce-rootless-extras-24.0.7 containerd.io docker-buildx-plugin docker-compose-plugin -y

说明: 本文选用的版本为 24.0.7。在生产环境中,个人不推荐使用最新版本,相对而言,选择较最新版本落后 1 至 2 个版本更为适宜。

4.4 配置 Docker

自定义配置,修改 Docker 配置文件 /etc/docker/daemon.json

代码语言:bash
复制
cat > /etc/docker/daemon.json << "EOF"
{
  "data-root": "/data/docker",
  "registry-mirrors": [
     "https://registry.hub.docker.com",
     "https://mirror.baidubce.com",
     "https://hub-mirror.c.163.com",
     "https://docker.mirrors.ustc.edu.cn"
  ],
  "log-opts": {
    "max-size": "10m",
    "max-file":"3"
  },
  "storage-driver": "overlay2",
  "exec-opts": ["native.cgroupdriver=systemd"]
}

EOF

说明: 请根据实际情况配置以下参数 data-root:数据目录 registry-mirrors:常用的 Registry 代理服务器 log-opts: Log 文件最容量设置为 50MB,默认是 10MB(一定要根据实际需求设置,过大过小都不合适,如不确定请使用默认值) exec-opts: 配置了 cgroup driver 使用 systemd,适用于 Kubernetes 场景,Docker 默认使用 cgroupfs

4.5 启动 Docker

启动 Docker 服务,并设置开机自启。

代码语言:bash
复制
systemctl enable docker --now

4.6 验证 Docker

  • 查看 Docker 信息
代码语言:bash
复制
 docker info
  • 使用镜像 hello-world 创建测试容器
代码语言:bash
复制
 docker run hello-world

5. 自动化 Shell 脚本

5 分钟完成 Docker 的安装配置,核心在此

全文所有的操作,我都整理成了自动化安装脚本:

  • 自动化脚本 deploy-docker.sh
代码语言:bash
复制
#!/bin/bash
# author:@运维有术
# Usage:自动安装 Docker 24.0.7
set -e

# 设置主机名,默认为 docker-node-1
hostname=${1:-"docker-node-1"}

# 设置 Docker 版本,默认为 24.0.7
docker_ver=${2:-"24.0.7"}

# 操作系统基础配置
function sys_init(){
	hostnamectl hostname ${hostname}
	echo "nameserver 114.114.114.114" > /etc/resolv.conf
	timedatectl set-timezone Asia/Shanghai
	yum install chrony -y
	sed -i 's/^pool pool.*/pool cn.pool.ntp.org iburst/g' /etc/chrony.conf
	systemctl enable chronyd --now
	chronyc sourcestats -v
	systemctl stop firewalld && systemctl disable firewalld
	sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
	setenforce 0
}

# 磁盘配置
function disk_init(){
	pvcreate /dev/sdb
	vgcreate data /dev/sdb
	lvcreate -l 100%VG data -n lvdata
	mkfs.xfs /dev/mapper/data-lvdata
	mkdir /data
	mount /dev/mapper/data-lvdata /data/
	tail -1 /etc/mtab >> /etc/fstab
}

# 安装配置 Docker
function docker_install(){
	mkdir -p /data/docker
	curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
	sed -i 's#https://download.docker.com#https://mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
	sed -i 's#$releasever#7#g' /etc/yum.repos.d/docker-ce.repo
	yum install docker-ce-${docker_ver} docker-ce-cli-${docker_ver} docker-ce-rootless-extras-${docker_ver} containerd.io docker-buildx-plugin docker-compose-plugin -y
	cat > /etc/docker/daemon.json <<- EOF
	{
  	"data-root": "/data/docker",
  		"registry-mirrors": [
  		"https://registry.hub.docker.com",
  		"https://mirror.baidubce.com",
    	"https://hub-mirror.c.163.com",
    	"https://docker.mirrors.ustc.edu.cn"
  	],
  	"log-opts": {
    	"max-size": "10m",
    	"max-file":"3"
  	},
  	"storage-driver": "overlay2",
  	"exec-opts": ["native.cgroupdriver=systemd"]
	}
	EOF

	# 启动服务&&开机自启
	systemctl enable docker --now
}

function docker_check(){
  docker info
  docker run hello-world
}

sys_init
disk_init
docker_install
docker_check
  • 使用方法
代码语言:bash
复制
# 使用默认主机名和版本号
sh deploy-docker.sh

# 使用自定义主机名和版本号
sh deploy-docker.sh node-1 25.0.0

6. 常见问题

6.1 问题 1

  • 问题现象

Docker 启动失败 systemctl start docker

代码语言:bash
复制
# journalctl -xeu docker.service
报错
Failed to start Docker Application Container Engine.

# 查看 /var/log/messages ,重要报错信息
failed to start daemon: error initializing graphdriver: overlay2: unknown option overlay2.override_kernel_check: overlay2
  • 解决方案
代码语言:bash
复制
配置文件中有 "storage-opts": ["overlay2.override_kernel_check=true"],删除该选项即可。

# 细节可参考 Docker 官方文档
https://docs.docker.com/engine/deprecated/#support-for-the-overlay2override_kernel_check-storage-option

7. 课后作业

根据本文所学,请完成以下实战任务。

  1. 安装 openEuler22.03 LTS SP3
  2. 采用手动的方式安装默认版本的 Docker 引擎
  3. 使用自动化脚本安装 24.0.7 版的 Docker 引擎
  4. 体会手工安装和自动化安装的速度差异(培养自动化意识

8. 总结

本文分享了在 openEuler22.03 LTS SP3 环境下部署 Docker 的详细流程及注意事项。主要内容概括如下:

  • openEuler 22.03 LTS SP3 系统初始化配置
  • openEuler 22.03 LTS SP3 磁盘管理
  • 利用 RPM 包的方式安装部署 Docker
  • Docker 安装部署自动化

Get 本文实战视频(请注意,文档视频异步发行,请先关注)

免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责

结束语

如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @ 运维有术,及时收看更多好文!

欢迎加入 「运维有术·云原生实战训练营」 ,获取更多的 KubeSphere、Kubernetes、云原生运维实战技能。

版权声明

  • 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. 为什么选择 openEuler?
    • 1.1 政策理由
      • 1.2 技术理由
      • 2. 操作系统基础配置
        • 2.1 配置主机名
          • 2.2 配置 DNS
            • 2.3 配置服务器时区
              • 2.4 配置时间同步
                • 2.5 关闭系统防火墙
                  • 2.6 禁用 SELinux
                  • 3. 操作系统磁盘配置
                    • 3.1 使用 LVM 配置磁盘
                      • 3.2 格式化磁盘
                        • 3.3 磁盘挂载
                          • 3.4 创建数据目录
                          • 4. 安装配置 Docker 引擎
                            • 4.1 安装方式介绍
                              • 4.2 配置软件源
                                • 4.3 安装 Docker
                                  • 4.4 配置 Docker
                                    • 4.5 启动 Docker
                                      • 4.6 验证 Docker
                                      • 5. 自动化 Shell 脚本
                                      • 6. 常见问题
                                        • 6.1 问题 1
                                        • 7. 课后作业
                                        • 8. 总结
                                        • 结束语
                                        相关产品与服务
                                        容器服务
                                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档