当前位置:   article > 正文

Centos7安装docker_centos7 安装docker

centos7 安装docker


系统版本声明: Cetnos7

配置Centos7的国内yum源及扩展源

https://blog.csdn.net/omaidb/article/details/120393850


安装用于k8s集群的docker和buildkit

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372

docker配置参数

    # 开启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"
    ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

docker服务无法启动的排查方案

常见的问题是/etc/docker/daemon.json配置错误
查看日志: journalctl -u docker


配置http代理访问docker海外镜像源

有些情况下,我们生产环境需要拉取海外的镜像源,但是拉取镜像时会超时.这时候需要给docker配置代理.


安装privoxy

# 安装epel源
yum -y install epel-release

# 安装privoxy(将socks5转换成http)
yum install privoxy -y

# 开启privoxy服务
systemctl enable --now privoxy
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

编辑privoxy配置文件

有预算的直接上HK机器,无墙。

# 编辑privoxy主配置文件
vim /etc/privoxy/config
  • 1
  • 2

修改配置内容
加上如下配置,注意最后的点号。
forward-socks5DNS 解析会在远程服务器上进行,而 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 .
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

修改完配置文件要重启privoxy服务

# 重启privoxy服务
systemctl restart privoxy
  • 1
  • 2

查看本地的8118端口是否处于监听状态

# 查看本地的8118端口是否处于监听状态
netstat -tunlp
# 或
ss -tunlp
  • 1
  • 2
  • 3
  • 4

配置docker使用http代理

# 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"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

重启docker服务

# 重载服务
systemctl daemon-reload

# 重启docker服务
systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5

验证配置是否成功

# 查看docker服务加载的配置
systemctl show --property=Environment docker
  • 1
  • 2

拉取海外镜像测试

#  拉取海外镜像测试
docker pull gcr.io/google-containers/ubuntu:14.04
  • 1
  • 2

配置socks5代理访问docker海外镜像

参考地址: https://zhuanlan.zhihu.com/p/414473668
官方文档: https://docs.docker.com/config/daemon/systemd/#httphttps-proxy


配置docker使用socks5代理

另外如果需要使用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"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

重启docker服务

# 重载服务
systemctl daemon-reload

# 重启docker服务
systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5

验证配置是否成功

# 查看docker服务加载的配置
systemctl show --property=Environment docker
  • 1
  • 2

ansible配置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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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"
  • 1
  • 2
  • 3

拉取海外镜像测试

[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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

docker常见问题

24个Docker 常见问题处理技巧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/327857
推荐阅读
相关标签
  

闽ICP备14008679号