docker可以幫助我們快速部署安裝需要的軟體,比如mysql,nginx,elk等,都只需要簡單的docker pull和docker run等簡單命令即可,但是為了滿足更多需求,一些個人應用的docker鏡像,就需要用dockerfile來創建。
一. Dockerfile入門Dockerfile的幾個核心命令
FROM
MAINTAINER
RUN
ADD
COPY
WORKDIR
VOLUME
EXPOSE
CMD
1. FROM指定構建的鏡像的運行環境
FROM centos:72. MAINTAINER指定鏡像的維護者與聯繫信息
MAINTAINER AntzUhl <antzuhl1998@gmail.com>3. RUN構建鏡像時執行的命令,此處我們可以安裝容器需要的工具
RUN yum install wgetRUN ["yum", "install", "wget"]另外還可以執行其他需要的命令,比如clone庫
RUN git clone git@github.com:CasterWx/terraria-docker-server.git4. ADD拷貝文件或者目錄到鏡像中,會自動解壓壓縮包與下載網絡URL到目標地址,可以拷貝要執行的jar或者軟體包,之後再使用CMD啟動
格式:ADD <宿主機文件路徑> <容器目標路徑>
ADD antzuhl.jar /opt
ADD http://antzuhl.cn/download/antzuhl.jar /opt5. COPY類似於ADD,但是只是拷貝,不會有其他操作。
COPY antzuhl.jar /opt6. WORKDIR為RUN,CMD,COPY,ADD等命令設置工作目錄
WORKDIR /opt7. VOLUME指定容器掛載點到宿主機的目錄,類似於docker run時-v參數
VOLUME ["/opt/antzuhl"]8. EXPOSE指定容器運行的服務埠
EXPOSE 77779. ENV配置容器內環境變量信息
ENV MYSQL_ROOT_PASSWORD 123456
ENV JAVA_HOME /usr/local/jdk1.8.0_4510. CMD啟動容器時執行的命令,用於啟動容器內的軟體包等,同樣支持使用數組參數
CMD ["./opt/terraria/terra_script.sh","start"]
CMD ./opt/terraria/terra_script.sh start11. ENTRYPOINTENTRYPOINT與CMD命令類似,有多個ENTRYPOINT時,容器啟動只會執行最後一個
ENTRYPOINT /bin/bash -C '/start.sh'二. Dockerfile實戰Spring Boot項目創建一個最基礎的Spring boot項目,Dockerfile為我編寫的鏡像創建Dockerfile文件,apache-maven壓縮包為準備的maven包,通過ADD命令添加到鏡像內,sell為一個簡單的Spring boot代碼,埠8080。
# 基礎鏡像,運行在一個擁有java的環境
FROM williamyeh/java8:latest
# 維護者信息
MAINTAINER AntzUhl <antzuhl998@gmail.com>
# 將maven包添加到鏡像內
ADD apache-maven-3.3.9-bin.tar.gz /usr/local/bin
# 配置maven相關環境變量
RUN export PATH=apache-maven-3.3.9/bin:$PATH
RUN export PATH=/usr/local/bin/apache-maven-3.3.9/bin:$PATH
RUN ln -s /usr/local/bin/apache-maven-3.3.9/bin/mvn /usr/local/bin/mvn
RUN ls -l /usr/local/bin
RUN echo $PATH
# 開放埠8080
EXPOSE 8080
# 創建目錄
RUN mkdir /opt/sell
# 把代碼拷貝到創建的目錄
ADD sell/ /opt/sell
# 設置運行環境
WORKDIR /opt/sell
# mvn打包
RUN mvn clean install
# 執行打包好的jar文件
CMD java -jar target/sell.jar完成後使用docker build -t sell:test .開始創建鏡像
sell:test為鏡像名稱,.代表當前目錄。
現在就可以使用docker run來創建鏡像,訪問localhost:8080即可。
三. Dockerfile實戰創建泰拉瑞亞伺服器此外,還可以使用dockerfile來幫助我們簡化一些常用的部署操作,比如泰拉瑞亞伺服器的部署
# 基礎鏡像,centos7
FROM centos:7
MAINTAINER AntzUhl <antzuhl1998@gmail.com>
# 執行用戶root
USER root
# 安裝依賴
RUN yum -y update
RUN yum -y install screen
# 開放埠
EXPOSE 7777
RUN mkdir /opt/terraria/
ADD terraria/ /opt/terraria/
# 給執行腳本權限
RUN chmod 775 /opt/terraria/terra_script.sh
# 執行
CMD ["./opt/terraria/terra_script.sh","start"]可參考我的一個泰拉腳本: https://github.com/CasterWx/terraria-docker-server
使用docker build -t terraria:test .構建鏡像即可。