利用Dockerfile創(chuàng)建一些基礎(chǔ)鏡像

在學(xué)習(xí) docker 的過程中彩匕,我們會(huì)經(jīng)常與鏡像打交道虐秋,同時(shí)也要經(jīng)常與網(wǎng)絡(luò)打交道,下載遠(yuǎn)程鏡像的快慢幾乎都是靠人品來支撐授帕,這樣以來特姐,學(xué)習(xí)的效率會(huì)大大降低晶丘,而且遠(yuǎn)程的一些鏡像,很多時(shí)候未必適合自己使用的需求唐含,因此铣口,制作一些基礎(chǔ)鏡像用于日常使用滤钱,就顯得非常必要了

Docker Github地址:https://github.com/eryajf/docker_learn

構(gòu)建 CentOS7.4

需要用到四個(gè)文件

[root@localhost centos7]$ls
aliyun-epel.repo  aliyun-mirror.repo  Dockerfile  supervisord.conf

1.Dockerfile

#
# Dockerizing CentOS7: Dockerfile for building CentOS images
#
#需要一個(gè)基礎(chǔ)鏡像,這里從國內(nèi)的daocloud下載脑题,速度比較快。
FROM       daocloud.io/library/centos:centos7.4.1708
 
#維護(hù)者
MAINTAINER eryajf <Linuxlql@163.com>
 
#設(shè)置一個(gè)時(shí)區(qū)的環(huán)境變量
ENV TZ "Asia/Shanghai"
 
#虛擬終端
ENV TERM xterm
 
#dockerfile中有2條命令可以復(fù)制文件铜靶,1.COPY 2.ADD叔遂, ADD比COPY多2個(gè)功能,可以寫成連接 直接COPY到container争剿,如果是壓縮文件已艰,add能自動(dòng)解壓
ADD aliyun-mirror.repo /etc/yum.repos.d/CentOS-Base.repo
ADD aliyun-epel.repo /etc/yum.repos.d/epel.repo
 
RUN yum install -y curl wget tar bzip2 unzip vim-enhanced passwd sudo yum-utils hostname net-tools rsync man && \
    yum install -y gcc gcc-c++ git make automake cmake patch logrotate python-devel libpng-devel libjpeg-devel && \
    yum install -y --enablerepo=epel pwgen python-pip python-setuptools.noarch lrzsz ntp docker-client && \
    yum clean all
 
#配置supervisor 進(jìn)程管理工具,運(yùn)行單個(gè)進(jìn)程可以不使用
RUN easy_install supervisor && \
    mkdir -m 755 -p /etc/supervisor && \
    mkdir -m 755 /etc/supervisor/conf.d
ADD supervisord.conf /etc/supervisor/supervisord.conf
 
EXPOSE 22
 
ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]

2.兩個(gè) yum 源

列題一:

[root@localhost centos7]$cat aliyun-epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
 
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0
 
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

列題二:

[root@localhost centos7]$cat aliyun-mirror.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
 
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
 
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

3.supervisor 配置文件

[root@localhost centos7]$cat supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock   ; the path to the socket file
 
[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200
 
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
 
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
 
[include]
files = /etc/supervisor/conf.d/*.ini

開始構(gòu)建

docker build -t idocker.io/eryajf/centos:7.4 .

構(gòu)建完成查看一下:

[root@localhost ~]$docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
idocker.io/eryajf/centos   7.4                 13fb619afd8c        21 hours ago        519 MB

之后可以 push 到自己的私服當(dāng)中

docker push idocker.io/eryajf/centos:7.4

啟動(dòng)

docker run -d --name centos idocker.io/eryajf/centos:7.4

構(gòu)建 jdk 基礎(chǔ)鏡像

這個(gè)鏡像事實(shí)上在 dockerhub 上有官方發(fā)布的蚕苇,只不過其底層鏡像都是基于 deebin 的哩掺,并不適合日常使用,因此這里就自己來制作一下涩笤。

需要兩個(gè)文件

[root@localhost jdk8]$ls
Dockerfile  jdk.tar.gz

1.Dockerfile

FROM       idocker.io/eryajf/centos:7.4
MAINTAINER eryajf <Linuxlql@163.com>
 
# Install jdk
ADD  jdk.tar.gz   /usr/local/
 
ENV JAVA_HOME /usr/local/jdk1.8.0_144
ENV PATH $PATH:$JAVA_HOME/bin

剩下那個(gè)是 jdk 的包嚼吞,可以在官網(wǎng)進(jìn)行下載

構(gòu)建

docker build -t idocker.io/eryajf/jdk:1.8 .

啟動(dòng)驗(yàn)證

[root@localhost ~]$docker run -d --name jdk idocker.io/eryajf/jdk:1.8
17c9180d892f2406bb256113ec241843ac1e18f7e20aeb52de67ad8eaef2c724
[root@localhost ~]$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
17c9180d892f        36a4fcd3d962        "/usr/bin/supervis..."   2 seconds ago       Up 1 second         22/tcp              jdk
[root@localhost ~]$docker exec -it jdk bash
[root@17c9180d892f /]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

構(gòu)建 tomcat 鏡像

需要用到如下三個(gè)文件

[root@localhost tomcat]$ls
Dockerfile  tomcat.ini  tomcat.tar.gz

1.Dockerfile

[root@localhost tomcat]$cat Dockerfile
FROM       idocker.io/eryajf/jdk:1.8
MAINTAINER eryajf <Linuxlql@163.com>
 
# Install jdk
ADD  tomcat.tar.gz   /usr/local/
ADD  tomcat.ini /etc/supervisor/conf.d

2.tomcat.ini

[root@localhost tomcat]$cat tomcat.ini
[program:tomcat]
environment=JAVA_HOME="/usr/local/jdk1.8.0_144",JAVA_BIN="/usr/local/jdk1.8.0_144/bin"
command=/usr/local/tomcat/bin/catalina.sh run
autostart=true
autorestart=true
startsecs=60
priority=1
stopasgroup=true
killasgroup=true
stderr_logfile=/usr/local/tomcat/logs/catalina.out

構(gòu)建鏡像

docker build -t idocker.io/eryajf/tomcat:8.5 .

啟動(dòng)

docker run -d -p 8080:8080 --name tomcat idocker.io/eryajf/tomcat:8.5

構(gòu)建 Jenkins 鏡像

之前使用過從 dockerhub 上下載的 Jenkins 官方發(fā)布的鏡像,然而那些鏡像的底層也都不是 centos 系統(tǒng)的蹬碧,因此打算自己制作一個(gè) Jenkins 鏡像舱禽,以便于使用。

所需原料如下:

[root@localhost jenkins]$ls
Dockerfile  maven.tar.gz  ROOT.war

其中 maven 是配置好了的恩沽,ROOT.war 是 Jenkins 的包誊稚。

1.Dockerfile

[root@localhost jenkins]$cat Dockerfile
FROM       idocker.io/eryajf/tomcat:8.5
MAINTAINER eryajf <Linuxlql@163.com>
 
ADD  maven.tar.gz /usr/local/
COPY ROOT.war /usr/local/tomcat/webapps/
 
ENV JAVA_HOME /usr/local/jdk1.8.0_144
ENV MAVEN_HOME=/usr/local/maven
ENV JENKINS_HOME=/home/.jenkins_home
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

構(gòu)建

docker build -t idocker.io/eryajf/jenkins:2.138 .

啟動(dòng)驗(yàn)證

docker run -d -p 8080:8080 --name jenkins idocker.io/eryajf/jenkins:2.138

這種啟動(dòng)方式只能夠正常的將 Jenkins 啟動(dòng)起來,但是如果想要繼續(xù)利用 Jenkins 進(jìn)行持續(xù)集成罗心,那么就需要將宿主機(jī)當(dāng)中的 docker命令掛載到容器當(dāng)中里伯,這時(shí)可以使用如下命令:

docker run -d -p 8080:8080 --name jenkins -v /home/.jenkins_home:/home/.jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /etc/sysconfig/docker:/etc/sysconfig/docker  idocker.io/eryajf/jenkins:2.138

啟動(dòng)之后就可以在在這個(gè)基礎(chǔ)上使用 Jenkins 了,而且無論什么時(shí)候渤闷,就算這個(gè)容器掛掉了疾瓮,只要掛載的數(shù)據(jù)目錄還在,那么隨時(shí)都可以通過如上這條指令將原有的 Jenkins 容器恢復(fù)出來肤晓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爷贫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子补憾,更是在濱河造成了極大的恐慌漫萄,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盈匾,死亡現(xiàn)場(chǎng)離奇詭異腾务,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)削饵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門岩瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來未巫,“玉大人,你說我怎么就攤上這事启昧⌒鸱玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵密末,是天一觀的道長握爷。 經(jīng)常有香客問我,道長严里,這世上最難降的妖魔是什么新啼? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮刹碾,結(jié)果婚禮上燥撞,老公的妹妹穿的比我還像新娘。我一直安慰自己迷帜,他們只是感情好物舒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞬矩,像睡著了一般茶鉴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上景用,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天涵叮,我揣著相機(jī)與錄音,去河邊找鬼伞插。 笑死割粮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的媚污。 我是一名探鬼主播舀瓢,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼耗美!你這毒婦竟也來了京髓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤商架,失蹤者是張志新(化名)和其女友劉穎堰怨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛇摸,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡备图,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揽涮。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抠藕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蒋困,到底是詐尸還是另有隱情盾似,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布家破,位于F島的核電站颜说,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏汰聋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一喊积、第九天 我趴在偏房一處隱蔽的房頂上張望烹困。 院中可真熱鬧,春花似錦乾吻、人聲如沸髓梅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枯饿。三九已至,卻和暖如春诡必,著一層夾襖步出監(jiān)牢的瞬間奢方,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工爸舒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟋字,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓扭勉,卻偏偏與公主長得像鹊奖,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涂炎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容