rhel8安装docker-ce
- Docker解决了什么问题
- 安装DOcker
- 关闭防火墙和SELinux
- 配置宿主机网卡转发
- 加载br_netfilter内核
- 开启网卡转发功能
- 卸载旧版本Docker-CE(如果有)
- 添加docker-ce的软件仓库(aliyun)
- docker官方软件仓库
- 卸载podman冲突包---RHEL8及以上版本
- 安装docker-ce
- 开机自启动docker服务并现在启动
- 编辑docker配置文件
- docker配置可选参数
- 配置国内镜像加速源
- 配置docker存储目录
- Docke配置科学网络
- 通过daemon.json配置代理--推荐
- Docker官方方案--不推荐
- 重启docker服务
- 查看新的存储目录和加速源
- 其他配置参数
- 改完要重启docker服务
- 拉取测试镜像
- 免root运行docker
Docker解决了什么问题
系统版本声明:RHEL8
Docker解决了:“程序在我这跑的好好的,在你那怎么就不能运行了呢!”
解决了环境一致性的问题.
容器就是将一套运行环境打包成一个镜像.实现开箱即用.
容器不是虚拟机,与宿主机共享一个内核.
安装DOcker
参考文档: https://help.aliyun.com/document_detail/264695.html#section-m0l-g22-ska
关闭防火墙和SELinux
# 关闭防火墙和SELinuxsystemctl disable--nowfirewalld## 清空现有的所有iptables策略iptables-F# 禁用邮件服务systemctl disable--nowpostfix# 禁用selinuxsed-ri's#(SELINUX=).*#\1disabled#'/etc/selinux/config# 立即禁用临时SElinuxsetenforce0配置宿主机网卡转发
参考: https://feisky.gitbooks.io/sdn/content/linux/params.html
加载br_netfilter内核
br_netfilter内核模块,用于在网络桥接设备上启用网络过滤功能
# 加载br_netfilter内核modprobe br_netfilter# 开机自动加载netfilter网桥过滤模块cat<<EOF|sudotee/etc/modules-load.d/netfilter.confbr_netfilter EOF# 查看模块是否加载lsmod br_netfilterls/proc/sys/net/bridge bridge-nf-call-arptables bridge-nf-filter-pppoe-tagged bridge-nf-call-ip6tables bridge-nf-filter-vlan-tagged bridge-nf-call-iptables bridge-nf-pass-vlan-input-dev开启网卡转发功能
vim/etc/sysctl.d/k8s.conf# 开启ipv4转发功能net.ipv4.ip_forward=1# 启用 Linux 内核对所有网络接口的 Proxy ARP 功能net.ipv4.conf.all.proxy_arp=1# 在ip6tables链中过滤IPv6包net.bridge.bridge-nf-call-ip6tables=1# 在iptables链中过滤IPv4包net.bridge.bridge-nf-call-iptables=1# netfilter防火墙内核模块最大跟踪连接数net.netfilter.nf_conntrack_max=2310720# 禁用用swapvm.swappiness=0# 关闭IPV6net.ipv6.conf.all.disable_ipv6=1net.ipv6.conf.default.disable_ipv6=1net.ipv6.conf.lo.disable_ipv6=1生效sysctl配置
# 使内核配置生效sysctl-p卸载旧版本Docker-CE(如果有)
https://docs.docker.com/engine/install/centos/
# 卸载旧版本Docker-CEsudodnf-yremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\podman\runc# 新版本卸载dnf-yautoremove docker-ce docker-scan-plugin docker-compose-plugin docker-ce-cli docker-buildx-plugin# 查看卸载完没有rpm-qa|grepdocker添加docker-ce的软件仓库(aliyun)
# 安装dnf-utilsdnfinstall-ydnf-utils# docker官方源dnf-config-manager\--add-repo\https://download.docker.com/linux/centos/docker-ce.repo# 添加docker-ce的软件仓库(国内源)dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 查看repolist中docker-ce仓库是否添加成功dnf repolistdocker官方软件仓库
官方文档:https://docs.docker.com/engine/install/rhel/
# 安装dnf-plugins-corednf-yinstalldnf-plugins-core# 添加docker安装源dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo卸载podman冲突包—RHEL8及以上版本
# 卸载podman冲突包dnf erasepodmanbuildah-y#方法2: 安装时使用--allowerasing参数自动替换冲突包dnf-yinstalldocker-ce--allowerasing安装docker-ce
# 安装docker-cednfinstall-ydocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin开机自启动docker服务并现在启动
# 开机自启动并现在启动docker服务systemctlenable--nowdocker# 查看docker版本docker--version编辑docker配置文件
# 编辑docker配置文件vim/etc/docker/daemon.jsondocker配置可选参数
docker配置文件/etc/docker/daemon.json
参考: https://v1-22.docs.kubernetes.io/zh/docs/setup/production-environment/container-runtimes
| 参数 | 解释 | 参考 |
|---|---|---|
| “experimental”: true | 开启docker实验功能 | |
| “features”: {“buildkit”: true} | 启用BuildKit | |
| “exec-opts”: [“native.cgroupdriver=systemd”] | docker默认使用Cgroup Driver为cgroupfs,K8S推荐使用systemd来代替cgroupfs | |
| “data-root”: “/data/docker” | 将docker的默认存储路径由/var/lib/docker设为/data/docker | |
| “storage-driver”: “overlay2”, | 配置docker存储驱动,但需要Linux内核4.0以上 | |
| “storage-opts”: [“overlay2.override_kernel_check=true”] | 当主机内核版本较低(如低于 4.0),强制启用 Overlay2 存储驱动,并跳过对内核版本的兼容性检查 | |
| “registry-mirrors”: [“https://isdp30x2.mirror.aliyuncs.com”] | 配置国内docker源 |
配置国内镜像加速源
docker的默认镜像源在美国,国内下载会很慢,可以修改为国内的镜像源地址.
配置内容如下:/etc/docker/daemon.json
{"registry-mirrors":["https://isdp30x2.mirror.aliyuncs.com"]}配置docker存储目录
有些服务器分区的var目录不是独立的分区.而是和/分区共用的.而docker默认的存储路径是在/var/lib/docker,这就很容易导致将/分区磁盘空间占满.
- 查看docker的
默认存储目录
# 获取有关Docker守护程序(Docker Daemon)的详细信息dockerinfo# 默认目录是:## Docker Root Dir: /var/lib/docker- 修改docker主配置文件
json格式注意格式
# 创建/etc/docker目录(如果没有)mkdir-p/etc/docker# 写入配置信息vim/etc/docker/daemon.json配置如下:
{"data-root":"/data/docker","registry-mirrors":["https://isdp30x2.mirror.aliyuncs.com"]}Docke配置科学网络
参考:https://www.cnblogs.com/Chary/p/18096678
通过daemon.json配置代理–推荐
在/etc/docker/daemon.json中增加代理配置:
{"proxies":{"http-proxy":"http://<user>:<password>@<domain>:<port>","https-proxy":"http://<user>:<password>@<domain>:<port>","no-proxy":"<registry.domain>"}}检查配置是否生效:
# 检查配置是否生效dockerinfo|grepProxyDocker官方方案–不推荐
systemd也会从/etc/systemd/system/docker.service.d和/lib/systemd/system/docker.service.d文件夹下读取配置,创建docker.service.d目录。sudo mkdir -p /etc/systemd/system/docker.service.d
编辑文件:vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]Environment="HTTP_PROXY=http://proxy.example.com:80"Environment="HTTPS_PROXY=https://proxy.example.com:443"# 绕过科学网络 直连Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com"重启docker服务
# 重载服务(如果出错就执行)systemctl daemon-reload# 重启docker服务systemctl restartdocker查看新的存储目录和加速源
dockerinfo# 默认目录是:## Docker Root Dir: /data/docker其他配置参数
# 创建/etc/docker目录sudomkdir-p/etc/docker# 添加配置## 官方建议使用overlay2sudotee/etc/docker/daemon.json<<-'EOF' { "experimental": true, "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF改完要重启docker服务
# 重载服务(如果出错就执行)sudosystemctl daemon-reload# 重启docker服务sudosystemctl restartdocker拉取测试镜像
[rhel8 root ~]# docker pull hello-worldUsing default tag: latest latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51 Status: Downloaded newer imageforhello-world:latest docker.io/library/hello-world:latest免root运行docker
# 将当前(普通)用户添加到docker组sudousermod-aGdocker$USER## 或# 将当前(普通)用户添加到docker组sudogpasswd-a$USERdocker# 测试普通用户是否可以执行docker## 登入dockre组newgrpdocker## 执行docker命令启动一个容器dockerrun hello-world## 删除容器dockerrun--rmhello-world