??????歡迎來到我的CSDN主頁!????
??我是君易--鑨,一個在CSDN分享筆記的博主。????
??推薦給大家我的博客專欄《Docker之Dockerfile構建鏡像》。????
??如果感覺還不錯的話請給我關注加三連吧!????
前言
? ? ? ? 在上一期有關Docker的博客分享中我們學習到了Docker的一些數(shù)據(jù)卷和數(shù)據(jù)卷容器的一些基本的使用以及概念性的學習。本次的博客給大家?guī)淼氖怯嘘PDocker中的Dockerfile的學習。
一、什么是Dockerfile構建鏡像
1. 基本概述
????????Dockerfile是一個文本文件,其中包含一組用于自動化Docker鏡像構建的指令和配置。通過編寫Dockerfile,用戶可以定義鏡像的內(nèi)容、環(huán)境和運行時配置。構建過程基于這個Dockerfile文件,并通過Docker引擎執(zhí)行一系列指令來生成最終的Docker鏡像。
2.??Dockerfile指令和它們的作用:
2.1 From :指定基礎鏡像,構建新鏡像的起點。
FROM ubuntu:20.04
2.2?MAINTAINER: 標識鏡像的維護者。
MAINTAINER Your Name <your.email@example.com>
2.3?RUN: 在鏡像中執(zhí)行命令,用于安裝軟件包、更新系統(tǒng)等。
RUN apt-get update && apt-get install -y nginx
2.4?COPY/ADD: 將文件或目錄從構建上下文復制到鏡像中。
COPY ./app /app
2.5?WORKDIR: 設置工作目錄,后續(xù)的命令將在該目錄下執(zhí)行
WORKDIR /app
2.6?EXPOSE: 聲明容器運行時要監(jiān)聽的端口。
EXPOSE 80
2.7?CMD: 提供容器默認的執(zhí)行命令,可以被docker run時的參數(shù)覆蓋。
CMD ["nginx", "-g", "daemon off;"]
2.8?ENTRYPOINT: 設置容器啟動時執(zhí)行的命令,不可被docker run時的參數(shù)覆蓋。
ENTRYPOINT: 設置容器啟動時執(zhí)行的命令,不可被docker run時的參數(shù)覆蓋。
簡單示例
????????通過編寫Dockerfile,用戶可以定義從基礎鏡像到最終鏡像的整個構建過程,確保應用程序在Docker容器中正確運行。構建鏡像的命令通常是使用
docker build
,并在構建上下文中包含Dockerfile文件。例如:
docker build -t my_custom_image:tag .
?????????上述命令將使用當前目錄的Dockerfile構建一個名為
my_custom_image
的Docker鏡像,并指定了一個標簽tag
。
3.??基本結構
????????Dockerfile 由一行行命令語句組成,并且支持以 # 開頭的注釋行。????????一般的,Dockerfile 分為四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執(zhí)行指令。
部分 | 命令 |
基礎鏡像信息
|
FROM
|
維護者信息
|
MAINTAINER
|
鏡像操作指令
|
RUN
、
ENV
、
COPY
、
ADD
、
EXPOSE
、
WORKDIR
、
ONBUILD
、
USER
、
VOLUME
等
|
容器啟動時執(zhí)行指
令
|
CMD
、
ENTRYPOINT
|
圖解說明?
二、示例使用及說明、
1. 構建鏡像文件
? ? ? ? 接下來為大家講解如何去根據(jù)需求構建一個自定義的鏡像文件供自己使用,構建鏡像時必須得有一個基礎的鏡像。我們這里使用的是Centtos(原本沒有攜帶東西),我們輸入指令
vim Dockerfile文件進行新建及編輯
vim Dockerfile
? ? ? ? ?輸入的內(nèi)容如下
FROM centos
MAINTAINER 2081718134@qq.com
WORKDIR /test
COPY spring.jar /test
#1.指定基礎鏡像,并且必須是第一條指令FROM centos:latest#2.指明該鏡像的作者和其電子郵件MAINTAINER xx "xx@qq.com"#3.在構建鏡像時,指定鏡像的工作目錄,之后的命令都是基于此工作目錄,如果不存在,則會創(chuàng)建目錄WORKDIR /usr/local/java#4.一個復制命令,把jdk安裝文件復制到鏡像中,注意:jdk*.tar.gz使用的是相對路徑COPY spring.jar /test
? ? ? ? 輸入完成之后按esc按鍵,輸入;wq保存并且退出。接下來是我們進行構建鏡像。
輸入指令:docker build -t spring:v1 .
?
? ? ? ? ?我們?nèi)缓笪覀冞M行查看我們剛才構建的鏡像文件。
輸入指令:docker images
? ? ? ? ?我們進入我們的鏡像文件的容器中
輸入命令:docker run -it spring:v1
? ? ? ? 我們可以輸入指令:ls查看我們文件下所存在的文件?
? ? ? ? ?我們運行這個jar包文件,輸入指令:java -jar spring.jar
? ? ? ? 無法運行的原因是因為我們使用的數(shù)基礎鏡像centos沒有啟動jar包的jdk,因此啟動jar該需要我們下載所需的jdk文件。?
2.??鏡像運行
? ? ? ? 接下來我們需要去下載我們的jdk環(huán)境變量,我們輸入指令:vim /etc/profile 進行配置環(huán)境變量?
? ? ? ? ?配置jdk環(huán)境變量內(nèi)容
#java environment
export JAVA_HOME=/javaxl/jdk1.8.0_151(jdk解壓路徑)
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
? ? ? ? ?這是我們之前在centos中安裝時的步驟,在Docker中不一樣。
ADD jdk-8u221-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
? ? ? ? ?我們在我們的鏡像配置文件中添加上述的內(nèi)容在后面,但首先我們先要導入我們的jdk的壓縮包和jre的壓縮包。
?
? ? ? ? 我們對其鏡像文件Dockerfile進行編輯?
? ? ? ? ?我們將鏡像文件重新編譯一遍
? ? ? ? 我們進入該鏡像文件中進行查看文件?
? ? ? ? ?接下來是檢查我們安裝的jdk是否生效
? ? ? ? ?接下下我們可以測試運行spring.jar包
? ? ? ? ?我們接下來進行運行項目,我們運行時不是使用run因為我們是等容器打開后再運行因此使用的cmd命令。
CMD ["java -jar spring.jar"]
? ? ? ? 我們在重新構建一個鏡像文件?
? ? ? ? 我們在運行這個文件?
? ? ? ? ?我們重新編輯一下我們的Dockerfile文件,重新構建一個鏡像文件并且運行
3. 鏡像優(yōu)化
? ? ? ? 在我們的開發(fā)過程中jdk是我們必不可少的,但是在我們的運行項目中所需的是jre,因此接下來的操作就是將jdk修改為jre進行一系列的優(yōu)化。下面我們首先修改Dockerfile文件內(nèi)容,然后構建鏡像文件
FROM centos
MAINTAINER 2081718134@qq.com
WORKDIR /test
COPY spring.jar /test
ADD jre-8u391-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
CMD java -jar spring.jar
? ? ? ? ?我們接下來就是訪問項目,首先清除掉所有的容器,然后創(chuàng)建對應的容器進行運行使用,最后再網(wǎng)頁進行訪問。
? ? ? ? ?我們接下來的操作時將我們的鏡像文件上傳到我們的倉庫之中,但是默認的倉庫是docker.io/library/spring的官網(wǎng)倉庫,需要我們?nèi)プ?。但是我們可以使用阿里的倉庫進行上傳,上傳快還方便。
網(wǎng)址:容器鏡像服務 (aliyun.com)
? ? ? ? ?我們選擇個人版示例進行新建對其進行一系列的操作。我們進行一系列操作后的界面如下
? ? ? ? ?我們使用前需要登陸我們的阿里賬號
? ? ? ? 我我們直接執(zhí)行該命令,然后在輸入我們的之前設置的密碼即可。?
?
? ? ? ? 我們對其創(chuàng)建一個命名空間?
?
? ? ? ? ?我們新建完命名空間之后我們還要去新建一個倉庫,用于我們上傳鏡像文件。
? ? ? ? 我們創(chuàng)建好倉庫之后,鏡像版本中沒有任何東西,需要我們進行手動的推送上去。?推送的操作網(wǎng)頁上有
? ? ? ? 給我們要上傳的鏡像取一個別名。?
?
?
? ? ? ? ?我對其要上傳的鏡像修改為我們阿里的倉庫地址
? ? ? ? ?上述圖片是修改上傳的網(wǎng)址路徑,我們在查看我們的鏡像。?
? ? ? ? ?我們在將其這個進行進行推送到我們的倉庫中
? ? ? ? ?我們可以在我們的倉庫中查看我們的鏡像
? ? ? ? ?下載鏡像輸入指令
docker pull +鏡像名+版本即可
?????本期的博客分享到此結束????
????各位老鐵慢慢消化????
????下期博客博主會帶來新貨????
??三連加關注,閱讀不迷路?!??文章來源:http://www.zghlxwxcb.cn/news/detail-800737.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-800737.html
到了這里,關于Docker之Dockerfile構建鏡像的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!