本篇來自於尚硅谷周陽老師 https://www.bilibili.com/vide...
上一篇: docker 入門到實戰(五)docker容器數據卷
Dockerfile是一個包含用於組合映像的命令的文本文檔。可使用在命令行中調用任何命令。 Docker經過讀取Dockerfile中的指令自動生成映像。html
FROM scratch ADD centos-7-x86\_64-docker.tar.xz / LABEL org.label-schema.schema-version="1.0" \ org.label-schema.name="CentOS Base Image" \ org.label-schema.vendor="CentOS" \ org.label-schema.license="GPLv2" \ org.label-schema.build-date="20191001" CMD \["/bin/bash"\]
從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別表明軟件的三個不一樣階段,java
Dockerfile面向開發,Docker鏡像成爲交付標準,Docker容器則涉及部署與運維,三者缺一不可,協力充當Docker體系的基石。linux
保留字 | 描述 |
---|---|
FROM | 基礎鏡像,當前新鏡像是基於哪一個鏡像的 |
MAINTAINER | 鏡像維護者的姓名和郵箱地址 |
RUN | 容器構建時須要運行的命令 |
EXPOSE | 當前容器對外暴露出的端口 |
WORKDIR | 指定在建立容器後,終端默認登錄的進來工做目錄,一個落腳點 |
ENV | 用來在構建鏡像過程當中設置環境變量 (k,v)形式 |
ADD | 將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包 |
COPY | 相似ADD,拷貝文件和目錄到鏡像中。將從構建上下文目錄中 <源路徑> 的文件/目錄複製到新的一層的鏡像內的 <目標路徑> 位置 (k,v)形式和json格式均可以 |
VOLUME | 容器數據卷,用於數據保存和持久化工做 |
CMD | 指定一個容器啓動時要運行的命令(Dockerfile 中能夠有多個 CMD 指令,但只有最後一個生效,CMD 會被 docker run 以後的參數替換) |
ENTRYPOINT | 指定一個容器啓動時要運行的命令 (ENTRYPOINT 的目的和 CMD 同樣,都是在指定容器啓動程序及參數) |
ONBUILD | 當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發 |
幾乎99%的鏡像都來自於這個基礎的鏡像git
默認centos只有很基礎的命令 vim , ip addr都沒有
編寫一個基於centos的鏡像 而且有編輯和查看ip的功能github
FROM centos MAINTAINER rem ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vin RUN yum -y install net-tools EXPOSE 80 CMD echo "finished,---successfully" CMD /bin/bash
docker build [OPTIONS] PATH | URL | -
[OPTIONS] 選項web
-f :指定要使用的Dockerfile路徑;
--tag, -t:鏡像的名字及標籤
. :表示當前文件夾docker
Dockerfile文件apache
FROM centos MAINTAINER rem ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo "finished,---successfully" CMD /bin/bash
能夠看到 vi命令和 ip addr命令可使用了
json
docker history [OPTIONS] IMAGE
新建一個目錄dockerfile
再在下面建一個測試文件
拷貝jdk和tomcat到目錄中vim
新建掛載目錄
Dockerfile文件
FROM centos MAINTAINER rem #把宿主機當前上下文的test.txt拷貝到容器/usr/local/路徑下 COPY test.txt /usr/local/cincontainer.txt #把java與tomcat添加到容器中 ADD jdk-8u144-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.33.tar.gz /usr/local/ #安裝vim編輯器 RUN yum -y install vim #設置工做訪問時候的WORKDIR路徑,登陸落腳點 ENV MYPATH /usr/local WORKDIR $MYPATH #配置java與tomcat環境變量 ENV JAVA_HOME /usr/local/jdk1.8.0_144 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.33 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.33 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器運行時監聽的端口 EXPOSE 8080 #啓動時運行tomcat # ENTRYPOINT ["/usr/local/apache-tomcat-9.0.33/bin/startup.sh" ] # CMD ["/usr/local/apache-tomcat-9.0.33/bin/catalina.sh","run"] CMD /usr/local/apache-tomcat-9.0.33/bin/startup.sh && tail -F /usr/local/apache-tom
docker run -di -p 9090:8080 --name mytomcat9 -v /root/dockerfile/test:/usr/local/apache-tomcat-9.0.33/webapps/test -v /root/dockerfile/logs:/usr/local/apache-tomcat-9.0.33/logs rem/tomcat9
Dockerfile上覆制的文件
a.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> -----------welcome------------ <%="i am in docker tomcat self "%> <br> <br> <% System.out.println("=============docker tomcat self");%> </body>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app\_2\_5.xsd" id="WebApp\_ID" version="2.5"> <display-name>test</display-name> </web-app>
日誌