Docker系列教程04-Docker構建鏡像的三種方式


簡介

創建鏡像的方法主要有三種:基於已有鏡像的容器創建基於本地模板導入基於Dockerfile創建

今天就逐一講述為大家講述,如何構建屬於自己的docker鏡像。

1、基於容器構建鏡像

基於已有容器構建鏡像主要是通過docker commit命令來構建新的鏡像,語法規則如下:

docker commit 語法

下面將演示下如何基於已有容器構建鏡像

1、首先,創建一個容器,並在其容器內創建一個test文件,之后退出。代碼如下:

root@ubuntu:~# docker run -it ubuntu:18.04 /bin/bash
root@b66c08d61f9e:/# echo "DIY" > /test
root@b66c08d61f9e:/# exit
exit

2、基於該容器使用docker commit命令構建新的鏡像

root@ubuntu:~# docker commit -m "new_image" -a "cnLinuxer" b66 myubuntu:v1
sha256:de7a0211f27fb71ca34c3a5c1829f6d2a69c15ef74cd397a52f2cc8a5e98e1b9

參數解釋:上面-m選項指定了新鏡像的提交信息,-a標注作者信息,b66是容器ID,myubuntu:v1是指定的新鏡像名稱。

3、此時本地鏡像庫已生成myubuntu:v1鏡像

root@ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myubuntu            v1                  de7a0211f27f        8 minutes ago       64.2MB
...

4、使用新生成的鏡像構建容器,測試自定義數據有無丟失

root@ubuntu:~# docker run -it myubuntu:v1 /bin/bash
root@d11d9577f31b:/# cat /test
DIY
root@d11d9577f31b:/#

基於已有容器構建鏡像,其實質就是將容器里運行的程序以及該程序的運行環境打包起來生成新的鏡像。

2、基於本地模板導入

用戶也可以從模板文件中導入鏡像,主要使用docker import命令

下面演示基於本地模板導入鏡像

1、首先,創造出一個模板,即 將容器導入到一個模板文件中

root@ubuntu:~# docker export b66 > /root/myubuntu.tar
root@ubuntu:~# ls /root
/root/myubuntu.tar

2、利用模板導入成鏡像

root@ubuntu:~# docker import /root/myubuntu.tar qinlulu/ubuntu:18.04
sha256:498afccbfb2ddcc7b8ce5a697e982f5bc8d3af9a55adf6a7cc2fd1121dbee36e

3、此時本地鏡像倉庫多出一個qinlulu/ubuntu:18.04鏡像

root@ubuntu:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
qinlulu/ubuntu      18.04               498afccbfb2d        6 seconds ago       64.2MB

3、基於Dockerfile構建

基於Dockerfile構建鏡像就目前而言是使用最為廣泛的。Dockerfile是由一組指令組成的文件,其每條指令對應Linux中的一條命令,Docker程序通過讀取Dockerfile中的指令最終生成鏡像。

Dockerfile指令

下面演示基於Dockerfile文件構建nginx鏡像的實例

1、准備工作:

創建一個目錄,在該目錄里編寫dockerfile及存放nginx軟件包

root@ubuntu:~# mkdir -p /opt/nginx
root@ubuntu:~# wget -P /opt/nginx http://nginx.org/download/nginx-1.11.1.tar.gz
root@ubuntu:~# touch /opt/nginx/Dockerfile
  // 需要准備好以下兩個文件
root@ubuntu:~# ls /opt/nginx/
Dockerfile  nginx-1.11.1.tar.gz

2、編寫dockerfile文件,代碼如下:

root@ubuntu:~# vim /opt/nginx/Dockerfile
FROM centos:7.5.1804 #指定父鏡像
MAINTAINER mynginx   #指定維護者信息
ADD nginx-1.11.1.tar.gz /usr/local #將本地nginx軟件包上傳至容器/usr/local/下
RUN yum -y install vim wget gcc gcc-c++ make openssl-devel pcre-devel #yum安裝依賴軟件
WORKDIR /usr/local/nginx-1.11.1/ #進入nginx工作目錄
RUN ./configure --prefix=/usr/local/nginx && make && make install #編譯並安裝nginx服務
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf #關閉nginx后台運行
ENV PATH /usr/local/nginx/sbin:$PATH #添加nginx的環境變量
EXPOSE 80 #將容器的80端口映射出來
CMD ["nginx"]  #執行nginx命令,啟動nginx

3、構建nginx鏡像

root@ubuntu:/opt/nginx# docker build -t mynginx:v1

輸出兩個Successfully即為構建成功!如下圖:

dockerfile構建鏡像過程

4、運行nginx鏡像

root@ubuntu:~# docker run -itd -p 888:80 mynginx:v1
e93a52fffd9ea4928a062f00613e4325296042a143307602700ddf0c463c02c9

5、測試nginx服務

瀏覽器訪問測試

更多Dockerfile的內容將通過后面大量的構建實例再為大家詳細介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM