前言
現(xiàn)在我所在的公司使用的操作系統(tǒng)都是centos7.4版本的, 當(dāng)然應(yīng)用也是部署在centos上面, 那么如果使用docker部署的話(huà), 也自然而然的想到基于centos鏡像來(lái)構(gòu)建自己的應(yīng)用鏡像; 但是centos基礎(chǔ)鏡像與應(yīng)用鏡像之間也可以構(gòu)建一下基礎(chǔ)框架的鏡像, 比如: 基礎(chǔ)JDK鏡像, 基于Python環(huán)境鏡像等等; 相信大家也遇到過(guò), 構(gòu)建了一個(gè)鏡像發(fā)現(xiàn)部署應(yīng)用的時(shí)候打印出來(lái)的中文是亂碼, 日志的時(shí)間顯示的是UTC時(shí)間, 比北京時(shí)間少了8個(gè)小時(shí), 想看某一個(gè)進(jìn)程是否起來(lái)的時(shí)候發(fā)現(xiàn)telnet命令 ps命令 netstat命令不可用, 想要編輯文件的時(shí)候發(fā)現(xiàn)vim命令也不能用; 今天我們就來(lái)看一下如何基于centos鏡像構(gòu)建一個(gè)增強(qiáng)版的centos鏡像;
鏡像倉(cāng)庫(kù)的搭建
在構(gòu)建自己的鏡像之前, 需要有一個(gè)地方能夠存放我們的鏡像便于我們后面使用直接拿來(lái)可以用; 大概有兩種思路: 第一種、在自己的機(jī)器上構(gòu)建, 然后通過(guò)命令 docker save -o xxx.tar.gz xxx-image:v1.0
, 然后上傳到自己的云盤(pán)上, 使用的時(shí)候下載到本地, 然后 docker load -i xxx.tar.gz
; 這種方式是沒(méi)問(wèn)題的, 但是就是比較繁瑣(打包,上傳下載,load的時(shí)候還要找到目錄神馬的); 第二種、創(chuàng)建自己的一個(gè)docker image registry, 對(duì)于本地構(gòu)建的鏡像 只需要重新 tag一下, docker push即可完成;下載的時(shí)候只需要docker pull就可以了, 全部都可以在命令行上面搞定, 想想都有一種褲褲的感覺(jué);
說(shuō)了這么多, 讓我們一起看一下如何搭建一個(gè)自己的鏡像倉(cāng)庫(kù);(本文中僅僅使用了阿里云的倉(cāng)庫(kù), 建了自己的namespace而已),當(dāng)然也可以自己申請(qǐng)?jiān)浦鳈C(jī), 然后搭建私服都是沒(méi)有問(wèn)題的;
首先登錄阿里云, 然后從服務(wù)中找到容器鏡像服務(wù)所在的位置, 如下圖所示:

點(diǎn)擊容器鏡像服務(wù)進(jìn)入到鏡像倉(cāng)庫(kù)創(chuàng)建界面如下圖

點(diǎn)擊創(chuàng)建, 進(jìn)入到創(chuàng)建倉(cāng)庫(kù)界面

填寫(xiě)完信息之后, 點(diǎn)擊下一步選擇如何上傳鏡像

因?yàn)槲业男枨缶褪菑谋镜貍}(cāng)庫(kù)構(gòu)建, 不過(guò)我認(rèn)為本地倉(cāng)庫(kù)構(gòu)建是最靈活的一種方式;
創(chuàng)建好鏡像存儲(chǔ)的位置之后, 就可以在本地創(chuàng)建Dockerfile來(lái)構(gòu)建自己的鏡像了;
構(gòu)建centos增強(qiáng)版鏡像
1、首先, 創(chuàng)建Dockerfile文件, 將如下內(nèi)容放入文件中
FROM centos
MAINTAINER terry.king "1575639478@qq.com"
# 定義時(shí)區(qū)參數(shù)
ENV TZ=Asia/Shanghai
RUN ls -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
# 設(shè)置編碼
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV LC_ALL "zh_CN.UTF-8"
# 安裝基礎(chǔ)yum包
RUN yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel patch net-tools iproute telnet bind-utils wget kde-l10n-Chinese glibc-common
2、登錄阿里云Docker Registry
sudo docker login --username=你的阿里云賬號(hào) registry.cn-shenzhen.aliyuncs.com
用于登錄的用戶(hù)名為阿里云賬號(hào)全名,密碼為開(kāi)通服務(wù)時(shí)設(shè)置的密碼。
您可以在產(chǎn)品控制臺(tái)首頁(yè)修改登錄密碼。就是第二張創(chuàng)建鏡像倉(cāng)庫(kù)按鈕的左邊設(shè)置registry登錄密碼
3、構(gòu)建鏡像并將鏡像推送到Registry
$ docker build -t terrylmay/centos .
$ docker tag terrylmay/centos registry.cn-shenzhen.aliyuncs.com/terrylmay/centos:[鏡像版本號(hào)]
$ docker push registry.cn-shenzhen.aliyuncs.com/terrylmay/centos:[鏡像版本號(hào)]
默認(rèn)的鏡像版本號(hào)為latest
總結(jié)
這樣在構(gòu)建應(yīng)用鏡像的時(shí)候就可以解決序言中提到的一系列問(wèn)題了. 方便自己快速構(gòu)建自己的應(yīng)用鏡像;