有些项目的部署环境可能是内网没有互联网的,那么如果安装docker就有点麻烦,当然方法很多,但是今天要介绍是脚本和离线包的快速安装,非常的简单,下面主要是基于CentOS7的系统做的例子。

离线包

官方的一些离线安装包,选择自己的版本

https://download.docker.com/linux/static/stable/x86_64/

服务配置

创建文件:docker.service

 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
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

安装脚本

创建安装脚本:install.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
echo '解压tar包...'
tar -xvf $1

echo '将docker目录移到/usr/bin目录下...'
cp docker/* /usr/bin/

echo '将docker.service 移到/etc/systemd/system/ 目录...'
cp docker.service /etc/systemd/system/

echo '添加文件权限...'
chmod +x /etc/systemd/system/docker.service

echo '重新加载配置文件...'
systemctl daemon-reload

echo '启动docker...'
systemctl start docker

echo '设置开机自启...'
systemctl enable docker.service

echo 'docker安装成功...'
docker -v

卸载脚本

创建卸载脚本:uninstall.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/sh

echo '删除docker.service...'
rm -f /etc/systemd/system/docker.service

echo '删除docker文件...'
rm -rf /usr/bin/docker*

echo '重新加载配置文件'
systemctl daemon-reload

echo '卸载成功...'

脚本使用

这3个文件在同一个目录下就好了。

安装脚本使用:

1
2
# docker-19.03.9.tgz这个根据自己下载的定
sh install.sh docker-19.03.9.tgz

卸载脚本使用:

1
sh uninstall.sh

配置代理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# /etc/systemd/system/docker.service 文件追击配置

[Service]
....
Environment="HTTP_PROXY=http://172.26.5.219:1087/"
Environment="HTTPS_PROXY=http://172.26.5.219:1087/"

# 执行下面的命令生效
# 重新加载配置文件
systemctl daemon-reload
# 重启docker
systemctl restart docker
# 显示是否成功
systemctl show --property=Environment docker

提示

这里代理软件使用的V2ray,有个小坑,如果代理服务不是在同一台机器上的话,需要把代理的机上的上配置更细下,127.0.0.1改成0.0.0.0,不过这个在局域网还是有点危险的。

因为是离线安装的,可能启动容器会出现异常:“write /proc/self/attr/keycreate: permission denied” 表示文件没有写入权限,被拒绝访问了

解决方案:

1
2
3
4
5
# 修改配置文件
vim /etc/selinux/config

# 更新下面的配置
SELINUX=disabled

重启系统就可以启动容器了