前言
現(xiàn)在我所在的公司使用的操作系統(tǒng)都是centos7.4版本的, 當然應(yīng)用也是部署在centos上面, 那么如果使用docker部署的話, 也自然而然的想到基于centos鏡像來構(gòu)建自己的應(yīng)用鏡像; 但是centos基礎(chǔ)鏡像與應(yīng)用鏡像之間也可以構(gòu)建一下基礎(chǔ)框架的鏡像, 比如: 基礎(chǔ)JDK鏡像, 基于Python環(huán)境鏡像等等; 相信大家也遇到過, 構(gòu)建了一個鏡像發(fā)現(xiàn)部署應(yīng)用的時候打印出來的中文是亂碼, 日志的時間顯示的是UTC時間, 比北京時間少了8個小時, 想看某一個進程是否起來的時候發(fā)現(xiàn)telnet命令 ps命令 netstat命令不可用, 想要編輯文件的時候發(fā)現(xiàn)vim命令也不能用; 今天我們就來看一下如何基于centos鏡像構(gòu)建一個增強版的centos鏡像;
鏡像倉庫的搭建
在構(gòu)建自己的鏡像之前, 需要有一個地方能夠存放我們的鏡像便于我們后面使用直接拿來可以用; 大概有兩種思路: 第一種、在自己的機器上構(gòu)建, 然后通過命令 docker save -o xxx.tar.gz xxx-image:v1.0
, 然后上傳到自己的云盤上, 使用的時候下載到本地, 然后 docker load -i xxx.tar.gz
; 這種方式是沒問題的, 但是就是比較繁瑣(打包,上傳下載,load的時候還要找到目錄神馬的); 第二種、創(chuàng)建自己的一個docker image registry, 對于本地構(gòu)建的鏡像 只需要重新 tag一下, docker push即可完成;下載的時候只需要docker pull就可以了, 全部都可以在命令行上面搞定, 想想都有一種褲褲的感覺;
說了這么多, 讓我們一起看一下如何搭建一個自己的鏡像倉庫;(本文中僅僅使用了阿里云的倉庫, 建了自己的namespace而已),當然也可以自己申請云主機, 然后搭建私服都是沒有問題的;
首先登錄阿里云, 然后從服務(wù)中找到容器鏡像服務(wù)所在的位置, 如下圖所示:
點擊容器鏡像服務(wù)進入到鏡像倉庫創(chuàng)建界面如下圖
點擊創(chuàng)建, 進入到創(chuàng)建倉庫界面
填寫完信息之后, 點擊下一步選擇如何上傳鏡像
因為我的需求就是從本地倉庫構(gòu)建, 不過我認為本地倉庫構(gòu)建是最靈活的一種方式;
創(chuàng)建好鏡像存儲的位置之后, 就可以在本地創(chuàng)建Dockerfile來構(gòu)建自己的鏡像了;
構(gòu)建centos增強版鏡像
1、首先, 創(chuàng)建Dockerfile文件, 將如下內(nèi)容放入文件中
FROM centos
MAINTAINER terry.king "1575639478@qq.com"
# 定義時區(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=你的阿里云賬號 registry.cn-shenzhen.aliyuncs.com
用于登錄的用戶名為阿里云賬號全名,密碼為開通服務(wù)時設(shè)置的密碼。
您可以在產(chǎn)品控制臺首頁修改登錄密碼。就是第二張創(chuàng)建鏡像倉庫按鈕的左邊設(shè)置registry登錄密碼
3、構(gòu)建鏡像并將鏡像推送到Registry
$ docker build -t terrylmay/centos .
$ docker tag terrylmay/centos registry.cn-shenzhen.aliyuncs.com/terrylmay/centos:[鏡像版本號]
$ docker push registry.cn-shenzhen.aliyuncs.com/terrylmay/centos:[鏡像版本號]
默認的鏡像版本號為latest
總結(jié)
這樣在構(gòu)建應(yīng)用鏡像的時候就可以解決序言中提到的一系列問題了. 方便自己快速構(gòu)建自己的應(yīng)用鏡像;