就是寫個docker的腳本然后依次運行,有點類似於gitlab中持續化集成的一系列步驟的自動部署和程序的順序執行。
以tomcat為例 ,通常我們在
usr/local/
目錄下
創建文件夾tomcat mkdir tomcat
然后需要創建一個大小寫敏感的Dockerfile文件 可以vi 可以vim可以touch Dockerfile
然后編輯Dockerfile文件
第一行:from 鏡像名 指定一個基礎鏡像 類似於Java類中的指定父類 這里from tomcat
接下來就能進行其他的一些操作 比如新建文件,執行其他命令,甚至你能夠進入某個目錄下執行一些命令
COPY 和run或者其他如volume指定數據卷
數據卷:容器內和容器寄生者兩者共享文件夾 比如指定的一些數據文件如data logs之類的,因為如果啟動容器時有指定 -rm的話關閉容器意味着刪除該容器(那就當然包括了其中的文件)所以通常不建議在容器中存儲數據。但可以存儲在volume中
指定volume:
VOLUME 宿主機目錄 容器目錄
CMD 容器啟動執行命令 和ENTRYPOINT作用用法一樣:通常都是執行某個.sh文件 如tomcat的shutdown.sh 或zookeeper的zkServer.sh之類的
二者區別:
首先二者都是作為容器啟動時執行的命令:但是CMD命令會被docker run中的參數覆蓋 而ENTRYPOINT不會
也就是只要你在ENTRYPOINT中指定的內容,它總是會被執行,而cmd中則不會。所以在cmd中設置建議內容 ENTRYPOINT中設置強制內容。
我覺得在docker compose中更好。。。
copy就是復制
EXPOSE 8080 暴露端口 可以暴露多個要寫多個EXPOSE 不能直接跟要不然你自己都不清楚
run:就普通的執行shell命令 執行shell腳本
這里還有必要提一下 一些Run命令如果需要在指定的目錄下進行的話不要cd后執行run,在run之前使用workdir指定下工作目錄,否則run的命令可能會很奇怪,而者一點都不奇怪。。。
ENTRYPOINT
其他的就正常根據需求即可。
WORKDIR 指定接下來的命令指定的工作區(直到下一個WORKDIR改變或者cd改變目錄)
可參照
FROM tomcat8 ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH RUN mkdir -p "$CATALINA_HOME" WORKDIR $CATALINA_HOME ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME/native-jni-lib ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR ENV OPENSSL_VERSION 1.1.0f-3+deb9u2 RUN.。。。。。。。一些亂七八糟的操作
編輯好Dockerfile后保存 esc :wq
准備構建鏡像:
docker build 后接參數 . 當在存在Dockerfile的目錄下執行時可以不指定Dockerfile的目錄 其他的話指定Dockerfile使用(默認使用Dockerfile作為其docker的Dockerfile) docker build -f 接目錄文件名。指定構建的鏡像的名稱: -t 后接鏡像名
執行上條語句 當鏡像不存在時 docker從網上拉取,並依次執行你設置的一系列內容。 '.'上面這個點代表着context 指定當前目錄有Dockerfile 如果沒有Dockerfile的話請在 -f后面指定
查看鏡像是否構建成功:docker images 只要不是虛懸的有是成功了
然后啟動鏡像 :
docker run --name 接鏡像名稱 接其他參數
