Dockerfile語法解析及應用

Dockerfile語法解析及應用

docker

FROM

指定基礎映象,比如FROM centos:7

FROM centos:7

RUN

在映象內部執行一些命令,比如安裝軟體,配置環境等等,執行可以使用“”

RUN groupadd -r mysql && useradd -r -g mysql mysql

ENV

設定變數的值,ENV MYQL_MAJOR 5。7,可以透過docker run ——e key=value修改,後面可以直接使用${YSQL_MAJOR}

ENV MYSQL_MAJOR 5。7

LABEL

設定映象標籤

LABEL email =“timor@163。com”LABEL name = “timor”

VOLUME

指定資料的掛載目錄

VOLUME /var/lib/mysql

COPY

將主機的檔案複製到映象內,如果目錄不存在,會自動建立所需要的目錄,注意只是複製,不會提取和解壓

COPY springboot。jar /opt/springboot/

ADD

將主機的檔案複製到映象內,和COPY類似,只是ADD會對壓縮檔案提取和解壓

ADD application。yml /etc/

WORKDIR

指定映象的工作目錄,之後的命令都是基於此目錄工作,若不存在則建立

WORKDIR /usr/localWORKDIR tomcatRUN touch demo。txt

會在/usr/local/tomcat下建立demo。txt

WORKDIR /rootADD app。yml test/

會在/root/test下多出一個app。yml檔案

CMD

容器啟動的時候預設會執行的命令,若有多個CMD命令,則最後一個生效

CMD [“mysql”]或CMD mysql

ENTRYPOINT

和CMD的使用類似

ENTRYPOINT [“docker-entrypoint。sh”]

和CMD的不同 docker run 執行時,會覆蓋CMD的命令,而ENTRYPOINT不會。

EXPOSE

指定映象要暴露的埠,啟動映象時,可以使用-p 將該埠對映給宿主機

EXPOSE 3306

Dockerfile實戰Springboot專案

1。在docke環境中新建一個目錄 “springboot”

mkdir springboot

上傳“springboot。jar”到該目錄下,並且在此目錄建立Dockerfile檔案

建立Dockerfile檔案,編寫內容

FROM openjdk:8 MAINTAINER timor LABEL name=“springboot” version=“1。0” author=“timor” COPY springboot-demo。jar springboot。jar CMD [“java”,“-jar”,“springboot。jar”]

基於Dockerfile構建映象

docker build -t spring-boot-image 。

基於image建立container

docker run -d ——name springboot -p 8081:8080 spring-boot-image

檢視啟動日誌

docker logs springboot ——tail=100 -f -t

在宿主機上訪問

curl localhost:8081/dockerfile

再次啟動一次

docker run -d ——name springboot2 -p 8082:8080 spring-boot-image