目录

启动Docker

​编辑

建立 Docker 用户

​编辑

测试 Docker 是否正常工作

卸载Docker

Docker镜像加速器配置

配置镜像

检查加速器是否生效

如何在Linux中的.json文件下保存并退出

如果我是使用vi操作进来的,我该如何保存并退出呢?

如何在Linux系统下删除deamon.json文件

检查加速器是否生效

云服务商

Docker远程访问

开启访问

Docker远程访问是为了干什么?

安全认证

配置Docker支持TLS

客户端访问


启动Docker

# 启动Docker命令systemctl start docker# 查看启动结果systemctl status docker

建立 Docker 用户

# 创建一个docker用户useradd mydocker# 将用户加入到docker组usermod -aG docker mydocker# 给用户设置密码passwd mydocker# 查看是否正确修改组成功id mydocker# 看到类似的输出 uid=1001(mydocker) gid=1001(mydocker) 组=1001(mydocker),993(docker)

测试 Docker 是否正常工作

# 切换到mydocker用户su mydocker# 执行测试命令docker run hello-world

若能正常输出以上信息,则说明安装成功并且说明docker能够正常运行。

默认配置下,如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled

请添加内核配置参数以启用这些功能,需要使用root用户

# 切换回管理员sudo -s# 启动功能命令tee -a /etc/sysctl.conf < -EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF# 重新加载配置sysctl -p

卸载Docker

如果你想要卸载Docker引擎,可以执行下面的命令

yum remove docker-ce \docker-ce-cli \containerd.io \docker-compose-plugin

主机上的镜像、容器、卷或自定义配置文件不会自动删除。要删除所有镜像、容器和卷,执行下面的命令

rm -rf /var/lib/dockerrm -rf /var/lib/containerd

您必须手动删除任何已编辑的配置文件。

Docker镜像加速器配置

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供 了国内加速器服务,例如: 网易云加速器 https: hubmirror.c.163.com 百度云加速器 https: mirror.baidubce.com DAOCloud https: w .daocloud.io/mirror 阿里云加速器(需登录账号获取)

配置镜像

/etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件

#如果文件不存在 新建文件touch daemon.json# 编辑文件 vi daemon.json 添加{}下面的内容{"registry-mirrors": ["https: hub-mirror.c.163.com","https: mirror.baidubce.com","http: f1361db2.m.daocloud.io","https: registry.docker-cn.com"]}

下面错了,一定要带大括号!一定要带大括号!一定要带大括号!

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。 重启服务

# 重新加载配置systemctl daemon-reload# 重启docker服务systemctl restart docker# 查看docker状态systemctl status docker

检查加速器是否生效

执行 docker info ,如果从结果中看到了如下内容,说明配置成功。

如何在Linux中的.json文件下保存并退出

在Linux中保存并退出.json文件的步骤如下:

  1. 打开终端并进入包含.json文件的目录。

  2. 使用文本编辑器打开.json文件。例如,使用nano编辑器:

nano file.json
  1. 进行必要的更改。

  2. 按下 Ctrl + O 以保存文件。

  3. 按下 Ctrl + X 退出编辑器。

现在,您的更改已经保存在.json文件中。

如果我是使用vi操作进来的,我该如何保存并退出呢?

如果您正在使用vi编辑器进行编辑,可以按下Esc键退出编辑模式,并按下:wq命令保存并退出文件。具体步骤如下:

  1. 按下i键进入编辑模式,开始编辑文件。
  2. 编辑完毕后,按下Esc键退出编辑模式。
  3. 输入:wq命令保存并退出文件。注意,冒号是必须的。
  4. 按下回车键,文件将被保存并退出编辑器。

如果您只是想退出编辑器而不保存更改,可以按下Esc键进入命令模式,并按下:q!命令强制退出不保存更改。

如何在Linux系统下删除deamon.json文件

您可以使用rm命令删除deamon.json文件。打开终端并输入以下命令:

sudo rm /etc/docker/daemon.json

请注意,使用sudo命令需要管理员权限,以便在系统中执行此操作。

# 重新加载配置systemctl daemon-reload# 重启docker服务systemctl restart docker# 查看docker状态systemctl status docker


检查加速器是否生效

执行 docker info ,如果从结果中看到了如下内容,说明配置成功。

云服务商

某些云服务商提供了仅供内部访问的镜像服务,当您的 Docker 运行在云平台时可以选择它们。 Azure 中国镜像 https: dockerhub.azk8s.cn 腾讯云 https: mirror.ccs.tencentyun.com

Docker远程访问

开启访问

参考链接: https://docs.docker.com/config/daemon/remote-access/ 使用下面命令编辑 docker 服务启动文件

systemctl edit docker.service

添加或修改以下行,替换为您自己的值, ip 地址修改成功你自己服务器的 ip 地址(我当前监听的是我自己的虚拟机IP)

[Service]ExecStart=ExecStart=/usr/bin/dockerd -H fd: -H tcp: 192.168.220.128:2375 containerd=/run/containerd/containerd.sock

然后保存文件,执行下面命令重新加载 systemctl 配置。

Docker远程访问是为了干什么?

Docker远程访问是为了让用户可以从本地或其他机器远程连接到运行Docker的服务器,以便管理和操作Docker容器和镜像。通过远程访问,用户可以通过网络访问Docker API,从而执行各种操作,如启动、停止、重启容器,上传或下载镜像等。这样可以方便地在多个机器之间共享容器和镜像,同时也提高了Docker的灵活性和可移植性。

然后保存文件,执行下面命令重新加载 systemctl 配置。

systemctl daemon-reload

重启Docker容器

systemctl restart docker

通过查看 netstat 的输出以确认 dockerd 正在侦听配置的端口,以检查更改是否已生效。

netstat -lntp | grep dockerd

开放防火墙端口

# 开放端口firewall-cmd --add-port=2375/tcp --permanent# 重新加载防火墙firewall-cmd --reload

安全认证

由于开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵、挖矿、 CPU 飙升这些情况都有发生。 为解决这个问题:我们只要使用安全传输层协议(TLS)进行传输并使用 CA 认证即可。 参考链接: https://docs.docker.com/engine/security/protect-access/ 制作证书和秘钥

mkdir /home/docker-ca && cd /home/docker-ca

创建CA证书私钥,期间需要输入两次用户名和密码,生成文件为cakey.pem

openssl genrsa -aes256 -out ca-key.pem 4096

密码根据自己情况输入就行,比如我输入都是 root 根据私钥创建 CA 证书,期间需要输入上一步设置的私钥密码,生成文件为 ca.pem

openssl req -new -x509 -days 365 -key ca-key.pem \-sha256 -subj "/CN=*" -out ca.pem

创建服务端私钥,生成文件为serverkey.pem

openssl genrsa -out server-key.pem 4096

创建服务端证书签名请求文件,用于CA证书给服务端证书签名,生成文件server.csr

openssl req -subj "/CN=*" -sha256 -new \-key server-key.pem -out server.csr

创建CA证书签名好的服务端证书,期间需要输入CA证书私钥密码,生成文件为servercert.pem

openssl x509 -req -days 365 -sha256 -in server.csr \-CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem

创建客户端私钥,生成文件为key.pem

openssl genrsa -out key.pem 4096

创建客户端证书签名请求文件,用于CA证书给客户证书签名,生成文件client.csr

openssl req -subj "/CN=client" -new -key key.pem -out client.csr

为了让秘钥适合客户端认证,创建一个扩展配置文件extfileclient.cnf

echo extendedKeyUsage = clientAuth > extfile-client.cnf

创建CA证书签名好的客户端证书,期间需要输入CA证书私钥密码,生成文件为cert.pem

openssl x509 -req -days 365 -sha256 -in client.csr \-CA ca.pem -CAkey ca-key.pem -CAcreateserial \-out cert.pem -extfile extfile-client.cnf

删除创建过程中多余的文件

rm -rf ca.srl server.csr client.csr extfile-client.cnf

最终生成文件如下,有了它们我们就可以进行基于TLS的安全访问了

ca.pem CA 证书 ca-key.pem CA 证书私钥 server-cert.pem 服务端证书 server-key.pem 服务端证书私钥 cert.pem 客户端证书 key.pem 客户端证书私钥

配置Docker支持TLS

编辑docker服务启动文件

systemctl edit docker.service

在原来的基础上往后添加启动参数

[Service]ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://192.168.83.130:2375 --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/home/docker-ca/ca.pem --tlscert=/home/docker-ca/server-cert.pem --tlskey=/home/docker-ca/server-key.pem

然后保存文件,执行下面命令重新加载systemctl配置。

systemctl daemon-reload

重启Docker容器

systemctl restart docker

客户端访问

下载证书到本地磁盘,主要下载下面三个文件 ca.pem CA证书 cert.pem 客户端证书 key.pem 客户端证书私钥 比如我下载到我的本地电脑的D:\Workspace\dockerca这个位置。

记住这个位置,后面打包部署的时候需要指定改目录的,具体使用我们在打包部署的时候会用到。

scp root@192.168.83.130:/home/docker-ca/ca.pem root@192.168.83.130:/home/docker-ca/cert.pem root@192.168.83.130:/home/docker-ca/key.pem D:\Workspace\docker-ca

哎呦,我滴个乖乖,真是快没有把我累死

就离谱,之前删除vmware的时候没有删干净,可倒好,我打开控制面板,网络连接,虚拟机的适配器都没有了,太离谱!

之后下那个ccleaner,找来找去,看了一篇大佬的博客才把问题解决

解决本机网络适配器中没有虚拟网卡VMnet1、VMnet8_如何在物理机中看到虚拟网络1和虚拟网络8_BK_小小关的博客-CSDN博客

终于是把xftp给链接上了

可算是把这三位爷都弄进去了