1. 程式人生 > >構建Docker鏡像實戰案例

構建Docker鏡像實戰案例

圖片 端口號 鏡像 tomcat-8 oca ESS chm 編譯 信息

Dockerfile介紹
  • Dockerfile是由一組指令組成的文件,每條指令對應linux中一條命令,Docker程序將讀取Dockerfile中的指令生成指定鏡像。
  • Dockerfile大致結構:基礎鏡像信息、維護者信息、鏡像操作指令、容器啟動時執行指令。每行支持一條指令,每條指令可以攜帶多個參數,支持以 # 開頭的註釋。
  • Dockerfile操作指令:

FROM 鏡像 : 指定新的鏡像所基於的鏡像
MAINTAINER 名字 :說明新鏡像的維護人
RUN 命令 : 在所基於的鏡像上執行命令,並提交到新的鏡像中
CMD ["要運行的程序","參數1","參數2"] :

指定啟動容器時要運行的命令或腳本
EXPOSE端口號 : 指定新鏡像加載到Docker時要開啟的端口
ENV環境變量 變量值 : 設置一個環境變量的值,會背後面的RUN用到
ADD源文件/目錄 目標文件/目錄 :將源文件復制到目標文件 ,源文件和Dockerfile位於同一目錄
COPY源文件/目錄 目標文件/目錄 :將本地主機的源文件復制到目標目錄,源文件和Dockerfile位於同一目錄
VOLUME["目錄"] : 在容器中創建一個掛載點
USER 用戶名 /UID :指定運行容器時的用戶
WORKDIR路徑 : 為後續的RUN 、CMD、ENTRYPOINT 指定工作目錄
ONBUILD命令 :
指定所生成的鏡像作為一個基礎鏡像時所要運行的命令。

?

實戰 下面詳解三個案例:構建Nginx、tomcat、mysql鏡像

?

  • 構建Nginx鏡像

  • 建立工作目錄

    # docker pull centos    //下載基礎鏡像
    # mkdir nginx
    # cd nginx/
  • 創建Dockerfile文件

    # vim Dockerfile    //編寫Dockerfile
    
    # 設置基礎鏡像
    FROM centos 
    # 維護該鏡像的用戶
    MAINTAINER this is nginx image <zkc>
    # 安裝環境 下載軟件包 並解壓
    RUN yum install -y wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel
    RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz
    RUN tar zxvf nginx-1.9.7.tar.gz
    # 工作目錄 編譯安裝
    WORKDIR nginx-1.9.7
    RUN ./configure --prefix=/usr/local/nginx && make && make install
    # 開啟 80 和443端口
    EXPOSE 80
    EXPOSE 443
    # 修改配置文件,以非 deamon方式啟動
    RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
    # 復制服務腳本並設置權限
    WORKDIR /root/nginx
    ADD run.sh /run.sh
    RUN chmod 755 /run.sh
    # 啟動容器時執行腳本
    CMD ["/run.sh"]
  • 編寫執行腳本

    # vim run.sh
    #!/bin/bash
    /usr/local/nginx/sbin/nginx
  • 生成鏡像

    # docker build -t nginx:new .
    # docker run -d -P nginx:new
    # docker ps -a

    技術分享圖片技術分享圖片
    ?

  • 測試
  • 在瀏覽器輸入:http://192.168.200.132:32769/

技術分享圖片

??
??

  • 構建Tomcat 鏡像

  • 建立工作目錄

    # mkdir /root/tomcat
    # cp jdk-8u91-linux-x64.tar.gz /root/tomcat/     //將安裝包復制到該目錄並解壓
    # cp apache-tomcat-8.5.16.tar.gz /root/tomcat/
    # cd /root/tomcat/
    # tar zxvf jdk-8u91-linux-x64.tar.gz
    # tar zxvf apache-tomcat-8.5.16.tar.gz
  • 創建Dockerfile文件

    # vim Dockerfile   //編寫Dockerfile
    
    FROM centos
    MAINTAINER this is tomcat image <zkc>
    # 安裝JDK環境,設置其環境變量
    ADD jdk1.8.0_91 /usr/local/java
    ENV JAVA_HOME /usr/local/java
    ENV JAVA_BIN /usr/local/java/bin
    ENV JRE_HOME /usr/local/java/jre
    ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
    ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
    ADD apache-tomcat-8.5.16 /usr/local/tomcat8
    EXPOSE 8080
  • 生成鏡像

    # docker build -t tomcat:centos .

技術分享圖片

?

  • 加載到容器並開啟服務

    [root@centos7-5 tomcat]# docker run --name tomcat01 -p 80:8080 -it  tomcat:centos /bin/bash
    //加載到容器 並 映射本地的80端口到 容器的8080端口
    [root@e238163a97e1 /]# cd /usr/local/tomcat8/bin
    [root@e238163a97e1 bin]# ./startup.sh
  • 測試
  • 在瀏覽器輸入:192.168.200.132 (宿主機IP)

技術分享圖片

?
?

  • 構建Mysql鏡像

  • 建立工作目錄

    # mkdir /mysql
    # cd /mysql
  • 創建Dockerfile文件

    # vim Dockerfile      //編寫Dockerfile
    
    # 設置基礎鏡像為centos6
    FROM guyton/centos6
    MAINTAINER this is msyql images <zkc>
    RUN yum -y install mysql mysql-server
    # 開啟mysql服務並授權
    RUN /etc/init.d/mysqld start &&mysql -e "grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘abc123‘;" &&mysql -e "grant all privileges on *.* to ‘root‘@‘localhost‘ identified by ‘abc123‘;"
    EXPOSE 3306
    # 運行初始化腳本mysql_safe
    CMD ["mysqld_safe"]
  • 生成鏡像

    # docker build -t centos6:mysql .    //後面有個點 . 
    # docker run --name=mysqlserver -d -P centos6:mysql  
    //加載到容器並映射本地隨機端口到容器的3306端口
    # docker ps -a

技術分享圖片

?

  • 測試
  • 註意:兩邊防火墻都要關
  • 使用其他mysql服務器遠程登錄容器mysql

    # mysql -h 192.168.200.132 -u root -P 32770 -pabc123

技術分享圖片

構建Docker鏡像實戰案例