赞
踩
https://blog.csdn.net/omaidb/article/details/120393850
Docker-CE
官方安装文档:https://docs.docker.com/engine/install/centos/
#!/usr/bin/env bash # 定义版本 buildkit_VERSION=0.11.4 # 1.配置时间 set_time_service() { # 设置时区为上海 timedatectl set-timezone Asia/Shanghai # 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间 timedatectl set-local-rtc 0 # 重启时间服务依赖的服务 systemctl restart rsyslog systemctl restart crond # 同步时间 systemctl enable --now chronyd # 将时间写入到硬件 hwclock -w # 查看时间同步是否成功 chronyc sources -n } # 2.永久禁用swap set_swapoff() { swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab echo '禁用swap' } # 3.禁用firewalld防火墙和iptables防火墙邮件服务postfix disable_firewall_selinux() { systemctl disable --now firewalld ## 禁用iptables前要先安装iptables服务 yum install -y iptables-services systemctl disable --now iptables ## 清空现有的所有iptables策略 iptables -F # 禁用邮件服务 systemctl disable --now postfix echo '禁用防火墙和邮件服务' # 禁用selinux sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config setenforce 0 echo '禁用selinux' } # 4.配置内核参数 config_kernel() { # 在os启动时加载内核br_netfilter网桥过滤模块 cat <<EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter ip_conntrack EOF # 加载Overlay 文件系统模块 ## 文件系统层叠技术,允许将多个文件系统层以只读的方式合并挂载,创建一个统一的虚拟文件系统 modprobe overlay # 现在加载br_netfilter网桥过滤模块 modprobe br_netfilter # 加载连接跟踪模块 modprobe ip_conntrack echo '加载加载br_netfilter网桥过滤模块' cat <<EOF >/etc/sysctl.d/k8s.conf # 在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 # 加大允许开启的线程数量 vm.max_map_count = 262144 # 系统中可同时打开的最大文件数目 fs.file-max = 52706963 # 单个进程可分配的最大文件数 fs.nr_open = 52706963 # 加大允许开启的线程数量 vm.max_map_count = 262144 # 同一用户同时可以添加的watch数目 ## 默认值8192 fs.inotify.max_user_watches = 524288 # 防止容器数量增加导致fs.inotify.max_user_instances超过限制 # 默认128 fs.inotify.max_user_instances = 8192 # 关闭OOM vm.panic_on_oom = 1 # 自动释放cache防止oom vm.overcommit_memory = 1 # 禁用用swap vm.swappiness = 0 # 开启内核开启数据包转发 ## 1为开启;0为关闭 net.ipv4.ip_forward = 1 EOF # 使sysctl生效 sysctl --system echo '开启配置k8s内核参数' } # 5.配置ipvs功能 config_lvs() { yum install -y ipset ipvsadm conntrack libseccomp ## 添加需要加载的模块写入脚本文件 cat <<EOF >/etc/sysconfig/modules/ipvs.modules #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh ## 高版本内核nf_conntrack_ipv4被nf_conntrack替换了 # modprobe -- nf_conntrack_ipv4 modprobe -- nf_conntrack EOF ## 为脚本添加执行权限 chmod +x /etc/sysconfig/modules/ipvs.modules ## 执行脚本 /bin/bash /etc/sysconfig/modules/ipvs.modules ## 查看对应模块是否加载 lsmod | grep -e ip_vs -e nf_conntrack } # 6.安装docker包 install_docker_pkg() { # 安装yum-utils yum install -y yum-utils # 卸载旧版docker-CE # uninstall_docker # 添加docker-ce源 https://docs.docker.com/engine/install/centos/ ## docker-ce国内源--aliyun # yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ## docker-ce官方源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo echo '添加docker-ce源' # 查看repolist中docker-ce仓库是否添加成功 yum repolist yum clean all && yum makecache echo '刷新yum缓存' # 安装docker-ce yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin echo '安装docker' } # 7.配置docker镜像加速和存储目录 # https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/ config_docker() { # 开启docker实验功能 # "experimental": true # 启用BuildKit # "features": {"buildkit": true} # docker默认使用Cgroup Driver为cgroupfs,K8S推荐使用systemd来代替cgroupfs ## 参考 https://v1-22.docs.kubernetes.io/zh/docs/setup/production-environment/container-runtimes/ ## "exec-opts": ["native.cgroupdriver=systemd"] # 将docker的默认存储路径由/var/lib/docker设为/data/docker ## docker会自动创建新路径,请勿手动创建,会有权限问题 ## "data-root": "/data/docker" # 配置docker存储驱动 # "storage-driver": "overlay2", # "storage-opts": ["overlay2.override_kernel_check=true"] # 配置国内源----自行添加 # "registry-mirrors": ["https://isdp30x2.mirror.aliyuncs.com"] cat <<EOF | tee /etc/docker/daemon.json { "experimental": true, "features": { "buildkit": true }, "exec-opts": [ "native.cgroupdriver=systemd" ] } EOF echo '配置docker镜像加速和存储目录' } # 8.重启docker服务 restart_docker() { ## 重载服务 systemctl daemon-reload ## 重启docker服务 systemctl restart docker # 设置docker开机自启 systemctl enable docker echo '重启服务并设置开启自启动' } # 9.安装buildkit install_buildkit() { # 下载buildkit ## -c 断点续传 ## —P 下载到指定目录 wget -c -P /usr/local/src/ https://github.com/moby/buildkit/releases/download/v$buildkit_VERSION/buildkit-v$buildkit_VERSION.linux-amd64.tar.gz # 创建buildkit对应目录 mkdir -p /usr/local/containerd/ # 解压buildkit到指定路径 ## buildkit压缩包里有bin目录 ls /usr/local/containerd/bin/buildkitd &>/dev/null && echo 'buildkitd已存在,请先删除旧版' && exit 1 tar -xvf /usr/local/src/buildkit-v$buildkit_VERSION.linux-amd64.tar.gz -C /usr/local/containerd # 创建buildkitd软连接 ln -s /usr/local/containerd/bin/buildkitd /usr/local/bin/buildkitd ln -s /usr/local/containerd/bin/buildctl /usr/local/bin/buildctl # 创建buildkit.socket服务文件 cat >/usr/lib/systemd/system/buildkit.socket <<'EOF' [Unit] Description=BuildKit Documentation=https://github.com/moby/buildkit [Socket] ListenStream=%t/buildkit/buildkitd.sock [Install] WantedBy=sockets.target EOF # 创建buildkit.service服务文件 cat >/usr/lib/systemd/system/buildkit.service <<'EOF' [Unit] Description=BuildKit Requires=buildkit.socket After=buildkit.socketDocumentation=https://github.com/moby/buildkit [Service] ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true [Install] WantedBy=multi-user.target EOF # 开机自启buildkit服务 systemctl daemon-reload systemctl enable --now buildkit } # 安装docker完整版 full_install_docker() { # 1.配置时间 set_time_service # 2.永久禁用swap set_swapoff # 3.禁用防火墙和SElinux disable_firewall_selinux # 4.配置内核参数 config_kernel # 5.配置ipvs功能 config_lvs # 6.安装docker包 install_docker_pkg # 7.配置docker镜像加速和存储目录--可选 config_docker # 8.重启docker服务 restart_docker # 9.安装buildkit服务 install_buildkit } # 卸载docker uninstall_docker() { # 卸载旧版docker yum -y remove docker \ docker-ce \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 卸载较新版本docker yum autoremove -y docker-ce \ docker-ce-cli \ containerd.io \ docker-buildx-plugin \ docker-compose-plugin \ docker-ce-rootless-extras # 查看卸载完没有 rpm -qa | grep docker echo '卸载docker-CE' # 卸载buildkit uninstall_buildkit } # 卸载buildkit uninstall_buildkit() { # 删除buildkit文件 rm -rf /usr/local/src/buildkit-v$buildkit_VERSION.linux-amd64.tar.gz rm -rf /usr/local/containerd/bin/buildkitd /usr/local/bin/buildkitd rm -rf /usr/lib/systemd/system/buildkit.socket rm -rf /usr/lib/systemd/system/buildkit.service # 停止buildkit服务 systemctl disable --now buildkit systemctl daemon-reload } #开始菜单 function start_menu() { clear echo "=========================" echo " 介绍:适用于CentOS7" echo " 作者:Miles" echo " 网站:https://blog.csdn.net/omaidb" echo "=========================" echo "注意:本脚本只支持Centos7" echo "1. 安装docker" echo "2. 卸载docker" echo "0. 退出脚本" echo "请输入数字:" read -r num case "$num" in 1) # 执行完整安装docker echo "开始安装docker" full_install_docker ;; 2) echo "开始卸载docker" uninstall_docker ;; 0) exit 1 ;; *) clear echo "请输入正确数字" sleep 5s start_menu ;; esac } # main方法,显示菜单 start_menu
# 开启docker实验功能 # "experimental": true # docker默认使用Cgroup Driver为cgroupfs,K8S推荐使用systemd来代替cgroupfs ## 参考 https://v1-22.docs.kubernetes.io/zh/docs/setup/production-environment/container-runtimes/ ## "exec-opts": ["native.cgroupdriver=systemd"] # 将docker的默认存储路径由/var/lib/docker设为/data/docker ## "data-root": "/data/docker" # 配置docker存储驱动 # "storage-driver": "overlay2", # "storage-opts": ["overlay2.override_kernel_check=true"] # 配置国内源----自行添加 # "registry-mirrors": ["https://isdp30x2.mirror.aliyuncs.com"] # 开启实验功能 "experimental": true, # 启用BuildKit "features": {"buildkit": true} # 存储配置 "storage-opts": [ "overlay2.override_kernel_check=true", # 限制每个容器存储为1G "overlay2.size=1G" ]
常见的问题是/etc/docker/daemon.json
配置错误
查看日志: journalctl -u docker
有些情况下,我们生产环境需要拉取海外的镜像源,但是拉取镜像时会超时.这时候需要给docker配置代理.
# 安装epel源
yum -y install epel-release
# 安装privoxy(将socks5转换成http)
yum install privoxy -y
# 开启privoxy服务
systemctl enable --now privoxy
有预算的直接上HK
机器,无墙。
# 编辑privoxy主配置文件
vim /etc/privoxy/config
修改配置内容
加上如下配置,注意最后的点号。
forward-socks5
的 DNS 解析会在远程服务器上进行
,而 forward-socks5t
却不会,这就导致使用后者访问境外网站的时候 ,国内DNS
无法解析海外网址的情况,从而也就不知道去访问哪个IP。一般来说,还是建议使用 forward-socks5
。
# 监听本地所有ip的8118端口(http)
#listen-address 0.0.0.0:8118
listen-address 127.0.0.1:8118
# 当有连接访问本地的8118端口时,通过socks5协议转发到192.168.199.11:10808端口
forward-socks5 / 192.168.199.11:10808 .
修改完配置文件要重启privoxy服务
# 重启privoxy服务
systemctl restart privoxy
查看本地的8118端口是否处于监听状态
# 查看本地的8118端口是否处于监听状态
netstat -tunlp
# 或
ss -tunlp
# 1.创建docker服务插件目录
sudo mkdir -p /etc/systemd/system/docker.service.d
# 2.创建一个名为proxy.conf的文件
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
# 3.编辑http-proxy.conf的文件
sudo vim /etc/systemd/system/docker.service.d/proxy.conf
# 4.写入内容(将代理ip和代理端口修改成你自己的)
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8118"
Environment="HTTPS_PROXY=http://127.0.0.1:8118" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com,hub-mirror.c.163.com,isdp30x2.mirror.aliyuncs.com,mirror.baidubce.com"
# 重载服务
systemctl daemon-reload
# 重启docker服务
systemctl restart docker
# 查看docker服务加载的配置
systemctl show --property=Environment docker
# 拉取海外镜像测试
docker pull gcr.io/google-containers/ubuntu:14.04
参考地址: https://zhuanlan.zhihu.com/p/414473668
官方文档: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
另外如果需要使用http代理,只需要将socks5替换成http。
https://zhuanlan.zhihu.com/p/414473668
注意要同时添加所有私有子网(例如 10.0.0.0/8)
到NO_PROXY,进行免代理.
# 1.创建docker服务插件目录
sudo mkdir -p /etc/systemd/system/docker.service.d
# 2.创建一个名为proxy.conf的文件
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
# 3.编辑http-proxy.conf的文件
sudo vim /etc/systemd/system/docker.service.d/proxy.conf
# 4.写入内容(将代理ip和代理端口修改成你自己的)
[Service]
Environment="HTTP_PROXY=socks5://127.0.0.1:1080"
Environment="HTTPS_PROXY=socks5://127.0.0.1:1080" "NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com,isdp30x2.mirror.aliyuncs.com,hub-mirror.c.163.com,mirror.baidubce.com"
# 重载服务
systemctl daemon-reload
# 重启docker服务
systemctl restart docker
# 查看docker服务加载的配置
systemctl show --property=Environment docker
--- - hosts: all tasks: - name: 创建docker.service.d目录 file: path: /etc/systemd/system/docker.service.d state: directory - name: 创建proxy.conf文件 file: path: /etc/systemd/system/docker.service.d/proxy.conf state: touch - name: j2配置proxy.conf template: src: proxy.conf.j2 dest: /etc/systemd/system/docker.service.d/proxy.conf notify: restart docker handlers: - name: restart docker systemd: state: restarted daemon_reload: yes name: docker
proxy.conf.j2
模板文件
[Service]
Environment="HTTP_PROXY=socks5://127.0.0.1:1080"
Environment="HTTPS_PROXY=socks5://127.0.0.1:1080" NO_PROXY=localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,docker-registry.somecorporation.com,isdp30x2.mirror.aliyuncs.com,hub-mirror.c.163.com,mirror.baidubce.com"
[master root ~/ansible]# docker pull gcr.io/google-containers/ubuntu:14.04
14.04: Pulling from google-containers/ubuntu
a3ed95caeb02: Pull complete
7059585c469e: Pull complete
782c76bb9e67: Pull complete
706514fbad74: Pull complete
Digest: sha256:5746b3b4974d1bd3d4ddbac0373fb71b425f13583797414ffd9d8b547d241f75
Status: Downloaded newer image for gcr.io/google-containers/ubuntu:14.04
gcr.io/google-containers/ubuntu:14.04
[master root ~/ansible]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/google-containers/ubuntu 14.04 fbb59e4c2529 6 years ago 188MB
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。