使用Dockerfile文件制作centos6.8基礎鏡像,基於centos基礎鏡像的ssh遠程登錄鏡像,jdk1.8鏡像,tomcat鏡像,elasticsearch鏡像等等
一、首先制作一個centos6.8的裸機鏡像
創建一個幹凈的目錄:
1 [root@docker centos6.8]# ls 2 c68-docker.tar.xz Dockerfile
Dockerfile文件內容:
#依賴的基礎鏡像 FROM scratch #維護著 MAINTAINER hujianjie2010@163.com #添加的文件 ADD c68-docker.tar.xz / #定義標簽 LABEL name="CentOS Base Image" vendor="CentOS" license="GPLv2" build-date="2016-06-02" # Default command CMD ["/bin/bash"]
docker build -t centos6.8:1.0 .
scratch是一個空的鏡像,而解壓c68-docker.tar.xz包裏面包含了centos主要的目錄:如下
1 bin dev home lib64 manage media opt root sbin srv tmp var 2 c68-docker.tar.xz etc lib lost+found mnt proc selinux sys usr
因此上面的build出來的鏡像基本就是一個裸機鏡像。
註:下面這段文字摘自網絡。但是能夠看清楚scratch是啥東西,也能理解最基礎的鏡像是從哪裏開始
使用 tar 來創建一個完整的鏡像
通常,你要先運行一個可工作的發行版的機器,來打包一個基礎鏡像。雖然有一些工具不是必需的,比如 Debian 的 Deboostrap,但是你還是可以用它來生成 Ubuntu 鏡像。
下面的例子盡可能簡單地創建一個 Ubuntu 基礎鏡像:
1 $ sudo debootstrap raring raring > /dev/null 2 $ sudo tar -C raring -c . | sudodocker import - raring 3 a29c15f1bf7a 4 $ sudo docker run raring cat /etc/lsb-release 5 DISTRIB_ID=Ubuntu 6 DISTRIB_RELEASE=13.04 7 DISTRIB_CODENAME=raring 8 DISTRIB_DESCRIPTION="Ubuntu 13.04"
使用 scratch 創建簡單的基礎鏡像
在 Docker 的註冊中,有一個使用空的 tar 文件創建的特殊的版本庫,叫 scratch :
tar -cv --files-from /dev/null | docker import - scratch
scratch是一個空鏡像。你可以用 docker pull 把它拉取下來。然後你就可以基於它來做新的最小的容器了:
FROM scratch
COPY true-asm /true
CMD ["/true"]
上面的 Dockerfile 來自外部的一個最小鏡像:tianon/true。
二、基於centos基礎鏡像的ssh遠程登錄鏡像
鏡像目錄中存在的文件,不相關的文件不要放到鏡像目錄下,以免增加鏡像的大小。
1 [root@docker tools_centos6.8]# ls 2 authorized_keys ssh_host_dsa_key ssh_host_ecdsa_key.pub ssh_host_rsa_key 3 Dockerfile ssh_host_dsa_key.pub ssh_host_ed25519_key ssh_host_rsa_key.pub 4 run.sh ssh_host_ecdsa_key ssh_host_ed25519_key.pub
Dockerfile文件內容:
1 # Docker image of tools_centos6.8 2 # VERSION 1.0 3 # Author: Hoojjack 4 5 #基礎鏡像使用centos6.8 6 FROM centos6.8:1.0 7 8 #作者 9 MAINTAINER Hoojjack <hujianjie2010@163.com> 10 11 #定義工作目錄 12 ENV WORK_PATH /usr/local 13 #安裝基礎軟件 14 RUN yum install -y openssh-server telnet net-tool iptables-services vim wget 15 16 #配置ssh 新建ssh需要的目錄 17 RUN mkdir -p /var/run/sshd && mkdir -p /root/.ssh 18 19 #取消pam登錄限制 20 RUN sed -ri ‘s/session required pam_loginuid.so/#session required pam_loginuid.so/g‘ /etc/pam.d/sshd 21 22 #解決ssh登錄過程中驗證私鑰和公鑰問題 23 COPY authorized_keys /root/.ssh/authorized_keys 24 COPY run.sh /run.sh 25 COPY ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key 26 COPY ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub 27 COPY ssh_host_ed25519_key /etc/ssh/ssh_host_ed25519_key 28 COPY ssh_host_ed25519_key.pub /etc/ssh/ssh_host_ed25519_key.pub 29 COPY ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key 30 COPY ssh_host_rsa_key.pub /etc/ssh/ssh_host_rsa_key.pub 31 COPY ssh_host_dsa_key /etc/ssh/ssh_host_dsa_key 32 COPY ssh_host_dsa_key.pub /etc/ssh/ssh_host_dsa_key.pub 33 RUN chmod 755 /run.sh 34 35 #暴露端口 36 EXPOSE 22 37 38 #啟動服務,默認開啟ssh服務 39 CMD ["sh","/run.sh"]
docker build -t tyky/tools_centos:1.0 .
三、jdk1.8鏡像
鏡像目錄文件:
1 [root@docker jdk8]# ls 2 Dockerfile jdk1.8
Dockerfile:
1 #配置基礎鏡像 2 FROM tyky/tools_centos:1.0 3 # 鏡像維護著 4 MAINTAINER hujianjie2010@163.com 5 6 # 把java包添加到容器中,本地文件推薦COPY命令 7 COPY jdk1.8 /usr/local/jdk1.8/ 8 9 # 配置java與tomcat環境變量 10 ENV JAVA_HOME /usr/local/jdk1.8 11 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 12 ENV PATH $PATH:$JAVA_HOME/bin 13 14 # 容器運行時監聽的端口 15 EXPOSE 8080
docker build -t tyky/jdk8:1.0 .
四、tomcat鏡像。
目錄:
1 [root@docker tomcat8]# ls 2 Dockerfile tomcat8
Dockerfile:
1 # 配置基礎鏡像 2 FROM tyky/jdk8:1.0 3 # 鏡像維護著 4 MAINTAINER hujianjie2010@163.com 5 6 # 把tomcat包添加到容器中,本地文件推薦COPY命令 7 COPY tomcat8 /usr/local/tomcat8/ 8 9 # 配置java與tomcat環境變量 10 ENV CATALINA_HOME /usr/local/tomcat8 11 ENV CATALINA_BASE /usr/local/tomcat8 12 ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin 13 14 # 容器運行時監聽的端口 15 EXPOSE 8080 16 EXPOSE 80 17 # 設置容器啟動 18 CMD ["/usr/local/tomcat8/bin/catalina.sh","run"]
docker build -t tyky/tomcat8:1.0 .
五、elasticsearch鏡像
目錄:
1 [root@docker elasticsearch]# ls 2 Dockerfile elasticsearch-1.4.2 go
Dockerfile:
1 # Docker image of elasticsearch 1.4.2 2 # VERSION 0.0.1 3 # Author: Hoojjack 4 5 #基礎鏡像使用6.8 6 FROM tools_centos6.8:1.0 7 8 #作者 9 MAINTAINER Hoojjack <hujianjie2010@163.com> 10 11 #定義工作目錄 12 ENV WORK_PATH /usr/local 13 14 #把mongodb安裝包從本地電腦復制到工作目錄 15 COPY elasticsearch-1.4.2 $WORK_PATH/elasticsearch 16 17 #安裝go環境依賴的包 18 RUN yum install -y gettext-devel perl-CPAN perl-devel zlib-devel git 19 #安裝go 20 COPY go $WORK_PATH/src/go 21 #RUN mkdir $WORK_PATH/src/go/work && chmod 755 $WORK_PATH/src/go/work 22 23 #配置go環境變量 24 ENV GOROOT $WORK_PATH/src/go 25 ENV GOPATH $WORK_PATH/src/go/work 26 ENV PATH=$GOROOT/bin:$PATH 27 28 #安裝go-mysql-elasticsearch 29 #RUN go get github.com/siddontang/go-mysql-elasticsearch 30 31 #elasticsearch的web端口 32 EXPOSE 9200 33 EXPOSE 9300
因為elasticsearch需要同步mysql數據,用到了go-mysql-elasticsearch同步工具,該工具依賴go環境,所以在該鏡像中安裝了go
docker build -t tyky/elasticsearch:1.0 .
使用Dockerfile文件制作centos6.8基礎鏡像,基於centos基礎鏡像的ssh遠程登錄鏡像,jdk1.8鏡像,tomcat鏡像,elasticsearch鏡像等等