您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何構(gòu)建一個(gè)Docker鏡像”,在日常操作中,相信很多人在如何構(gòu)建一個(gè)Docker鏡像問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何構(gòu)建一個(gè)Docker鏡像”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
本節(jié)我介紹如何自己構(gòu)建一個(gè)Docker鏡像,我們將構(gòu)建一個(gè)支持scala的運(yùn)行環(huán)境,并且對(duì)外開(kāi)放SSH服務(wù)。
構(gòu)建鏡像有兩種方法:
運(yùn)行并進(jìn)行一個(gè)基礎(chǔ)容器(如centos , docker run -it centos /bin/bash
),然后安裝需要的環(huán)境,再用commit
將容器保存成新的鏡像
使用Dockerfile
構(gòu)建,這也是推薦的做法
本節(jié)我們僅介紹第2種方法。
Dokcerfile是用于構(gòu)建Docker鏡像的元文件,它的說(shuō)明及語(yǔ)法見(jiàn): http://docs.docker.com/engine/reference/builder/
根據(jù)需求可以發(fā)現(xiàn)我們安裝的主要環(huán)境有三個(gè):SSH服務(wù)、Java環(huán)境(Scala依賴它)、Scala環(huán)境,與軟件開(kāi)發(fā)一樣,我們也可以分模塊
構(gòu)建,即構(gòu)建三個(gè)鏡像:
只包含SSH服務(wù)的基礎(chǔ)鏡像
帶SSH及Java環(huán)境的鏡像
帶SSH、Java及Scala環(huán)境的鏡像
FROM centos:centos7 <1> MAINTAINER gudaoxuri <2> #---------------Use 163 mirrors--------------- <3> RUN yum install -y wget &&\ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \ wget -P /etc/yum.repos.d/ http://mirrors.163.com/.help/CentOS7-Base-163.repo && \ yum clean all && \ yum makecache <4> #---------------Install Common Tools--------------- RUN yum install -y sed curl tar gcc gcc-c++ make git passwd sudo #---------------Modify Time Zone--------------- ENV TZ "Asia/Shanghai" <5> ENV TERM xterm RUN yum install -y ntpdate && \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #---------------Support Chinese--------------- #RUN yum groupinstall -y "Fonts" && \ # echo "LANG=\"zh_CN.UTF-8\"" >> /etc/sysconfig/i18n #---------------Install SSH--------------- RUN yum install -y openssh-server openssh-clients && \ sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config && \ echo 'root:123456' | chpasswd && \ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key && \ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key && \ mkdir /var/run/sshd #---------------Setting Common Path--------------- RUN chmod 777 -R /opt/ && \ mkdir /opt/env/ && \ mkdir /opt/workspaces/ EXPOSE 22 <6> CMD ["/usr/sbin/sshd", "-D"] <7>
<1> | FROM 表示此鏡像是基于哪個(gè)鏡像構(gòu)建的 |
<2> | MAINTAINER 開(kāi)發(fā)者的信息 |
<3> | # 注釋 |
<4> | RUN 常用命令,用于執(zhí)行Linux的命令,多用于安裝組件 |
<5> | ENV 常用命令,用于設(shè)置環(huán)境變量 |
<6> | EXPOSE 表明默認(rèn)對(duì)外暴露的端口(docker run -P ) |
<7> | CMD 要執(zhí)行的服務(wù),多條CMD 只執(zhí)行最后一條 |
RUN 參數(shù)的學(xué)問(wèn),Docker鏡像是分層的,一個(gè)鏡像可能由多個(gè)層組成,一次RUN 實(shí)際上就產(chǎn)生了一層,在編譯Dockerfile 的過(guò)程中可能出錯(cuò),重新編譯時(shí)我們會(huì)發(fā)現(xiàn)之前已成功編譯的層不會(huì)再次被編譯 |
root@ubuntu:/opt/test/dockerfile/ssh# ls Dockerfile root@ubuntu:/opt/test/dockerfile/ssh# docker build -t gudaoxuri/ssh . Sending build context to Docker daemon 3.072 kB Sending build context to Docker daemon Step 0 : FROM centos:centos7 Pulling repository centos ce20c473cd8a: Download complete ce20c473cd8a: Pulling image (centos7) from centos 168a69b62202: Download complete 812e9d9d677f: Download complete 4234bfdd88f8: Download complete Status: Downloaded newer image for centos:centos7 ---> ce20c473cd8a Step 1 : MAINTAINER gudaoxuri ---> Running in 889ea744c458 ---> 5b1151e6cb0b Removing intermediate container 889ea744c458 ... Step 10 : CMD /usr/sbin/sshd -D ---> Running in ce563073b686 ---> b61a4adad85f Removing intermediate container ce563073b686 Successfully built b61a4adad85f root@ubuntu:/opt/test/dockerfile/ssh# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE gudaoxuri/ssh latest b61a4adad85f 10 minutes ago 966 MB ...
FROM gudaoxuri/ssh:latest <1> MAINTAINER gudaoxuri #---------------Install Java--------------- RUN wget -P /opt/env/ --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz && \ tar -xzf /opt/env/jdk-8u60-linux-x64.tar.gz -C /opt/env/ && \ rm /opt/env/jdk-8u60-linux-x64.tar.gz && \ mv /opt/env/jdk1.8.0_60 /opt/env/java && \ echo "export JAVA_HOME=/opt/env/java" >> /etc/profile ENV JAVA_HOME /opt/env/java RUN echo 'PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile ENV PATH $PATH:$JAVA_HOME/bin
<1> | gudaoxuri/ssh:latest 就是我們之前編譯的鏡像 |
FROM gudaoxuri/java:latest MAINTAINER gudaoxuri #---------------Install Scala--------------- RUN wget -P /opt/env/ http://downloads.typesafe.com/scala/2.10.6/scala-2.10.6.tgz && \ tar -xzf /opt/env/scala-2.10.6.tgz -C /opt/env/ && \ rm /opt/env/scala-2.10.6.tgz && \ mv /opt/env/scala-2.10.6 /opt/env/scala && \ echo "export SCALA_HOME=/opt/env/scala" >> /etc/profile ENV SCALA_HOME /opt/env/scala RUN sed /^PATH=/d /etc/profile >> /etc/profile && \ echo 'PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin' >> /etc/profile ENV PATH $PATH:$JAVA_HOME/bin:$SCALA_HOME/bin
過(guò)程同上,略
有了新的鏡像后我們希望把這個(gè)鏡像發(fā)布到hub.docker.com
上去分享,有兩種方式:
使用 docker push
發(fā)布前要先登錄 docker login
使用github
發(fā)布
介于國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境惡劣,第1種方式失敗概率很高,因?yàn)樗蟼鞯氖巧傻溺R像(幾百M(fèi)B到幾G不等),所以推薦使用第2種方式 |
請(qǐng)先注冊(cè)hub.docker.com 及 github.com 的賬號(hào) |
不要用IE 操作,筆者使用IE11 在hub.docker.com 上操作時(shí)發(fā)生過(guò)不小的困擾。 |
在hub.docker.com
上建立github
連接
在github
中設(shè)置權(quán)限
在github
中建一個(gè)開(kāi)源項(xiàng)目,注意要包含Dockerfile
文件
在github
中設(shè)置這個(gè)項(xiàng)目的權(quán)限
在hub.docker.com
上建立自動(dòng)構(gòu)建項(xiàng)目
在hub.docker.com
上選擇github
上的項(xiàng)目
在hub.docker.com
上設(shè)置項(xiàng)目屬性
不多時(shí)就構(gòu)建好了
到此,關(guān)于“如何構(gòu)建一個(gè)Docker鏡像”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。