Dockerfile構建鏡像


1.Dockerfile基本指令

dockerfile的指令主要可以匯總為如下,使用dockerfile的前提是學習會這些指令的基本使用,具體如下:
• FROM #指令基礎鏡像
• MAINTAINER #指定維護者/作者信息,也可以沒有
• RUN #具體執行的操作,在命令前面加上RUN即可
• ADD #COPY文件,會自動進行解壓
• WORKDIR #設置當前工作目錄
• VOLUME #設置卷,掛載主機目錄
• EXPOSE #指定對外的端口
• CMD #指定容器啟動后需要干的事情
• COPY #復制文件
• ENV #環境變量
• ENIRYPOINT #容器啟動后執行的命令

2.Dockerfile概述

        使用dockerfile主要是用於構建docker鏡像文件信息,相當於一個腳本,通過dockerfile自己的指令,來構建軟件依賴,文件依賴,存儲等等情況。
Dockerfile使用
         在docker中創建鏡像可以分為兩個方法,這兩個方法具體可以總結為如下:
    •    手動修改容器內容,然后docker commit提交容器為新的鏡像文件
    •    通過在dockerfile中定義一系列的命令和參數構成的腳本,然后這些命令應用於基礎鏡像,依次添加層,最終生成一個新的鏡像,這樣就極大的簡化了部署的工作。

3.Dockerfile組成部分

dockerfile的主要組成部分可以匯總為:
    •    基礎鏡像信息
    •    基礎的維護者/作者(可以沒有)
    •    制作鏡像操作指令 RUM 
    •    容器啟動時執行指令CMD["/bin/bash"]

4.創建鏡像

我們在本地磁盤創建一個名稱為Dockerfile_share的文件來創建自己的Dockerfile,我的文件路徑為:F:\Docker\learnDocker   #注意一個文件夾下只能有一個Dockerfile文件
文件內容為:
#Dockerfile基於centos版本為7.8.2003的鏡像
FROM centos:7.8.2003
#鏡像的作者/維護者
MAINTAINER 特昂糖
#定義一個變量,變量的值是Docker
ENV name Docker
#運行程序,輸出變量的值
ENTRYPOINT  echo "Hello $name"

cmd控制台進入到learnDocker的文件夾,運行下面的命令來創建鏡像:

docker build -t centos_name  -f  Dockerfile_share  .  

#-t 鏡像的名稱及信息,-f  指定文件,“.” 是 Dockerfile 所在的路徑(當前目錄)
[+] Building 0.1s (5/5) FINISHED
 => [internal] load build definition from shareDocker                                      0.0s
 => => transferring dockerfile: 291B                                                       0.0s
 => [internal] load .dockerignore                                                          0.0s
 => => transferring context: 2B                                                            0.0s
 => [internal] load metadata for docker.io/library/centos:7.8.2003                         0.0s
 => CACHED [1/1] FROM docker.io/library/centos:7.8.2003                                    0.0s
 => exporting to image                                                                     0.0s
 => => exporting layers                                                                    0.0s
 => => writing image sha256:6bd0ccebaae64e32941cc73fcded0bd0a855658da19b05f5d01c9427d8772  0.0s
 => => naming to docker.io/library/centos_share                                            0.0s

查看鏡像

F:\Docker\learnDocker>docker images
REPOSITORY     TAG        IMAGE ID       CREATED         SIZE
nginx          latest     f6987c8d6ed5   5 days ago      141MB
alpine/git     latest     c6b70534b534   5 weeks ago     27.4MB
hello-world    latest     feb5d9fea6a5   3 months ago    13.3kB
centos         7.8.2003   afb6fca791e0   19 months ago   203MB
centos_name    latest     5b25220f403c   19 months ago   203MB
centos_share   latest     6bd0ccebaae6   19 months ago   203MB

運行鏡像

docker run -t --rm centos_share

  容器輸出:

Hello Docker

 5.環境部署流程

5.1jar包的環境部署

環境的部署一般分為兩種:
    1.開發直接給jar包,需要自己搭建鏡像,搭建完成運行
    2.開發把鏡像搭建好導出給測試,測試導入直接運行即可

#下面我們來演示測試根據開發給的jar包來構建鏡像,鏡像的導入方式之前有說過,詳文見Docker鏡像的操作

  • 開發編寫完代碼進行自測並發給測試
  • 測試編寫Dockerfile來構建鏡像
    FROM centos:7.8.2003
    FROM java:8
    MAINTAINER 特昂糖
    #復制文件到容器目錄
    COPY app-0.0.1-SNAPSHOT.jar /opt
    #切換目錄
    WORKDIR /opt
    #啟動服務
    EXPOSE 8081
    CMD ["java","-jar","app-0.0.1-SNAPSHOT.jar"]

    #前提步驟:在Windows中,我們在構建鏡像時需要注意的是jar包要與Dockerfile在同一路徑下  

  • 執行編寫的Dockerfile的文件
     docker build -t app -f Dockerfile  .
  • 執行Dockerfile文件成功后,也就是構建鏡像成功
    [+] Building 0.8s (8/8) FINISHED
     => [internal] load build definition from Dockerfile                                                               0.1s
     => => transferring dockerfile: 258B                                                                               0.0s
     => [internal] load .dockerignore                                                                                  0.0s
     => => transferring context: 2B                                                                                    0.0s
     => [internal] load metadata for docker.io/library/java:8                                                          0.0s
     => [stage-1 1/3] FROM docker.io/library/java:8                                                                    0.4s
     => [internal] load build context                                                                                  0.4s
     => => transferring context: 20.66MB                                                                               0.3s
     => [stage-1 2/3] COPY app-0.0.1-SNAPSHOT.jar /opt                                                                 0.1s
     => [stage-1 3/3] WORKDIR /opt                                                                                     0.0s
     => exporting to image                                                                                             0.2s
     => => exporting layers                                                                                            0.2s
     => => writing image sha256:b501c45c6a5a8d75abad30c63bf3a2be022d35abe7a370c9f9c1b3872a5689e0                       0.0s
     => => naming to docker.io/library/app                                                                             0.0s
  • 使用docker images,就可以查看到構建成功的鏡像信息
    F:\Docker\learnDocker>docker images
    REPOSITORY     TAG        IMAGE ID       CREATED         SIZE
    app            latest     b501c45c6a5a   8 seconds ago   664MB
    nginx          latest     f6987c8d6ed5   6 days ago      141MB
    alpine/git     latest     c6b70534b534   5 weeks ago     27.4MB
    hello-world    latest     feb5d9fea6a5   3 months ago    13.3kB
    centos_name    latest     5b25220f403c   20 months ago   203MB
    centos_share   latest     6bd0ccebaae6   20 months ago   203MB
    centos         7.8.2003   afb6fca791e0   20 months ago   203MB
    java           8          d23bdf5b1b1b   4 years ago     643MB
  • 測試再導入,使用docker run來運行這個鏡像,運行成功后,環境部署OK
    F:\Docker\learnDocker>docker run --rm -p8081:8081 b501c45c6a5a
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.6.2)
    
    2021-12-27 02:37:29.943  INFO 1 --- [           main] com.example.app.AppApplication           : Starting AppApplication v0.0.1-SNAPSHOT using Java 1.8.0_111 on c69e1705877e with PID 1 (/opt/app-0.0.1-SNAPSHOT.jar started by root in /opt)
    2021-12-27 02:37:29.946  INFO 1 --- [           main] com.example.app.AppApplication           : No active profile set, falling back to default profiles: default
    2021-12-27 02:37:32.093  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8081
    2021-12-27 02:37:32.115  INFO 1 --- [           main] com.example.app.AppApplication           : Started AppApplication in 2.848 seconds (JVM running for 3.445)  
  • 開始測試驗證

5.2nginx

Dockerfile文件
FROM nginx
MAINTAINER 特昂糖
RUN echo "Hi, This Is A Docker Continer Website" > /usr/share/nginx/html/index.html
EXPOSE 80
構建鏡像:
 docker build -t nginx_web -f Dockerfile .

運行鏡像:
 docker run --rm -p80:80 nginx_web

查看nginx服務的日志信息:

docker logs -f 容器ID

5.3python文件

Dockerfile文件:
FROM centos:7.8.2003
MAINTAINER 特昂糖
#下載yum
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo  https://mirrors.aliyun.com/repo/Centos-7.repo;
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo;
#安裝Python環境
RUN yum install python3-devel python3-pip -y
#安裝flask庫
RUN pip3  install -i https://pypi.douban.com/simple   flask
RUN pip3 install flask_restful
RUN pip3 install flask_httpauth
RUN pip3 install flask_jwt
#復制文件到容器目錄
COPY app.py /opt
#切換目錄
WORKDIR /opt
#啟動服務
EXPOSE 5000
CMD ["python3","app.py"]

  構建鏡像:

docker build -t python_web -f Dockerfile .

  運行鏡像:

docker run --rm -p5000:5000 python_web #運行鏡像信息

  Windows系統關於端口的命令:

netstat -ano | findstr "被查詢的端口" #根據端口查詢到應用程序的pid信息
tasklist | findstr "pid" #根據pid信息查詢到具體的應用程序

6.Docker中Rabbit MQ的下載

獲取鏡像並運行鏡像
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management

  根據端口進到:http://localhost:15672/#/

  賬號與密碼都為:guest

 7.鏡像的發布

發布鏡像我們⾸先要在Docker Hub上注冊⼀個賬戶,然后把我們的鏡像名稱更改為:DockerHub昵稱/鏡像名稱,如果不處理,在進⾏push的時候,就會提示沒有權限的操作
C:\Users\特昂糖>docker push 151****2986/flask_app
Using default tag: latest
latest: Pulling from 151****32986/flask_app
Digest: sha256:110776cf725b24a9dd9313550ee669af658bbcbcbe78818333d7e6c88a6fa4fd
Status: Downloaded newer image for 151****2986/flask_app:latest
docker.io/151****2986/flask_app:latest

 

 

 

 


免責聲明!

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



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