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