一、说明
工作中我们需要k8s集群中使用一些docker服务,或者是利用一个docker容器,做一些镜像的拉取、制作、上传。如果使用集群的docker,长时间会积累大量的废弃镜像,占用磁盘,导致集群无法正常使用。另一方面,用户可能利用docker做一些违规操作,直接把k8s集群服务搞挂。
为了避免以上问题,我们使用远程docker服务,这样让docker服务于集群完全脱离。制作一个docker服务镜像,远程连接到远程的docker服务。
通常我们远程连接docker服务,命令中需要加 -h 连接远程机器的docker。但是,每次加-h 很不友好,如何不加-h 也可远程连接docker服务呢?就像使用本地docker一样使用远程docker。做法如下:
二、 远程机器docker开启远程docker服务
按照如下配置
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock -H tcp://0.0.0.0:2375 #ExecStart开头的行换成这个
重启docker服务
systemctl daemon-reload
service docker restart
三、 制作docker镜像
也就是制作一个centons或者Ubuntu镜像,启动后安装docker环境。当然也可以使用dockerfile去制作。
下面是我制作好的centos镜像并里面安装了docker。
1、进入容器
docker exec -it d52ee6cc718b /bin/bash
2、查看docker文件位置
将/usr/bin中传入以下三个文件
docker (这个文件需要修改添加如下内容) 是文件docker客户端执行命令前需要添加的参数
/usr/bin/docker-client -H 192.168.0.58 $@
192.168.0.58 远程docker服务器的IP地址
/usr/bin/docker-client:传入的docker-client路径
docker-client(直接传入不用做修改) docker客户端
docker-entrypoint.sh(直接传入不用做修改) 功能覆盖镜像默认命令,本来远程执行docker需要添加-h 远程docekr服务器ip,通过这个脚本,就会把这个命令重写,用户无感知,在容器中使用远程docker服务,也就是执行docker命令就好像是执行本地docker一样。其实是用的远程的docker
docker :安装了docker后 /usr/bin/路径下本身就有,把内容修改为上面的即可
docker-client 、docker-entrypoint.sh直接加进去:下载地址:
docker-client 、docker-entrypoint.sh下载
3、创建新的docker镜像
将上面三个文件传入容器中的docker所在路径后,将这个容器重新打一个镜像,这个镜像就包含了支持远程构建镜像的功能。无论在什么地方启动这个镜像并使用docker服务,其实都是使用的远程机器的docker服务。(前提是要与远程docker服务器要通)
退出容器
查看容器
docker ps
将以上容器重新创建为一个新的镜像。
docker commit -a “peishunwu” -m “add docker and tools” d5884406725a dockerubuntu
查看新创建的镜像
docker images
新的镜像就具备了,启动容器后执行docker命令其实是在远程docker(192.168.0.58)服务器