0
点赞
收藏
分享

微信扫一扫

docker的底层原理,带你上天

圣杰 2023-05-14 阅读 56

目录

启动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 < -EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 重新加载配置
sysctl -p

卸载Docker

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

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

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

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

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

Docker镜像加速器配置

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供 了国内加速器服务,例如:

网易云加速器 https: hub - mirror.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 证书私钥,期间需要输入两次用户名和密码,生成文件为 ca - key.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

创建服务端私钥,生成文件为 server - key.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证书私钥密码,生成文件为server-cert.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

 为了让秘钥适合客户端认证,创建一个扩展配置文件extfile-client.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\docker - ca 这个位置。

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

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给链接上了


 

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

举报

相关推荐

0 条评论