(二)离线部署Docker到服务器
# 华为鲲鹏服务器-学习笔记(基本命令和Docker部分)
笔记分享地址:[https://easydoc.net/s/54024151/YdjAf8qr/VGCwx0S0](https://easydoc.net/s/54024151/YdjAf8qr/VGCwx0S0)
----
## 前言
1、Docker能解决开发、测试、部署环节中的环境一致性问题(所以推荐Docker方式搭建系统环境,且将来可使用K8S实现负载)
2、Docker的安装需要采用内网离线方式部署,大家要明白,实际的生产环境的服务器或者桌面PC是不可以接入互联网的,所以我们在一开始就尽可能要想办法将系统的各种依赖都在本地处理好,通过存储介质交换至目标设备上,尽可能的不使用git和yum方式安装拉取外网资源依赖,不然将来实施人员无法按照手册操作实施。
3、如果你第一次接触docker,请看这里【[图解docker的部署逻辑](https://www.bilibili.com/video/BV1Kx4y1P7c5?p=6&vd_source=0bc9675b3a70f0c0f28fcd4a0b7da7bf)】
-------
**笔记大纲目录索引**
[(一)环境准备](doc:VGCwx0S0)
[(二)离线部署Docker到服务器](doc:tM5I6C7b)
[(三)验证Docker离线安装和服务是否正确](doc:67UZXJJr)
[(四)加载Docker镜像](doc:YYIyCsil)
------
## 第二章 Docker部分
## 一、Docker的基本概念介绍
**学习目的:弄清楚什么是容器化技术以及Docker还有K8S?以及为什么要使用Docker,解决什么问题等**
技术参考资料网文地址:
[https://www.cnblogs.com/IT-Evan/p/15845728.html](https://www.cnblogs.com/IT-Evan/p/15845728.html)
[https://blog.csdn.net/coderscoder/article/details/109683137](https://blog.csdn.net/coderscoder/article/details/109683137)

**注意:**
目前国产化操作系统都是基于Linux操作系统内核进行改写的,我们如果采用【物理机时代】的部署模式不是不可以,只是开发、测试、和实施各环节无法确保环境的一致性,将产生很多不必要的成本,所以我建议使用容器化技术(Docker)进行部署。
**重点:**
目前需要掌握Docker的安装、基本命令,以及postgresql、瀚高、达梦、金仓等数据库的离线部署和调试,尽可能地将相关介质提前准备好,不采用仓库拉取方式在线获取相关镜像和依赖,相关工作应提前在开发与测试环境验证,确保实施人员在生产环境(无互联网)的情况下,可以正常实施。
> ### 1、什么是容器化技术?
容器化实际上是一种轻量级的虚拟化技术,可以将应用程序和依赖项打包成一个独立、可移植的容器,以便在不同的计算环境中运行。
> #### 1.1、容器和虚拟机有什么区别?
可以理解为容器是宿主机上运行的进程,而虚拟机则是在虚拟硬件上运行的操作系统

> ### 2、什么是Docker?
> #### 2.1、Docker概念
在众多容器化技术中,Docker 是最流行的一个,采用客户端 — 服务器的架构。服务器端是 Docker 后台程序,负责构建、运行和分发容器;客户端则通过 REST API 与 Docker 后台程序交互。
Docker 中两个最重要的概念是镜像和容器,镜像是创建容器的只读模板,可以从 Docker 注册表中下载,也可以创建自定义镜像。Docker Hub 是默认的镜像注册表,包含了非常多可用的镜像,企业内部也可以搭建自己私有的注册表。镜像虽然是不可变的,但是可以在已有的镜像上进行定制,得到新的镜像,这也是通常创建镜像的方式。容器是镜像的可运行实例,从镜像中创建出来的容器,可以被启动、暂停、停止和删除。
Docker 是在 Linux 容器里运行应用的开源工具,是一种轻量级的”虚拟机”。Docker 的 Logo 设计为蓝色鲸鱼,拖着许多集装箱。如下图,鲸鱼可以看作宿主机,而集装箱可以理解为相互隔离的容器。每个集装箱中都包含自己的应用程序。

> #### 2.2、Docker教程资料收集
> ##### 2.2.1、Docker 菜鸟教程
[https://www.runoob.com/docker/docker-tutorial.html](https://www.runoob.com/docker/docker-tutorial.html)
> ##### 2.2.2、Docker 视频教程
[https://www.bilibili.com/video/BV11L411g7U1?p=7&vd_source=0bc9675b3a70f0c0f28fcd4a0b7da7bf](https://www.bilibili.com/video/BV11L411g7U1?p=7&vd_source=0bc9675b3a70f0c0f28fcd4a0b7da7bf)
> ##### 2.2.3、 Docker 快速入门(适合windows环境)
[https://docker.easydoc.net/](https://docker.easydoc.net/)
### 小结:
由于将来档案数字化的应用场景的服务器、桌面电脑、外设(打印机、扫描仪)都是不可以接入互联网的
>[注:《GBT33870-2017干部人事档案数字化技术规范》--P9]
13.3 设备安全
13.3.1 干部人事档案数字化加工设备(计算机、打印机、复印机、扫描仪等)的使用、管理、维修、报废等应符合涉密信息设备使用保密管理的有关规定。
13.3.2 与干部人事档案数字化加工相关的计算机、打印机、复印机、扫描仪等设备不得连接互联网及其他公共信息网络。
[http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=FBC9EB9C07D19395DF5538D58F992818](http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=FBC9EB9C07D19395DF5538D58F992818)
所以,在信创环境,我们由于不能联网所以软件需要的运行环境和相关依赖都需要提前准备好,不能通过Docker仓库拉取,而且还涉及不容的CPU架构的不同操作系统以及版本的相互兼容问题,我们如果采用物理机直接部署,开发、测试、实施的环境不一致,将会带来非常多的额外工作量,因此,我们需要采用容器化技术的Docker方式部署数据库以及需要的各类中间件和环境依赖。
------------------
## 二、Kubernetes介绍
### 2.1、Kubernetes是什么?为什么叫K8S?
因为这个名字太长了不好记,所以K和S之间有8个字母,所以叫K8S!!!!
•Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。
•Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
通过Kubernetes你可以:
•快速部署应用
•快速扩展应用
•无缝对接新的应用功能
•节省资源,优化硬件资源的使用
Kubernetes 特点:
•可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
•可扩展: 模块化, 插件化, 可挂载, 可组合
•自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

### 2.2、Kubernetes 架构
Kubernetes提供了一个配置,自动化和管理的平台:
容器的智能和平衡调度
容器的创建,删除和移动
易于扩展容器
监测和自我修复能力
Kubernetes集群由至少一个管理集群的主节点和多个工作节点组成,其中容器化应用程序使用Pod运行。 Pod是一个或多个容器的逻辑分组,它们一起安排并共享资源。
MapR Data Fabric包含一个本机集成的Kubernetes卷驱动程序,可提供持久存储卷,以访问本地,跨云和边缘的任何数据。 有状态应用程序可用于生产用例,机器学习管道和多租户用例的容器中。

### 2.3、技术参考资料网文地址收集
> [浅谈容器及容器编排 ]
> [https://www.cnblogs.com/IT-Evan/p/15845728.html](https://www.cnblogs.com/IT-Evan/p/15845728.html)
>
> [Kubernetes, Kafka微服务架构模式讲解及相关用户案例]
> [https://www.sohu.com/a/239563819_797717?sec=wd](https://www.sohu.com/a/239563819_797717?sec=wd)
----------------------------
## 三、Docker实操笔记:
### 教程收集整理如下:
【Docker 离线安装_安装下载】
[https://cloud.tencent.com/developer/article/2157684](https://cloud.tencent.com/developer/article/2157684)
【Docker离线安装】
[https://blog.csdn.net/fy512/article/details/123257474](https://blog.csdn.net/fy512/article/details/123257474)
【docker离线安装步骤详解(图文教程)】
[https://m.geekku.com/spec/docker/1518.html](https://m.geekku.com/spec/docker/1518.html)
【Docker离线部署】
[http://t.csdn.cn/LUPHi](http://t.csdn.cn/LUPHi)
【Docker使用(六) — Docker离线安装部署】
[http://t.csdn.cn/RYrGJ](http://t.csdn.cn/RYrGJ)
### 3.1、Docker版本的下载:
#### 3.1.1、下载地址
Windows终端访问这里:
[https://download.docker.com/win/static/stable/x86_64/](https://download.docker.com/win/static/stable/x86_64/)
Linux终端访问这里:
[https://download.docker.com/linux/static/stable/](https://download.docker.com/linux/static/stable/)
输入网址后会出现6个不同的CPU架构版本的Docker入口,如下:
[aarch64/](https://download.docker.com/linux/static/stable/aarch64/)
[armel/](https://download.docker.com/linux/static/stable/armel/)
[armhf/](https://download.docker.com/linux/static/stable/armhf/)
[ppc64le/](https://download.docker.com/linux/static/stable/ppc64le/)
[s390x/](https://download.docker.com/linux/static/stable/s390x/)
[x86_64/](https://download.docker.com/linux/static/stable/x86_64/)
大家可以根据自己需要的CPU架构进行下载
**==说明:==**
信创环境的国产操作系统都是基于Linux操作系统的,所以这里要根据银河麒麟或统信UOS的具体服务器的CPU架构或者桌面版PC设备的CPU的架构选择对应的安装包介质,因为银河麒麟的内核有些是基于Ubuntu Linux的有些又是基于CentOS的,而且目前国产主流芯片有6中,这里排列组合的环境就需要对应才能部署。
----
linux查看CPU架构以及CPU架构介绍
[https://blog.csdn.net/qq_15821487/article/details/123373189](https://blog.csdn.net/qq_15821487/article/details/123373189)
---
Q:如何获取系统架构信息
A:使用以下命令中的一个能查到即可:
$ uname -a
$ arch
运行效果
```
[root@DC1-03-001 etc]# uname -a
Linux DC1-03-001 4.19.90-17.ky10.aarch64 #1 SMP Sun Jun 28 14:27:40 CST 2020 aarch64 aarch64 aarch64 GNU/Linux
[root@DC1-03-001 etc]# arch
aarch64
[root@DC1-03-001 etc]#
```
-----
提示:
所以,我们可以明确的知道:华为的鲲鹏服务器的操作系统架构信息为:==aarch64==
|目录名称|含义|适用范围|
|-|-|-|
|aarch64|ARM64 (aarch64)|==鲲鹏、飞腾==|
|armel|arm eabi little endian|不详、低端ARM硬件|
|armhf|arm hard float(32位的)|不详、低端ARM硬件|
|ppc64le|IBM PowerPC (ppc64le)|目标架构为64位PowerPC和Power Architecture处理器|
|s390x|IBM Z (s390x)|s390x是IBMSystemz系列大型机硬件平台,是银行或者大型企业或者科研单位用的,大部分用户接触不到。|
|x86_64|Intle/AMD (x86_64)|==兆芯、海光==|
从Docker官网看这个网址的含义,可以推测:这里存放的是各种CPU架构下的静态稳定版本
https://download.docker.com/linux/static/stable/
static:静态的
stable:稳定版
```
aarch64/
armel/
armhf/
ppc64le/
s390x/
x86_64/
```
#### 3.1.2、六大国产CPU分析
那么。我们知道目前国产电脑后者服务器的操作系统:银河麒麟、统信UOS
但是国产电脑的CPU又分为:
1、 飞腾:PK生态的主导者
2、 鲲鹏:快速崛起的领导者
3、 海光:性能领先的实干者
4、 龙芯:完全自主的引领者
5、 兆芯:合资CPU的探路者
6、 申威:为超算而生的强者
资料来源:
[六大国产CPU | 全面梳理分析]
[https://mp.weixin.qq.com/s?__biz=MzA4ODcwOTExMQ==&mid=2655607100&idx=3&sn=0fab62b33bcc64ce33a910ade25345d0&chksm=8b9bfba4bcec72b27ac1ef891aab10ebe3beb8129c424a3b8d6dbe5ac9bd4e07c63b679240f9&scene=27](https://mp.weixin.qq.com/s?__biz=MzA4ODcwOTExMQ==&mid=2655607100&idx=3&sn=0fab62b33bcc64ce33a910ade25345d0&chksm=8b9bfba4bcec72b27ac1ef891aab10ebe3beb8129c424a3b8d6dbe5ac9bd4e07c63b679240f9&scene=27)

**==个人分析说明补充:==**
> 也就是说基于MIPS机构的龙芯、以及基于Alpha架构的申威目前似乎还不能使用基于容器技术的Docker软件和Docker镜像(镜像文件也是需要和系统的架构保持一致的)。所以,我们目前最好采用整机厂家提供的基于:aarch64 和 x86_64 的国产设备实现开发与测试,也可以理解为:aarch64 (鲲鹏、飞腾)和 x86_64 (兆芯、海光)的设备,如果项目涉及到 ==基于(MIPS架构)龙芯 和(Alpha架构)申威==的国产设备时,可能需要在物理环境编译源码(开源软件和自研应用软件),并得到基础软件厂家的支持提供相关配套镜像(达梦、金仓、瀚高),再或者直接物理机直接安装软件(不通过Docker的容器部署),Alpha架构的申威系统通常应用于高算力环境应用领域和我们的应用似乎交集不大可以暂时忽略,但是国产龙芯设备未来是发展趋势,这块未来需要关注一下(因为龙芯设备才算是真正的纯国产CPU,只是目前的算力不足有待提升,而且==龙芯目前已放弃MIPS架构,采用LoongArch架构==今年的展会已经看到他们的进步是非常明显的,这块我们先关注行业变化,再想解决方案)。
----
### 3.2、离线部署Docker-对应的Linux版本到华为鲲鹏服务器:
#### 3.2.1、下载对应的Docker介质并解压到鲲鹏服务器
选择对应的服务器CPU架构的版本(华为鲲鹏服务器,选择:aarch64)
解释:
> 我这里下载了19.03.8和23.0.3两个版本,理由是:23.0.3是最新的版本,而19.03.8相对稳定,使用过程如果有问题可以调整版本
思路与步骤:
### ==**Step1:下载docker稳定版本(stable)并SFTP上传到服务器**==
下载统一的Docker版本和镜像版本,防止因版本导致的开发、测试、实施版本不一致导致的风险
本文使用的是:docker-19.03.8.tgz,其他待测试后再调整
**==提示:==**
如果不清楚如何上传文件到Linux服务器的小伙伴,可以看这里:
【MobaXterm服务器上传下载文件】
[https://www.bilibili.com/video/BV1FN4y1T7r7/?spm_id_from=333.788&vd_source=0bc9675b3a70f0c0f28fcd4a0b7da7bf](https://www.bilibili.com/video/BV1FN4y1T7r7/?spm_id_from=333.788&vd_source=0bc9675b3a70f0c0f28fcd4a0b7da7bf)
### ==**Step2:解压tgz文件,并拷贝至/usr/bin/目录下**==
在windows环境下载Docker的压缩包后,通过MobaXterm的SSH(SFTP)上传文件到国产银河麒麟服务器上(统一存放在docker_stable文件夹里面,便于日后统一管理),然后先使用命令:tar -zxvf docker-19.03.8.tgz 解压到当前文件夹下(docker_stable文件夹里面),再使用命令:cp docker/* /usr/bin/ 将解压好的 Docker 文件复制到 /usr/bin 目录下,这样就完成了Docker的部署,详细操作如下:
现在开始在服务器的根目录上创建一个docker_stable的目录存放docker的离线部署文件
通过MobaXterm自带的SFTP工具将本地文件上传至服务器,可安装tree命令工具,查看文件和目录结构
使用tree查看目录结构:
```
[root@DC1-03-001 /]# mkdir -m 711 docker_stable
[root@DC1-03-001 /]# cd /root/docker_stable/
[root@DC1-03-001 docker_stable]# tree
.
└── aarch64
├── docker-19.03.8.tgz
├── docker-23.0.3.tgz
├── docker-rootless-extras-19.03.8.tgz
└── docker-rootless-extras-23.0.3.tgz
1 directory, 4 files
[root@DC1-03-001 docker_stable]# tree -p
.
└── [drwx------] aarch64
├── [-rw-------] docker-19.03.8.tgz
├── [-rw-------] docker-23.0.3.tgz
├── [-rw-------] docker-rootless-extras-19.03.8.tgz
└── [-rw-------] docker-rootless-extras-23.0.3.tgz
1 directory, 4 files
[root@DC1-03-001 docker_stable]# tree -pu
.
└── [drwx------ root ] aarch64
├── [-rw------- root ] docker-19.03.8.tgz
├── [-rw------- root ] docker-23.0.3.tgz
├── [-rw------- root ] docker-rootless-extras-19.03.8.tgz
└── [-rw------- root ] docker-rootless-extras-23.0.3.tgz
1 directory, 4 files
[root@DC1-03-001 docker_stable]# tree -pus
.
└── [drwx------ root 4096] aarch64
├── [-rw------- root 56542257] docker-19.03.8.tgz
├── [-rw------- root 61068240] docker-23.0.3.tgz
├── [-rw------- root 9089701] docker-rootless-extras-19.03.8.tgz
└── [-rw------- root 21791976] docker-rootless-extras-23.0.3.tgz
1 directory, 4 files
[root@DC1-03-001 docker_stable]#
```
Q:如何在Linux系统解压缩tgz压缩文件
A:使用以下命令中即可:
解压压缩文件
$ tar -zxvf docker-19.03.8.tgz
运行效果:
```
[root@DC1-03-001 aarch64]# cd /root/docker_stable/aarch64/
[root@DC1-03-001 aarch64]# ls
docker-19.03.8.tgz docker-23.0.3.tgz docker-rootless-extras-19.03.8.tgz docker-rootless-extras-23.0.3.tgz
[root@DC1-03-001 aarch64]# tar -zxvf docker-19.03.8.tgz
docker/
docker/ctr
docker/containerd-shim
docker/docker
docker/docker-proxy
docker/dockerd
docker/containerd
docker/runc
docker/docker-init
[root@DC1-03-001 aarch64]#
```
然后通过tree命令可以看一下目录结构:
```
[root@DC1-03-001 aarch64]# tree -pus
.
├── [drwxrwxr-x zabbix 4096] docker
│ ├── [-rwxr-xr-x zabbix 32970720] containerd
│ ├── [-rwxr-xr-x zabbix 6009600] containerd-shim
│ ├── [-rwxr-xr-x zabbix 17854496] ctr
│ ├── [-rwxr-xr-x zabbix 55397891] docker
│ ├── [-rwxr-xr-x zabbix 69477264] dockerd
│ ├── [-rwxr-xr-x zabbix 546520] docker-init
│ ├── [-rwxr-xr-x zabbix 2965991] docker-proxy
│ └── [-rwxr-xr-x zabbix 9102400] runc
├── [-rw------- root 56542257] docker-19.03.8.tgz
├── [-rw------- root 61068240] docker-23.0.3.tgz
├── [-rw------- root 9089701] docker-rootless-extras-19.03.8.tgz
└── [-rw------- root 21791976] docker-rootless-extras-23.0.3.tgz
1 directory, 12 files
[root@DC1-03-001 aarch64]#
```
这样我们就清楚的看到,除了4个tgz压缩包文件之外,文件夹docker以及里面的文件就是目标文件了,
然后我们将解压好的 Docker 文件复制到 /usr/bin 目录下
$ cp docker/* /usr/bin/
运行效果查看:
```
[root@DC1-03-001 aarch64]# cp docker/* /usr/bin/
[root@DC1-03-001 aarch64]# cd /usr/bin/
[root@DC1-03-001 bin]# ls dock*
docker dockerd docker-init docker-proxy
[root@DC1-03-001 bin]# ls dock* -l
-rwx------ 1 root root 55397891 Apr 12 13:06 docker
-rwx------ 1 root root 69477264 Apr 12 13:06 dockerd
-rwx------ 1 root root 546520 Apr 12 13:06 docker-init
-rwx------ 1 root root 2965991 Apr 12 13:06 docker-proxy
[root@DC1-03-001 bin]#
```
### ==**Step3:注册docker服务**==
/etc/systemd/system
/run/systemd/system
/lib/systemd/system
这三个目录的配置文件优先级依次从高到低,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。
==**知识补充:**==
【/etc/systemd/system 和 /lib/systemd/system 的区别】
[https://blog.csdn.net/ll837448792/article/details/126603145](https://blog.csdn.net/ll837448792/article/details/126603145)
下文选择在【/etc/systemd/system/】进行配置:
在 /etc/systemd/system/ 目录下新增 docker.service 文件,将 docker 注册为服务,内容如下:
```
[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 --selinux-enabled=false --insecure-registry=127.0.0.1
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
```
此处的--insecure-registry=127.0.0.1(此处改成你私服ip)设置是针对有搭建了自己私服Harbor时允许docker进行不安全的访问,否则访问将会被拒绝。
具体操作,可以通过vi命令创建文件并编辑内容后保存,如下:
```
[root@DC1-03-001 bin]# cd /etc/systemd/system/
[root@DC1-03-001 system]# ls
bluetooth.target.wants dbus-org.freedesktop.network1.service getty.target.wants sockets.target.wants
cron.service dbus-org.freedesktop.nm-dispatcher.service graphical.target.wants sysinit.target.wants
ctrl-alt-del.target dbus-org.freedesktop.timesync1.service multi-user.target.wants timedatex.service
dbus-org.bluez.service default.target network-online.target.wants
[root@DC1-03-001 system]# vi docker.service
[root@DC1-03-001 system]# ls
bluetooth.target.wants dbus-org.freedesktop.network1.service docker.service network-online.target.wants
cron.service dbus-org.freedesktop.nm-dispatcher.service getty.target.wants sockets.target.wants
ctrl-alt-del.target dbus-org.freedesktop.timesync1.service graphical.target.wants sysinit.target.wants
dbus-org.bluez.service default.target multi-user.target.wants timedatex.service
[root@DC1-03-001 system]#
```
Q:如何在Linux系统编辑维护文本文件或配置文件
A:使用以下命令中即可:
vi的命令不熟悉的小伙伴可以看这里:https://www.runoob.com/linux/linux-vim.html
简单的说就是通过vi指令,创建了文件docker.service然后在vi的编辑界面下从文档中复制了内容后黏贴进vi编辑器,然后输入:(输入冒号),光标移动到最后一行后,输入wq按回车键即可。(wq:写入并保存退出)
效果如下:
```
[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 --selinux-enabled=false --insecure-registry=127.0.0.1
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
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
:wq
```
简单的说就是通过vi指令,创建了文件docker.service然后在vi的编辑界面下从文档中复制了内容后黏贴进vi编辑器,然后输入:(输入冒号),光标移动到最后一行后,输入wq按回车键即可。(wq:写入并保存退出)
为 docker.service 文件添加执行权限
$ chmod +x /etc/systemd/system/docker.service
运行效果如下:
```
[root@DC1-03-001 system]# ls -l
total 32
drwxr-xr-x 2 root root 4096 Apr 10 07:55 bluetooth.target.wants
lrwxrwxrwx 1 root root 37 Apr 10 07:54 cron.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx 1 root root 37 Apr 10 07:54 ctrl-alt-del.target -> /usr/lib/systemd/system/reboot.target
lrwxrwxrwx 1 root root 41 Apr 10 07:55 dbus-org.bluez.service -> /usr/lib/systemd/system/bluetooth.service
lrwxrwxrwx 1 root root 48 Apr 10 07:54 dbus-org.freedesktop.network1.service -> /usr/lib/systemd/system/systemd-networkd.service
lrwxrwxrwx 1 root root 57 Apr 10 07:55 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx 1 root root 49 Apr 10 07:54 dbus-org.freedesktop.timesync1.service -> /usr/lib/systemd/system/systemd-timesyncd.service
lrwxrwxrwx 1 root root 37 Apr 10 07:56 default.target -> /lib/systemd/system/multi-user.target
-rw------- 1 root root 1198 Apr 12 13:15 docker.service
drwxr-xr-x 2 root root 4096 Apr 10 07:54 getty.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:54 graphical.target.wants
drwxr-xr-x 2 root root 4096 Apr 9 23:59 multi-user.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:55 network-online.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:54 sockets.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:54 sysinit.target.wants
lrwxrwxrwx 1 root root 9 Apr 1 2020 timedatex.service -> /dev/null
[root@DC1-03-001 system]# chmod +x /etc/systemd/system/docker.service
[root@DC1-03-001 system]# ls -l
total 32
drwxr-xr-x 2 root root 4096 Apr 10 07:55 bluetooth.target.wants
lrwxrwxrwx 1 root root 37 Apr 10 07:54 cron.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx 1 root root 37 Apr 10 07:54 ctrl-alt-del.target -> /usr/lib/systemd/system/reboot.target
lrwxrwxrwx 1 root root 41 Apr 10 07:55 dbus-org.bluez.service -> /usr/lib/systemd/system/bluetooth.service
lrwxrwxrwx 1 root root 48 Apr 10 07:54 dbus-org.freedesktop.network1.service -> /usr/lib/systemd/system/systemd-networkd.service
lrwxrwxrwx 1 root root 57 Apr 10 07:55 dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
lrwxrwxrwx 1 root root 49 Apr 10 07:54 dbus-org.freedesktop.timesync1.service -> /usr/lib/systemd/system/systemd-timesyncd.service
lrwxrwxrwx 1 root root 37 Apr 10 07:56 default.target -> /lib/systemd/system/multi-user.target
-rwx------ 1 root root 1198 Apr 12 13:15 docker.service
drwxr-xr-x 2 root root 4096 Apr 10 07:54 getty.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:54 graphical.target.wants
drwxr-xr-x 2 root root 4096 Apr 9 23:59 multi-user.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:55 network-online.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:54 sockets.target.wants
drwxr-xr-x 2 root root 4096 Apr 10 07:54 sysinit.target.wants
lrwxrwxrwx 1 root root 9 Apr 1 2020 timedatex.service -> /dev/null
[root@DC1-03-001 system]#
```
重新加载配置文件
Q:如何查看Docker的命令集(判断Docker是否安装)
A:使用以下命令中的一个命令即可:
$ docker
$ docker --help
运行效果
```
[root@DC1-03-003 ~]# docker
-bash: docker: command not found
```
说明没有安装docker找不到命令
反之,如下:
```
[root@DC1-03-001 ~]# docker
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set
with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
deploy Deploy a new stack or update an existing stack
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Run 'docker COMMAND --help' for more information on a command.
```
Q:如何查看Docker的版本信息
A:使用以下命令中的一个命令即可:
$ docker -v
$ docker version
运行效果
```
[root@DC1-03-001 ~]# docker -v
Docker version 19.03.8, build afacb8b
[root@DC1-03-001 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.8
API version: 1.40
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:23:06 2020
OS/Arch: linux/arm64
Experimental: false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```