利用别人的镜像制作属于自己的Docker镜像包(nginx,mysql,redis等)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第25天,点击查看活动详情


1.写在前面

鉴于目前,云原生k8s的部署方式,越来越广泛。

很多项目,尤其是微服务的想,容器化部署,更使得我们的部署,变得更快捷。

当我们需要集群部署的时候,很多我们只需要,用相同的一个镜像,运行多几遍,就完事的事了!!!

虽然说容器化部署,更方便了运维人员部署,门槛可能也降低了不少。

但是呢,很多时候,我们在部署生产环境的时候,大部分人,都需要使用vpn,才能ssh上生产环境的服务器。

那远程连接的网络,就变得会很吃紧。这就导致了下面的这个问题:

docker镜像,虽说是一个包含很小的linux运行环境,但是我们的服务要打成一个docker镜像。

那至少要包含这些东西:可运行的linux环境 + jdk环境 + springboot jar包

这3样加起来,就使得我们要上传到正式环境的docker包,远远大于传统方式只需上传的springboot jar包

以上这个问题,应该都会困惑比较多的人,毕竟正式环境的服务器,远程传输文件的网络,一般来说都比较慢。

很多时候,需要更新一个服务,可能要上传的docker镜像包,就差不多是600MB - 1G这样。

运维人员的耐心,可能都要被磨没了!!!T_T

image.png

哈哈,一般的做法,就是对docker镜像包,进行瘦身喽,尽量减少docker镜像包的大小喽。

那我们今天就来讲讲一般的做法:

1.使用官方提供的镜像(官方已经经过瘦身,大小应该可以接收)

2.选用体积更小的linux镜像,例如:alpine(可能会有坑,大家伙可以去踩一下)

3.可以尝试挂载宿主机的服务,例如:linux环境 + jdk环境 + springboot jar包,这其中的jdk环境可以不要,直接使用挂载的方式,使用宿主机的jdk环境。

4.更多......

那我们今天就来讲讲第1种方式,制作属于自己的Docker镜像包(nginx,mysql,redis等)。

开干!!!

image.png


2.制作nginx,mysql,redis等镜像包

2.1.redis打包

2.1.1环境准备
  • /opt/llsydn/dockerfile/redis

从docker hub中pull拉取redis镜像,这里以6.2.7版本为例

docker pull redis:6.2.7
复制代码

image.png

官方提供的镜像,就很小了:地址

docker pull redis:6.2.7

由于公司192.168.4.xxx上不了网,所以可以找一台能上网的服务器,pull拉取redis的镜像。然后再保存下来,再上传到xxx

docker save -o redis.tar redis:latest

再到xxx进行load加载到当前docker本地中

docker load -i redis.tar

注意:redis.conf文件

1.daemonize no     这个配置不能设置为yes否则启动失败(重要)
2.bind 0.0.0.0 
3.dir /data
4.requirepass llsydn123 密码
5.port 6379
复制代码

这个redis.conf可以先直接启动刚拉取的redis镜像,然后进入到容器,再将/etc/redis/redis.conf,复制出来。

2.1.2Dockerfile
FROM redis:6.2.7
COPY redis.conf /etc/redis/redis.conf
CMD [ "redis-server", "/etc/redis/redis.conf" ]
复制代码
2.1.3打包发布
  • vi build.sh
docker build -t llsydn/redis:6.2.7 -f ./Dockerfile .
docker push llsydn/redis:6.2.7
docker rmi llsydn/redis:6.2.7
复制代码
2.1.4效果

harbor地址

账号密码:admin、llsydn123

image.png

harbor的安装可查看这里:点击查看

2.2.nginx打包

2.2.1环境准备
  • /opt/llsydn/dockerfile/nginx

从docker hub中pull拉取nginx镜像,这里以1.21.4版本为例

docker pull nginx:1.21.4
复制代码

image.png

官方提供的镜像,就很小了:地址

docker pull nginx:1.21.4

由于公司192.168.4.xxx上不了网,所以可以找一台能上网的服务器,pull拉取nginx的镜像。然后再保存下来,再上传到xxx

docker save -o nginx.tar nginx

再到178进行load加载到当前docker本地中

docker load -i nginx.tar

2.2.2Dockerfile

不用写Dockerfile了,直接将nginx镜像,用tag打标签,变成我们的镜像即可。

2.2.3打包发布
  • vi build.sh
docker tag [ImageId] llsydn/nginx:1.21.4
docker push llsydn/nginx:1.21.4
docker rmi llsydn/nginx:1.21.4
复制代码

注意:[ImageId] 这个为nginx,镜像的id

使用docker images查看一下即可

2.2.4效果

harbor地址

账号密码:admin、llsydn123

image.png

harbor的安装可查看这里:点击查看

2.3.mysql打包

2.3.1环境准备
  • /opt/llsydn/dockerfile/mysql

从docker hub中pull拉取mysql的镜像,这里以5.7.36版本为例

docker pull mysql:5.7.36
复制代码

image.png

官方提供的镜像,就很小了:地址

docker pull mysql:5.7.36

由于公司192.168.4.xxx上不了网,所以可以找一台能上网的服务器,pull拉取mysql的镜像。然后再保存下来,再上传到xxx

docker save -o mysql.tar mysql:5.7.36

再到178进行load加载到当前docker本地中

docker load -i mysql.tar 效果如下:

2.3.2Dockerfile

不用写Dockerfile了,直接将mysql镜像,用tag打标签,变成我们的镜像即可。

2.3.3打包发布
  • vi build.sh
docker tag [ImageId] llsydn/mysql:5.7.36
docker push llsydn/mysql:5.7.36
docker rmi llsydn/mysql:5.7.36
复制代码

注意:[ImageId] 这个为mysql,镜像的id

使用docker images查看一下即可,例如这里为:938b57d64674

2.3.4效果

harbor地址

账号密码:admin、llsydn123

image.png


好了,以上就是我个人的实操了。

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png

猜你喜欢

转载自juejin.im/post/7110401082320224269