docker如何自定義鏡像?
1、要實(shí)現(xiàn)利用docker技術(shù),首先要先安裝docker包
本次用的是docker-engine-1.12.1-1.el7.centos.x86_64.rpm;docker技術(shù)是基于本機(jī)的底層系統(tǒng),在系統(tǒng)之上,封裝打包并交付應(yīng)用程序。它可以讓容器啟動(dòng)起來(lái)像一個(gè)進(jìn)程一樣快捷。
基于docker技術(shù),可以把需要的最小化各種系統(tǒng)環(huán)境當(dāng)成一個(gè)鏡像封裝上,像啟動(dòng)一個(gè)進(jìn)程一樣啟動(dòng)起來(lái)。
2、制作自定義docker鏡像
先在docker官網(wǎng)上下載一個(gè)docker的鏡像
docker?search?docker docker?pull?docker
官網(wǎng)上的鏡像都是最下化安裝,所以要先配置一個(gè)yum源,且在centos鏡像中安裝上平時(shí)用的軟件,及啟動(dòng)httpd和sshd,具體操作如下:
yum?-y?install?docker-engine-1.12.1-1.el7.centos.x86_64.rpm mkdir?testcd?testtouch?Dockerfile vim?Dockerfile FROM?centos:latest RUN?rm?-f?/etc/yum.repos.d/* ADD?centos7.repo?/etc/yum.repos.d/centos7.repo RUN?yum?-y?install?httpd?openssh-server?net-tools?bash-completion.noarch??iproute?vim-enhanced EXPOSE?80?22 RUN??echo?"123456"?|passwd?--stdin?root RUN??/usr/sbin/sshd-keygen ENV?EnvironmentFile=/etc/sysconfig/sshd WORKDIR?/var/www/html RUN?echo?"<h1><font>this?is?centos1:httpd">index.html ENV?EnvironmentFile=/etc/sysconfig/httpd ADD?qd.sh?/root/qd.sh???? CMD?["/root/qd.sh"] :wq</font></h1>
注釋?zhuān)篍XPOSE是指定開(kāi)放容器的哪些端口;ADD是把當(dāng)前的目錄下的文件傳到容器中指定目錄下;必須是當(dāng)前路徑RUN是指在容器中執(zhí)行哪些命令;FROM是指定源鏡像,即這個(gè)鏡像是基于哪個(gè)鏡像來(lái)做的。WORKDIR是指定容器中的工作目錄,相當(dāng)于centos系統(tǒng)中的cd命令ENV是定義環(huán)境變量CMD指定容器啟動(dòng)來(lái)了之后執(zhí)行的第一條命令為什么,需要用[]和引號(hào)分隔,如果有選項(xiàng),則中間用逗號(hào)分隔,例如:[“/usr/sbin/sshd”,”-D”]創(chuàng)建的文件必須叫Dockerfile如果感覺(jué)手動(dòng)書(shū)寫(xiě)這些命令比較復(fù)雜,可以進(jìn)入基本鏡像中去執(zhí)行各種命令,然后用history把命令查看出來(lái),cp命令出來(lái),用上面的相應(yīng)的格式替換出來(lái)就可以了。
3、編寫(xiě)啟動(dòng)腳本
由于docker鏡像的CMD是定義啟動(dòng)容器后執(zhí)行的第一條默認(rèn)命令,所以CMD中只能寫(xiě)一條命令,而在這個(gè)案例中,我們要啟動(dòng)兩個(gè)程序sshd和httpd,所以需要寫(xiě)一個(gè)腳本,讓CMD直接執(zhí)行腳本即可。
vim?qd.sh#!/bin/bash/usr/sbin/sshd?-D?& /usr/sbin/httpd?-DFOREGROUND :wq
chmod +x qd.sh //加執(zhí)行權(quán)限
4、創(chuàng)建鏡像
需在當(dāng)前目錄下執(zhí)行
docker?build?-t?wang:sh2?.
5、啟動(dòng)鏡像,并且把容器的端口映射出來(lái)
docker?run?-d?-p?80:80?-p?2022:22?wang:sh2
把容器的80端口映射到物理機(jī)的80端口,把容器的22端口映射到物理機(jī)的2022端口。
6、訪(fǎng)問(wèn)驗(yàn)證
firefox?http://192.168.1.194(物理機(jī)) ssh?-p?2022?192.168.1.194
7、擴(kuò)展
也可以先做一個(gè)當(dāng)一的sshd服務(wù)的鏡像出來(lái),再基于sshd這個(gè)鏡像來(lái)做httpd的容器:
im?Dockerfile FROM?wang:sshd RUN?yum?-y??httpd EXPOSE?80?22ENV?EnvironmentFile=/etc/sysconfig/httpd WORKDIR?/var/www/html RUN?echo?"<h1><font>this?is?httpd?and?sshd">index.html ADD?qd.sh?/root/qd.sh???? CMD?["/root/qd.sh"]? :wq</font></h1>
相關(guān)參考:docker教程