1. 程式人生 > >使用Dockerfile文件制作centos6.8基礎鏡像,基於centos基礎鏡像的ssh遠程登錄鏡像,jdk1.8鏡像,tomcat鏡像,elasticsearch鏡像等等

使用Dockerfile文件制作centos6.8基礎鏡像,基於centos基礎鏡像的ssh遠程登錄鏡像,jdk1.8鏡像,tomcat鏡像,elasticsearch鏡像等等

完整 dont -s chmod IT 需要 sed lib mage

一、首先制作一個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 . | sudo
docker 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鏡像等等