網站首頁 編程語言 正文
一、什么是 Docker 鏡像?
Docker 鏡像可以看作是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。
鏡像是Docker容器的基石,容器是鏡像的運行實例,有了鏡像才能啟動容器。
二、自定義鏡像的好處?
從軟件版本管理角度講,Dockerfile本身是腳本文件,是可以版本化的。理論上使用Dockerfile,在任何時候任何機器上都可以重演鏡像制作過程制作出一模一樣的鏡像,這是非常有利于工程化的。
Dockerfile 可以快速幫助我們構建自己的定制鏡像!
三、構建自己的Centos
通過編寫 Dockerfile 文件來制作Centos 鏡像,并在官方提供的基礎上添加 vim、net-tools文件
新建 /home/dockerfile
cd /home mkdir dockerfile
進入新建的dockerfile文件夾,并新建 mydockerfile-centos
# 基礎鏡像引入centos7 FROM centos:centos7 # 作者 MAINTAINER xiaowang<wanghuichen2003@163.com> #配置工作目錄 ENV MYPATH /usr/local WORKDIR $MYPATH #由于官方默認提供的centos是壓縮版本,沒有vim以及一些其它的命令,只有基礎的命令,我們需要去下載安裝包 RUN yum -y install vim RUN yum -y install net-tools # 開放端口80 EXPOSE 80 # 輸出工作目錄 CMD echo $MYPATH CMD echo "--- end ---" # 以bin/bash啟動 CMD /bin/bash
查看編寫好的文件
編譯剛剛寫好的centos7
# 注意后面有一個 . 代表當前目錄 docker build -f mydockerfile-centos -t mycentos:0.1 .
等待編譯完成即可
完成后運行鏡像
docker run -it mycentos:0.1
vim 文件
vim test pwd
查看ifconfig
查看鏡像歷史操作
docker history 2c2feb50d12c
四、RUN、CMD和ENTRYPOINT的區別
RUN命令與CMD命令的區別在哪里?
簡單說,RUN命令在Image 文件的構建階段執行,執行結果會打包進入image文件,CMD命令則是在容器啟動后執行。另外,一個Dockerfile可以包含多個RUN命令,但只能由一個CMD命令
注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否則它會覆蓋CMD命令。
CMD和ENTRYPOINT命令的區別
- CMD:指定容器啟動的時候要運行的命令,只有最后一個會生效
- ENRTYPOINT:指定容器啟動的時候要運行的命令,命令可以追加
CMD命令
# 進入dockerfile 目錄,新建dockerfile-cmd-test文件 FROM centos:centos7 CMD ["ls", "-a"]
編譯并執行文件
# 編譯文件 docker build -f dockerfile-cmd-test -t cmdtest . # 執行文件 docker run f74776bf8b3c
追加命令查看全部文件目錄
docker run f74776bf8b3c -l
可以看到,cmd命令把上一個命令給替換了,由于 -l 不是命令,所以報錯了,證明cmd命令會覆蓋前面的cmd命令,只執行最后一個cmd命令
再次執行查看全部文件目錄命令
docker run f74776bf8b3c ls -al
可以看到,上一個 ls-a命令已被替換為ls -al
命令!
ENTRYPOINT命令
回到 /home/dockerfile 目錄,新建文件測試ENTRYPOINT并寫入內容
cd /home/dockerfile vim dockerfile-entrypoint # 寫入以下命令 FROM centos:centos7 ENTRYPOINT ["ls", "-a"]
編譯文件并執行容器
# 編譯文件 docker build -f dockerfile-entrypoint # 執行容器 docker run 29891c9ff3c9
在啟動時追加命令
docker run 29891c9ff3c9 -l
可以看到直接追加了命令
五、【實戰】Dockerfile制作tomcat鏡像
下載JDK、Tomcat文件
jdk:https://www.jb51.net/softs/698365.html
Tomcat:https://www.jb51.net/softs/537911.html
使用Filezilla將文件上傳至 /home/xiaowang
目錄下
上傳成功后查看文件
編寫文件
編寫dockerfile文件,文件名使用官方命名:Dockerfile,build的時候會默認尋找當前目錄下的文件,不需要 -f 參數指定
vim Dockerfile # 寫入以下文件 FROM centos:centos7 MAINTAINER ethan<wanghuichen2003@163.com> COPY readme.txt /usr/local/readme.txt ADD jdk-8u311-linux-x64.tar.gz /usr/local ADD apache-tomcat-9.0.62.tar.gz /usr/local/ RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_311 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib.tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.62 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.62 ENVPATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.62/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.62/bin/logs/catalina.out
構建鏡像
編譯鏡像文件
docker build -t diytomcat:1.0
啟動鏡像
編譯完成后啟動鏡像
# 啟動容器,外部端口3355映射內部容器8080 重命名容器名稱,掛載鏡像 docker run -d -p 3355:8080 --name diytomcat -v /home/dockerfile/xiaowang/test:/usr/local/apache-tomcat-9.0.62/webapps/test diytomcat:1.0
測試訪問
訪問外網ip地址+3355端口出現tomcat界面
在tomcat目錄下新建html文件
由于內部容器和外部進行了掛載,所以修改外部內容,內部容器也會更新
我們進入目錄,新建html文件對外訪問時展示此頁面
cd /home/dockerfile/xiaowang/test vim test.html
寫入以下內容
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>Title</title> </head> <body> <h1>簡單的HTML頁面</h1> <p>Hello World!</p> </body> </html>
瀏覽器后綴+test路徑訪問
ok,至此tomcat鏡像制作完畢
小結
以上就是【Bug 終結者】對 【云原生】Docker 進階 – 構建自定義鏡像實戰 自定義我們的Docker鏡像可利于我們的快速開發,提高開發的效率,可謂是開發利器!
原文鏈接:https://blog.csdn.net/weixin_45526437/article/details/125271091
相關推薦
- 2022-07-15 SQL?Server數據表壓縮_MsSql
- 2023-04-19 error:13: Permission denied (nginx 查看日志 failed (13
- 2022-12-05 如何在React中直接使用Redux_React
- 2023-12-11 Spring使用注解開發
- 2022-08-18 Kotlin函數使用示例教程_Android
- 2022-03-15 spark-submit hive SQL standards based authorizati
- 2022-11-02 React+Mobx基本使用、模塊化操作_React
- 2022-04-11 Matplotlib直方圖繪制中的參數bins和rwidth的實現_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支