利用別人的映象製作屬於自己的Docker映象包(nginx,mysql,redis等)

語言: CN / TW / HK

theme: cyanosis

持續創作,加速成長!這是我參與「掘金日新計劃 · 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