Dockerfile映象的製作
如果學習Docker,那麼製作映象這一步肯定不能少的,別人給你的是環境,而你自己做的才是你最終需要的東西,接下來就記錄一下如何製作一個滿足自己的映象,我們使用docker一般就是部署我們的應用,那麼我就製作一個映象來發布我們的應用,製作方式我們就選擇Dockerfile的方式
Dockerfile:
docker其實就像是一個指令碼檔案,或者你可以直接把他看成一個指令碼或者就是看成一條條命令的集合,在Dockerfile檔案中我們一般分為四個部分:基礎映象、建立者資訊(可省略)、製作映象過程(操作映象指令)、啟動容器的命令
接下來我們先了解一下這四部分分別是什麼?
準備:獲取基礎映象
我們可以從映象倉庫中獲取適合我們的基礎映象使用docker search 查詢映象,使用docker pull 獲取,如:我要獲取一個jdk8的映象那麼我們
#查詢映象倉庫中jdk8相關的映象
docker search java8
#獲取名字是corvis/java8的映象
docker pull corvis/java8
如下圖:這個映象我已經下載過了所以顯示的已經存在
全部下載完成之後我們可以查一下我們的本地會有一個名字是corvis/java8的映象
#查詢本地映象
docker images
到這裡我們的基礎映象已經獲取到了,我們把建立的Dockerfile檔案放到一個單獨的目錄下,並把我們的專案打好的包也放在該目錄下,接下里我們開始寫我們的Dockerfile檔案
製作的步驟
指定基礎映象
#指定基礎映象(我們所有的操作都是在這個映象的基礎上做的) FROM corvis/java8
寫入建立者資訊
MAINTAINER SunArmy
把我們的專案copy到映象中,並暴露埠,這裡我直接用springBoot寫了一個空的專案打包test.jar,埠開的80
#從本地copy到映象的/usr/local目錄下,使用ADD和COPY都可以 ADD test.jar /usr/local/ #暴露專案埠到宿主機 EXPOSE 80
啟動容器我們需要執行的命令(啟動專案的命令)
#使用CMD和ENTRYPOINT都可以 CMD ["java","-jar","/usr/local/test.jar"]
FROM corvis/java8
MAINTAINER SunArmy
COPY test.jar /usr/local/
EXPOSE 80
CMD ["java","-jar","/usr/local/test.jar"]
我們已經寫好了Dockerfile檔案那麼我們直接在當前目錄下執行命令來生成映象
#根據Dockerfile檔案製作映象 docker build -t test:1.0 . #檢視本地映象 docker images
至此,我們的映象已經做好了
Dockerfile常用指令,語法
1、FROM <映象名image>:<版本號tag>
一般是Dockerfile的第一行,指定基礎映象
2、MAINTAINET <建立者資訊>
指明該映象的建立者資訊
3、RUN <命令>
容器中需要執行的命令,如:在容器建立之後需要在根目錄建立一個logs目錄
RUN mkdir /logs
4、COPY <本地檔案> <容器路徑>
複製本地檔案到映象中,本地路徑是以Dockkerfile所在目錄為根目錄 如:把test.jar複製到/usr/local目錄
COPY test.jar /usr/local
5、ADD <本地檔案> <容器路徑>
複製本地檔案到映象中,本地路徑是以Dockkerfile所在目錄為根目錄,區別與COPY的可以從URL複製,可以直接解壓.tar.gz並把解壓之後的檔案複製到映象
如:把test.jar複製到/usr/local目錄
ADD test.jar /usr/local
從URL複製到/usr/local
ADD URL /usr/local
解壓test.tar.gz複製到映象/usr/local
ADD test.tar.gz /usr/local
6、ENV <key> <value>
設定環境變數,可以直接用的環境變數有如下
$HOME 使用者主目錄
$HOMENAME 容器主機名
$PATH 容器環境變數(這個會經常用到)
如:我們要把/usr/bin新增到環境變數中
ENV PATH $PATH:/usr/bin
7、EXPOSE [<port>...]
Docker服務端暴露埠,如:我們映象中有8080和8081兩個埠需要暴露出去
EXPOSE 8080 8081
8、CMD ["",""]
括號中的是需要執行的命令
指定啟動容器時執行的命令,每個Dockerfile只能有一條CMD指令,如果指定了多條指令,則最後一條執行(如果啟動的時候指定了命令會被啟動時指定的命令覆蓋)
9、ENTRYPOINT ["",""]
和CMD指令一樣,唯一不同的是即使啟動的時候指定了命令,該命令也不會被覆蓋
10、VOLUME ["/data"]
作用是建立在本地主機或其他容器可以掛載的資料卷,用來存放資料。
11、USER username
指定容器執行時的使用者名稱或UID,後續的RUN也會使用指定的使用者。要臨時使用管理員許可權可以使用sudo。在USER命令 之前可以使用RUN命令建立需要的使用者。
12、WORKDIR /path
為後續的RUN CMD ENTRYPOINT指定配置工作目錄,可以使用多個WORKDIR指令,若後續指令用得是相對路徑,則會基 於之前的命令指定路徑。
13.ONBUILD [INSTRUCTION]
該配置指定當所建立的映象作為其他新建映象的基礎映象時所執行的指令。
以上就是寫Dockerfile檔案所需要的基本指指令
寫好之後我們切入Dockerfile目錄下執行 docker build 即可製成我們自己的映象,如:使用當前目錄的Dockerfile檔案建立映象並設定標籤,-t引數設定標籤
docker build -t test:1.0 .
Usage: docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile
Options:
--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 Fair
Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair
Scheduler) 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 RUN
instructions during build (default "default")
--no-cache Do not use cache when building the image
--pull Always attempt to pull a newer version of
the image
-q, --quiet Suppress the build output and print image
ID on success
--rm Remove intermediate containers after a
successful 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 [])
把映象儲存到本地
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 Dockerfile
Options:
--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 Fair
Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair
Scheduler) 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 RUN
instructions during build (default "default")
--no-cache Do not use cache when building the image
--pull Always attempt to pull a newer version of
the image
-q, --quiet Suppress the build output and print image
ID on success
--rm Remove intermediate containers after a
successful 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 --help
Usage: 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