1. 程式人生 > 實用技巧 >arxiv論文提交流程

arxiv論文提交流程

Dockerfile

格式:

FROM centos:latest #依賴的基礎映象

MAINTAINER fage #製作檔案的人

RUN yum install -y gcc #安裝的軟體

COPY run.sh /usr/bin #執行指令

EXPOSE 80 #宣告使用的埠

CMD [ “run.sh”] #構建的時候執行的指令

命令是順序往下執行的

Dockerfile指令:

指令 描述
FROM 指定映象的基礎映象;
MAINTAINER 指定維護者資訊;
RUN   執行命令;
LABEL 指定生成映象的元資料標籤資訊;
EXPOSE 宣告映象內服務所監聽的埠;
ENV 指定環境變數;
ADD 賦值指定的路徑下的內容到容器中的路徑下,可以為URL;如果為tar檔案,會自動解壓到路徑下
COPY 賦值本地主機的路徑下的內容到容器中的路徑下;一般情況下推薦使用COPY而不是ADD;
ENTRYPOINT 指定映象的預設入口;
VOLUME 建立資料掛載點;
USER 指定執行容器時的使用者名稱或UID;
WORKDIR 配置工作目錄;
ARG 指定映象內使用的引數(例如版本號資訊等);
ONBUILD 配置當前所建立的映象作為其他映象的基礎映象時,所執行的建立操作的命令;
STOPSIGNAL 容器退出的訊號;
HEALTHCHECK 如何進行健康檢查;
SHELL 指定使用SHELL時的預設SHELL型別;
CMD 指定啟動容器時預設執行的命令

編寫 Dockerfile 案例

Docker通過Dockerfile自動構建映象的文字檔案,由一條一條的指令組成。

這裡,提供了4點編寫建議,可幫助你編寫高效易用的Dockerfile。

1.減少映象層

一次RUN指令形成新的一層,儘量shell命令都寫在一起,減少映象層。

例如:

FROM centos:7
MAINTAIENR fengyuanfei
RUN yum install 
-y gcc-c++ make RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz RUN tar xf php-5.6.36.tar.gz RUN cd php-5.6.36 RUN ./configure --prefix=/usr/local/php RUN make -j 4 RUN make install EXPOSE 9000 CMD ["php-fpm"]

應該寫成

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y && \
    yum install -y gcc gcc-c++ make

RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \
    tar zxf php-5.6.36.tar.gz && \
    cd php-5.6.36 && \
    ./configure --prefix=/usr/local/php && \
    make -j 4 && make install
EXPOSE 9000
CMD ["php-fpm"]

2.優化映象大小:清理無用資料

一次RUN形成的一層,如果沒有在同一層刪除,無論是否最後刪除,都會帶到清理對應的殘留資料,減少映象大小。

FROM centos:7
MAINTAINER www.ctnrs.com
RUN yum install epel-release -y && \
    yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
    libcurl-devel libjpeg-devel libpng-devel openssl-devel \
    libmcrypt-devel libxslt-devel libtidy-devel autoconf \
    iproute net-tools telnet wget curl && \
    yum clean all && \
    rm -rf /var/cache/yum/*

RUN wget http://docs.php.net/distributions/php-5.6.36.tar.gz && \
    tar zxf php-5.6.36.tar.gz && \
    cd php-5.6.36 && \
    ./configure --prefix=/usr/local/php \
    make -j 4 && make install && \
    cd / && rm -rf php*

3. 減少網路傳輸時間

最好在內部有一個存放軟體包的地方,類似於上述的PHP官方下載地址:http://docs.php.net/distributions/php-5.6.36.tar.gz,如果用到maven構建這樣的操作,同時也更改為私有maven倉庫,減少網路傳輸時間,提高映象構建速度。

4. 多階段進行映象構建

如果執行一個專案,根據咱們上面的做法,是直接把程式碼拷貝到基礎映象裡,如果是一個需要預先程式碼編譯的專案呢?例如JAVA語言,如何程式碼編譯、部署在一起完成呢!

上面做法需要事先在一個Dockerfile構建一個基礎映象,包括專案執行時環境及依賴庫,再寫一個Dockerfile將專案拷貝到執行環境中,有點略顯複雜了。

像JAVA這類語言如果程式碼編譯是在Dockerfile裡操作,還需要把原始碼構建進去,但實際執行時只需要構建出的包,這種把原始碼放進去有一定安全風險,並且也增加了映象體積。
為了解決上述問題,Docker 17.05開始支援多階段構建(multi-stage builds),可以簡化Dockerfile,減少映象大小。

例如,構建JAVA專案映象:

# git clone https://github.com/lizhenliang/tomcat-java-demo
# cd tomcat-java-demo
# vi Dockerfile
FROM maven AS build
ADD ./pom.xml pom.xml
ADD ./src src/
RUN mvn clean package

FROM lizhenliang/tomcat
RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY --from=build target/*.war /usr/local/tomcat/webapps/ROOT.war

# docker build -t demo:v1 .
# docker container run -d -v demo:v1

首先,第一個FROM 後邊多了個 AS 關鍵字,可以給這個階段起個名字。
然後,第二部分FROM用的我們上面構建的Tomcat映象,COPY關鍵字增加了—from引數,用於拷貝某個階段的檔案到當前階段。這樣一個Dockerfile就都搞定了。

小結:映象小有很多好處,例如快速部署、快速回滾。減少服務中斷時間,同時映象倉庫佔用磁碟空間也少了。