Dockerfile映象的製作

SunArmy發表於2019-06-20

Dockerfile映象的製作


如果學習Docker,那麼製作映象這一步肯定不能少的,別人給你的是環境,而你自己做的才是你最終需要的東西,接下來就記錄一下如何製作一個滿足自己的映象,我們使用docker一般就是部署我們的應用,那麼我就製作一個映象來發布我們的應用,製作方式我們就選擇Dockerfile的方式

Dockerfile:

docker其實就像是一個指令碼檔案,或者你可以直接把他看成一個指令碼或者就是看成一條條命令的集合,在Dockerfile檔案中我們一般分為四個部分:基礎映象、建立者資訊(可省略)、製作映象過程(操作映象指令)、啟動容器的命令

接下來我們先了解一下這四部分分別是什麼?

準備:獲取基礎映象

我們可以從映象倉庫中獲取適合我們的基礎映象使用docker search 查詢映象,使用docker pull 獲取,如:我要獲取一個jdk8的映象那麼我們

#查詢映象倉庫中jdk8相關的映象
docker search java8
#獲取名字是corvis/java8的映象
docker pull corvis/java8

如下圖:這個映象我已經下載過了所以顯示的已經存在

Dockerfile映象的製作

全部下載完成之後我們可以查一下我們的本地會有一個名字是corvis/java8的映象

#查詢本地映象
docker images

Dockerfile映象的製作

到這裡我們的基礎映象已經獲取到了,我們把建立的Dockerfile檔案放到一個單獨的目錄下,並把我們的專案打好的包也放在該目錄下,接下里我們開始寫我們的Dockerfile檔案

Dockerfile映象的製作

製作的步驟

  1. 指定基礎映象

    #指定基礎映象(我們所有的操作都是在這個映象的基礎上做的)
    FROM corvis/java8
  2. 寫入建立者資訊

    MAINTAINER SunArmy 
  3. 把我們的專案copy到映象中,並暴露埠,這裡我直接用springBoot寫了一個空的專案打包test.jar,埠開的80

    #從本地copy到映象的/usr/local目錄下,使用ADD和COPY都可以
    ADD test.jar /usr/local/
    #暴露專案埠到宿主機
    EXPOSE 80
  4. 啟動容器我們需要執行的命令(啟動專案的命令)

    #使用CMD和ENTRYPOINT都可以
    CMD ["java","-jar","/usr/local/test.jar"]

    Dockerfile映象的製作

FROM corvis/java8
MAINTAINER SunArmy
COPY test.jar /usr/local/
EXPOSE 80
CMD ["java","-jar","/usr/local/test.jar"]
  1. 我們已經寫好了Dockerfile檔案那麼我們直接在當前目錄下執行命令來生成映象

    #根據Dockerfile檔案製作映象
    docker build -t test:1.0 .
    #檢視本地映象
    docker images

    Dockerfile映象的製作

至此,我們的映象已經做好了

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

相關文章