docker學習筆記(四)——Dockerfile創建自定義鏡像

用Dockerfile創建docker,注意下,建議在空文件夾下創建

本篇我們將完成:

1、用Dockerfile創建docker

2、端口映射

3、卷掛載,即docker目錄掛載到宿主機


1、用Dockerfile創建docker

在/opt/centos/目錄下,創建Dockerfile

# Centos based container with Java and Tomcat
FROM 127.0.0.1:5000/centos:v2    #鏡像源,這裏爲私有
MAINTAINER jack.zhang         #作者
ENV REFRESHED_AT 2017-8-28     #日期


# Prepare environment        #聲明創建變量

ENV JAVA_HOME /opt/jdk1.8.0_131
ENV JRE_HOME /opt/jdk1.8.0_131/jre 
ENV  CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$JRE_HOME/bin:$PATH

RUN mkdir /data
RUN yum install -y wget         

#建議搭建本地軟件源,取包比較快,當時直接yum安裝也可以,前提宿主機可以上網

RUN wget http://192.168.10.144:9098/jdk-8u131-linux-x64.tar.gz && \  #下載10.144安裝包
     tar -xvf jdk-8u131-linux-x64.tar.gz -C /opt/
     

# Install Tomcat

RUN wget http://192.168.10.144:9098/tomcat.tar.gz && \
  tar -xvf tomcat.tar.gz -C /data/ && \
  mv /data/tomcat /data/tomcat8
 
RUN chmod +x /data/tomcat8/bin/*sh

VOLUME ["/data/tomcat8/webapps/"]

EXPOSE 8090    #對外暴露的端口,即對外提供服務的端口
EXPOSE 8009

ENTRYPOINT ["/data/tomcat8/bin/catalina.sh", "run"]   
#啓動tomcat,注意, docker裏面的進程要一直掛起,要不然會退出,我們用這種辦法啓動

文件編輯完成後,我們來生成docker

注意命令後有個點,不要忘記,當前文件夾下面一定有Dockerfile
#docker build -t  test/test_app .   

會打印一堆日誌,這不影響,如果有異常可以找出對應問題,
創建後,我們看下是不是已經成功了

# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
test/test_app           latest              29175ec8a720        17 hours ago        836MB


2、端口映射

因爲上面的端口已經暴露出來,只要tomcat啓動了,端口就是通的,所以我們這裏要做的就是啓動docker並把端映射出來,這裏的8090是docker提供服務的端口

啓動docker並映射端口 注意,-p 就是端口映射
#docker run -d  -p 8090:8090 --restart=always --name tomcat test/test_app
看下進程是否啓動成功

# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
923bc1dda78f        test/test_app       "/data/tomcat8/bin..."   29 minutes ago      Up 29 minutes       8009/tcp, 0.0.0.0:8090->8090/tcp   tomcat

用宿主機訪問IP:端口,訪問是不是可以訪問到了?

需要說明的是,端口映射其它是基於iptables的,所以如果docker啓動沒問題,進程也存在,確認宿主機的iptables 是否啓動

 centos iptables

#systemctl start firewalld.service #啓動firewall

3、卷掛載,即docker目錄掛載到宿主機

其它掛載目錄到宿主機,沒什麼特別的,有些文檔介紹的好像有多麼深奧,其實沒啥

只是啓動命令加下參數罷了,

先關閉運行中的docker

#docker stop 923bc1dda78f    923bc1dda78f 是docker的進程號,通過docker ps 可以看得到

好了,掛載目錄啓動

-v 命令, 注意 前面的是宿主機的目錄,後面提docker目錄
即把宿主機的/usr/share/nginx/html 掛載到docker的/data/tomcat8/webapps/ROOT/下
# docker run -d -v /usr/share/nginx/html:/data/tomcat8/webapps/ROOT -p 8090:8090 --restart=always --name tomcatapp test/test_app

查看下進程
# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
923bc1dda78f        test/test_app       "/data/tomcat8/bin..."   29 minutes ago      Up 29 minutes       8009/tcp, 0.0.0.0:8090->8090/tcp   tomcat

我們進入到docker shell 看下是不是成功掛載
# docker exec -it 923bc1dda78f /bin/bash     #923bc1dda78f 爲進程號
[root@923bc1dda78f /]# cd /data/tomcat8/webapps/ROOT/
[root@923bc1dda78f ROOT]# ls
404.html  50x.html  apache-tomcat-8.5.15-src.tar.gz  index.html  jdk-8u131-linux-x64.tar.gz  nginx-logo.png  poweredby.png

可以看到已經功能掛載

直接訪問宿主機:端口,是不是首頁不一樣的~~

這樣是不是很方便了,我們直接維護宿主機的目錄就相當於維護docker目錄。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章