Dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本。html
(1)docker從基礎鏡像運行一個容器
(2)執行一條指令並對容器做出修改
(3)執行相似docker commit的操做提交一個新的鏡像層
(4)docker再基於剛提交的鏡像運行一個新容器
(5)執行dockerfile中的下一條指令直到全部指令都執行完成java
從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別表明軟件的三個不一樣階段,linux
Dockerfile面向開發,Docker鏡像成爲交付標準,Docker容器則涉及部署與運維,三者缺一不可,協力充當Docker體系的基石。
git
好比:WORKDIR $MY_PATHgithub
ENTRYPOINT :
3. 指定一個容器啓動時要運行的命令
4. ENTRYPOINT 的目的和 CMD 同樣,都是在指定容器啓動程序及參數web
Docker Hub 中 99% 的鏡像都是經過在 base 鏡像中安裝和配置須要的軟件構建出來的
docker
自定義mycentos目的使咱們本身的鏡像具有以下: 登錄後的默認路徑 vim編輯器 查看網絡配置ifconfig支持
準備編寫DockerFile文件
我這裏就在根目錄下的mydocker文件夾下新建一個Dockerfile2文件
apache
myCentOS內容DockerFile
Dockerfile2文件寫入的內容,郵箱改爲本身的,ENV用於設置環境變量,WORKDIR就是登陸的默認路徑,echo是構建成功輸出打印的內容。vim
FROM centos MAINTAINER xdr630<xdr630@126.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "success--------------ok" CMD /bin/bash
docker build -t 新鏡像名字:TAG .
會看到 docker build 命令最後有一個 . 「. 」表示當前目錄
centos
docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
docker images 查看下:
docker run -it 新鏡像名字:TAG
能夠看到,咱們本身的新鏡像已經支持vim/ifconfig命令,擴展成功了。
默認登陸的路徑改變了,也可使用vim了和ifconfig命令了
docker history 鏡像名
docker images 鏡像名,這樣也能夠模糊查詢不一樣版本的mycentos
docker run -it -p 8888:8080 tomcat ls -l
上面的 ls -l 就會把CMD前面的一行給覆蓋掉,至關於執行了 ls -l /usr/local/tomcat
這個時候tomcat也沒有啓動:
curl命令能夠用來執行下載、發送各類HTTP請求,指定HTTP頭部等操做。
若是系統沒有curl可使用yum install curl安裝,也能夠下載安裝。
curl是將下載文件輸出到stdout
使用命令:curl http://www.baidu.com
執行後,www.baidu.com的html就會顯示在屏幕上了
FROM centos RUN yum install -y curl CMD [ "curl", "-s", "http://ip.cn" ]
這是最簡單的使用方法。用這個命令得到了http://curl.haxx.se指向的頁面,一樣,若是這裏的URL指向的是一個文件或者一幅圖均可以直接下載到本地。若是下載的是HTML文檔,那麼缺省的將只顯示文件頭部,即HTML文檔的header。要所有顯示,請加參數 -i
咱們能夠看到可執行文件找不到的報錯,executable file not found。
以前咱們說過,跟在鏡像名後面的是 command,運行時會替換 CMD 的默認值。
所以這裏的 -i 替換了原來的 CMD,而不是添加在原來的 curl -s http://ip.cn 後面。而 -i 根本不是命令,因此天然找不到。
那麼若是咱們但願加入 -i 這參數,咱們就必須從新完整的輸入這個命令:
$ docker run myip curl -s http://ip.cn -i
FROM centos RUN yum install -y curl ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
FROM centos MAINTAINER zzyy<zzyybs@126.com> #把宿主機當前上下文的c.txt拷貝到容器/usr/local/路徑下 COPY c.txt /usr/local/cincontainer.txt #把java與tomcat添加到容器中 ADD jdk-8u171-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-9.0.8.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_171 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #容器運行時監聽的端口 EXPOSE 8080 #啓動時運行tomcat # ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ] # CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"] CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
docker run -d -p 9080:8080 --name myt9 -v /zzyyuse/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.8/webapps/test -v /zzyyuse/mydockerfile/tomcat9/tomcat9logs/:/usr/local/apache-tomcat-9.0.8/logs --privileged=true zzyytomcat9
備註
Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied
解決辦法:在掛載目錄後多加一個--privileged=true參數便可
<?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>
<%@ 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> </html>