Dockerfile镜像的制作
Dockerfile鏡像的制作
如果學習Docker,那么制作鏡像這一步肯定不能少的,別人給你的是環(huán)境,而你自己做的才是你最終需要的東西,接下來就記錄一下如何制作一個滿足自己的鏡像,我們使用docker一般就是部署我們的應(yīng)用,那么我就制作一個鏡像來發(fā)布我們的應(yīng)用,制作方式我們就選擇Dockerfile的方式
Dockerfile:
docker其實就像是一個腳本文件,或者你可以直接把他看成一個腳本或者就是看成一條條命令的集合,在Dockerfile文件中我們一般分為四個部分:基礎(chǔ)鏡像、創(chuàng)建者信息(可省略)、制作鏡像過程(操作鏡像指令)、啟動容器的命令
接下來我們先了解一下這四部分分別是什么?
準備:獲取基礎(chǔ)鏡像
我們可以從鏡像倉庫中獲取適合我們的基礎(chǔ)鏡像使用docker search 查詢鏡像,使用docker pull 獲取,如:我要獲取一個jdk8的鏡像那么我們
#查詢鏡像倉庫中jdk8相關(guān)的鏡像 docker search java8 #獲取名字是corvis/java8的鏡像 docker pull corvis/java8如下圖:這個鏡像我已經(jīng)下載過了所以顯示的已經(jīng)存在
全部下載完成之后我們可以查一下我們的本地會有一個名字是corvis/java8的鏡像
#查詢本地鏡像 docker images到這里我們的基礎(chǔ)鏡像已經(jīng)獲取到了,我們把創(chuàng)建的Dockerfile文件放到一個單獨的目錄下,并把我們的項目打好的包也放在該目錄下,接下里我們開始寫我們的Dockerfile文件
制作的步驟
指定基礎(chǔ)鏡像
#指定基礎(chǔ)鏡像(我們所有的操作都是在這個鏡像的基礎(chǔ)上做的) FROM corvis/java8寫入創(chuàng)建者信息
MAINTAINER SunArmy把我們的項目copy到鏡像中,并暴露端口,這里我直接用springBoot寫了一個空的項目打包test.jar,端口開的80
#從本地copy到鏡像的/usr/local目錄下,使用ADD和COPY都可以 ADD test.jar /usr/local/ #暴露項目端口到宿主機 EXPOSE 80啟動容器我們需要執(zhí)行的命令(啟動項目的命令)
#使用CMD和ENTRYPOINT都可以 CMD ["java","-jar","/usr/local/test.jar"]我們已經(jīng)寫好了Dockerfile文件那么我們直接在當前目錄下執(zhí)行命令來生成鏡像
#根據(jù)Dockerfile文件制作鏡像 docker build -t test:1.0 . #查看本地鏡像 docker images至此,我們的鏡像已經(jīng)做好了
Dockerfile常用指令,語法
1、FROM <鏡像名image>:<版本號tag>一般是Dockerfile的第一行,指定基礎(chǔ)鏡像2、MAINTAINET <創(chuàng)建者信息>指明該鏡像的創(chuàng)建者信息3、RUN <命令>容器中需要執(zhí)行的命令,如:在容器創(chuàng)建之后需要在根目錄創(chuàng)建一個logs目錄 RUN mkdir /logs4、COPY <本地文件> <容器路徑>復制本地文件到鏡像中,本地路徑是以Dockkerfile所在目錄為根目錄 如:把test.jar復制到/usr/local目錄COPY test.jar /usr/local5、ADD <本地文件> <容器路徑>復制本地文件到鏡像中,本地路徑是以Dockkerfile所在目錄為根目錄,區(qū)別與COPY的可以從URL復制,可以直接解壓.tar.gz并把解壓之后的文件復制到鏡像 如:把test.jar復制到/usr/local目錄ADD test.jar /usr/local從URL復制到/usr/localADD URL /usr/local解壓test.tar.gz復制到鏡像/usr/localADD test.tar.gz /usr/local6、ENV <key> <value>設(shè)置環(huán)境變量,可以直接用的環(huán)境變量有如下$HOME 用戶主目錄$HOMENAME 容器主機名$PATH 容器環(huán)境變量(這個會經(jīng)常用到)如:我們要把/usr/bin添加到環(huán)境變量中ENV PATH $PATH:/usr/bin7、EXPOSE [<port>...]Docker服務(wù)端暴露端口,如:我們鏡像中有8080和8081兩個端口需要暴露出去EXPOSE 8080 80818、CMD ["",""]括號中的是需要執(zhí)行的命令指定啟動容器時執(zhí)行的命令,每個Dockerfile只能有一條CMD指令,如果指定了多條指令,則最后一條執(zhí)行(如果啟動的時候指定了命令會被啟動時指定的命令覆蓋)9、ENTRYPOINT ["",""]和CMD指令一樣,唯一不同的是即使啟動的時候指定了命令,該命令也不會被覆蓋10、VOLUME ["/data"]作用是創(chuàng)建在本地主機或其他容器可以掛載的數(shù)據(jù)卷,用來存放數(shù)據(jù)。11、USER username指定容器運行時的用戶名或UID,后續(xù)的RUN也會使用指定的用戶。要臨時使用管理員權(quán)限可以使用sudo。在USER命令 之前可以使用RUN命令創(chuàng)建需要的用戶。12、WORKDIR /path為后續(xù)的RUN CMD ENTRYPOINT指定配置工作目錄,可以使用多個WORKDIR指令,若后續(xù)指令用得是相對路徑,則會基 于之前的命令指定路徑。13.ONBUILD [INSTRUCTION]該配置指定當所創(chuàng)建的鏡像作為其他新建鏡像的基礎(chǔ)鏡像時所執(zhí)行的指令。以上就是寫Dockerfile文件所需要的基本指指令
寫好之后我們切入Dockerfile目錄下執(zhí)行 docker build 即可制成我們自己的鏡像,如:使用當前目錄的Dockerfile文件創(chuàng)建鏡像并設(shè)置標簽,-t參數(shù)設(shè)置標簽
docker build -t test:1.0 .
把鏡像保存到本地
docker save
如:把test:1.0這個鏡像保存到本地
docker save -o test_1.0.tar test:1.0
Usage: docker build [OPTIONS] PATH | URL | -Build an image from a DockerfileOptions:--add-host list Add a custom host-to-IP mapping (host:ip)--build-arg list Set build-time variables--cache-from strings Images to consider as cache sources--cgroup-parent string Optional parent cgroup for the container--compress Compress the build context using gzip--cpu-period int Limit the CPU CFS (Completely FairScheduler) period--cpu-quota int Limit the CPU CFS (Completely FairScheduler) quota-c, --cpu-shares int CPU shares (relative weight)--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)--disable-content-trust Skip image verification (default true)-f, --file string Name of the Dockerfile (Default is'PATH/Dockerfile')--force-rm Always remove intermediate containers--iidfile string Write the image ID to the file--isolation string Container isolation technology--label list Set metadata for an image-m, --memory bytes Memory limit--memory-swap bytes Swap limit equal to memory plus swap:'-1' to enable unlimited swap--network string Set the networking mode for the RUNinstructions during build (default "default")--no-cache Do not use cache when building the image--pull Always attempt to pull a newer version ofthe image-q, --quiet Suppress the build output and print imageID on success--rm Remove intermediate containers after asuccessful build (default true)--security-opt strings Security options--shm-size bytes Size of /dev/shm-t, --tag list Name and optionally a tag in the'name:tag' format--target string Set the target build stage to build.--ulimit ulimit Ulimit options (default [])C:\Users\SunArmy\Desktop\demo>docker save --helpUsage: docker save [OPTIONS] IMAGE [IMAGE...]Save one or more images to a tar archive (streamed to STDOUT by default)Options:-o, --output string Write to a file, instead of STDOUT轉(zhuǎn)載于:https://www.cnblogs.com/SunArmy/p/11061003.html
總結(jié)
以上是生活随笔為你收集整理的Dockerfile镜像的制作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery实现页面导航列表点击添加ac
- 下一篇: IP判断