5 分钟快速构建企业级 Docker 全攻略
原文地址 mp.weixin.qq.com
【写的一些运维用的配置东西,做个笔记】
「欢迎进入 Docker 的世界」
在当今快速发展的云计算时代,企业面临着越来越复杂的技术挑战。如何快速、高效地部署和管理应用成为了每个企业 IT 团队的核心任务。这时,Docker 就像一股清流,为企业级应用部署带来了革命性的变化。
「为什么选择 Docker?」
首先,让我们来简单回顾一下 Docker 的魔力。Docker 是一个开放平台,用于开发、交付和运行应用程序。通过使环境一致性得以保持,从而简化了程序的部署工作,并且通过容器化,使得应用可以在几乎任何地方无缝运行。
🔍 深入了解 Docker 的版本
在我们深入探讨企业级 Docker 部署之前,了解 Docker 的不同版本及其特性至关重要。Docker 作为一个行业领先的容器化平台,提供了多个版本,以适应不同规模和需求的企业环境。
-
「Docker Engine - 社区版 (CE,Community Edition)」: 这是 Docker 的免费版,主要面向开发人员和小型团队。它提供了基本的容器化功能,适合那些希望探索 Docker 技术或在小型项目中实施容器化的用户。
-
「Docker Engine - 企业版 (EE,Enterprise Edition)」: 专为企业级用户设计,EE 版在社区版的基础上增加了高级功能,如集成安全性、管理和支持服务。这些功能对于需要在生产环境中部署和管理大规模容器化应用的企业至关重要。
🛠️ CentOS 宿主机上安装 Docker
在大多数 Linux 发行版上,您可以使用官方的安装脚本或包管理器来安装 Docker。
🔧 「一、使用脚本快速安装」
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:
[root@swarm-manager ~]# curl -fsSL https://get.docker.com -o get-docker.sh
[root@swarm-manager ~]# sh get-docker.sh --mirror Aliyun
执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 安装在系统中。
⚙️ 「二、使用包管理器安装」
1、yum 源操作:
[root@localhost ~]# yum update
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2、可以查看所有仓库中所有 docker 版本,并选择特定版本安装
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 @docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
3、安装 Docker,如下安装最新版本或者安装指定版本:
[root@localhost ~]# yum install docker-ce
4、启动 Docker,并加入开机自启动:
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
5、验证安装是否成功
[root@swarm-manager ~]# docker version
[root@swarm-manager ~]# docker info
❝
docker version 可以查看 client 和 server 相关组件的版本信息,docker info 可以了解 Docker Engine 更多相关的信息,比如运行的容器数量,存储驱动、日志驱动、CPU 和内存资源等等信息。❞
👨💻 「三、建立 Docker 用户组」
1、在 Linux 环境下部署 Docker 时,使用非 root 用户进行操作是一个安全最佳实践。默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯,而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。一般 Linux 系统上不会直接使用 root 用户进行操作,因此,需要将使用 docker 的用户加入到 docker 用户组。
# 新建用户组docker之前,查看用户组中有没有docker组,如果已经存在,则不需要再进行创建
# 检查指令 cat /etc/group | grep docker
[root@swarm-manager ~]# groupadd docker
# 创建用户并加入到docker组下
[root@swarm-manager ~]# useradd -g docker docker
# 修改用户密码
[root@swarm-manager ~]# passwd docker
2、重启 docker,然后使用 docker 用户就可以操作 docker 指令:
[root@swarm-manager ~]# systemctl restart docker
[root@swarm-manager ~]# su - docker
# docker version可以查看到client和server版本信息即正常
[docker@swarm-manager ~]$ docker version
🧪 配置镜像源
「虽然 Docker 官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,对于企业级生产环境来说:独立部署私有环境的 Registry 是非常必要的。」 所以 Harbor 孕育而生,Harbor 是由 VMware 公司开源的企业级的 Docker Registry 管理项目,它包括权限管理 (RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。Harbor 本身环境的部署和使用在后续章节介绍,这里就看 docker 如何对接到已经存在的 harder registry 上。
1、修改 docker 配置文件:/etc/docker/daemon.json
#添加如下内容(客户端访问的网址):
{
"insecure-registries": ["192.168.31.162:10000"]
}
192.168.31.162:10000
就是 Harbor 服务的地址,默认情况下,Harbor 不附带证书,以便可以通过 HTTP 连接到它。如果生产环境和外部网络连接隔离的,可以采用,不过对于生产环境最好还是建议使用 HTTPS,步骤稍微麻烦些,需要在 / etc/docker/certs.d / 目录中添加对应证书才能正常登录,具体配置参加 Harbor 环境部署章节再说。
2、重启 docker:
[root@swarm-manager ~]# systemctl restart docker
3、登录 registry:
[root@swarm-manager ~]# docker login 192.168.31.162:10000
#或者
[root@swarm-manager ~]# docker login -uadmin -p123456 192.168.31.162:10000
4、测试推送镜像:将一个本地镜像修改 tag 推送到 Harbor Registry 上
[root@k8s-03 harbor]# docker tag tomcat:latest 192.168.31.162:10000/library/tomcat:8.0
[root@k8s-03 harbor]# docker push 192.168.31.162:10000/library/tomcat:8.0
在harber
管理界面查看,在 library 项目下就会存在刚才推送上来的tomcat
镜像:
🎉 修改镜像存储位置
Docker 默认的位置在 / var/lib/docker,当前所有的镜像、容器都存储在这儿,可以通过 docker info 查看:
[root@swarm-manager ~]# docker info
...
Docker Root Dir: /var/lib/docker
/var 一般是系统盘,镜像存储空间占用往往还比较大,所以,一般会将 docker 的镜像存储位置迁移到其它挂载的业务存储盘上。
「1、停止 docker 服务」
[root@swarm-manager ~]# systemctl stop docker
「2、修改 docker 服务启动文件」
[root@swarm-manager ~]# vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph=/disk/docker
注意:
-
原配置保持不变,添加 --graph=/disk/docker,/disk/docker 是新的存储位置
-
以下两个文件均可修改 docker 配置:
/etc/systemd/system/multi-user.target.wants/docker.service /usr/lib/systemd/system/docker.service
「3、将原先目录下所有的文件和目录拷贝到新目录下」
[root@swarm-manager ~]# cp -rf /var/lib/docker/* /disk/docker/
[root@swarm-manager docker]# pwd
/disk/docker
[root@swarm-manager docker]# ls
builder buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
「4、重新加载配置并启动」
[root@swarm-manager docker]# systemctl daemon-reload
[root@swarm-manager docker]# systemctl start docker
「5、检查 docker 信息」
[root@swarm-manager docker]# docker info
......
Docker Root Dir: /disk/docker
注:查看 Docker Root Dir: /disk/docker 信息可看到,docker 镜像存储位置已修改成功。
🏃 指定 IP 范围
Docker 在创建网络时默认使用 172.17.0.0/16 网段,容易与局域网内其它网段冲突,并且掩码为 16 位导致子网范围较大,可以通过docker inspect bridge
指令查看:
[root@swarm-manager ~]# docker inspect bridge
......
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
......
下面将介绍如何修改 docker 创建网络时的默认 IP 地址池范围。
1、修改配置文件指定默认 IP 地址池范围:/etc/docker/daemon.json
{
"default-address-pools": [
{"base": "10.1.0.0/16", "size": 24}
]
}
说明如下:
-
default-address-pools 用于设置 IP 地址池范围,格式为数组,可指定多个 IP 地址池范围;
-
base 用于指定 IP 地址池的范围,格式为 CIDR 格式;
-
size 用于指定分配子网的掩码长度;
2、重启 Docker 服务
[root@swarm-manager ~]# systemctl daemon-reload
[root@swarm-manager ~]# systemctl restart docker
- 查看是否成功