DockerFile

DockerFile介绍

dockerFile是用来构建Docker镜像的文件,是命令参数脚本

构建步骤:

  1. 编写dockerfile文件
  2. docker build 构建成为一个镜像
  3. docker run运行镜像
  4. docker push 发布镜像(可发送到两个位置)
    1. DockerHub,可供他人使用
    2. 阿里云镜像仓库

发布到hub


点进去之后就是镜像位置,会跳转到gitHub


很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像

DockerFile的构建过程

脚本的编写!!

  1. 指令的大小写:DockerFile的指令是忽略大小写的,但建议使用大写
  2. 指令的执行顺序是从上到下的
  3. #表示注释
  4. 每一个指令都会创建一个新的镜像层,并提交

DockerFile是面向开发的,以后发布项目,创建镜像,都需要编写DockerFile文件

Docker镜像逐渐成为企业交付的标准,必须掌握

步骤:开发 部署 上线运维…缺一不可

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品

Docker容器:容器就是镜像运行起来提供服务器

DockerFile的指令

使用这些命令可构建自己的镜像

FROM         # 基础镜像,一切从这里开始构建
MAINTAINER      # 指定维护者的信息 姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤:如要搭建tomcat镜像,需要加入tomcat是压缩包
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 暴露端口配置 如果不写,需要在启动时使用-p命令
CMD             # 指定这个容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT      # 指定这个容器启动的时候需要运行的命令,可以追加命令
ONBUILD         # 当构建一个被继承的 DockerFile ,这个时候就会运行ONBUILD指令,是一个触发指令
COPY            # 类似ADD ,将我们的文件拷贝到镜像中
ENV             # 构建的时候设置环境变量


实战测试

centos测试

  1. 编写DockerFile的文件
   FROM centosMAINTAINER ayuan<3610089198@qq.com>ENV MYPATH /usr/localWORKDIR $MYPATH RUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "---end---"CMD /bin/bash
  1. 编译运行,通过这个文件构建镜像
   # 运行成功的部分信息Successfully built 55313e0af22eSuccessfully tagged mycentos:1.0
  1. 运行测试
   [root@localhost dockerfile]# docker run -it mycentos:1.0 [root@0a77b114ce96 local]# pwd/usr/local                       # dockerfile中编写的MYPATH# 比较一下原版centos[root@bogon ~]# docker run -it centos[root@48b2f248c7ce /]# pwd/                              # 启动之后默认是在根目录
  1. 使用ifconfig测试
   [root@0a77b114ce96 local]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)RX packets 8  bytes 656 (656.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  1. 测试 vim
[root@0a77b114ce96 local]# vim test

cat test

注:mydockerfile-centos文件中写了多个CMD,只有最后一个会生效,所以当使用命令docker run mycentos:1.0的时候,并不会有内容输出.

新建一个mydockerfile-centos2,内容如下

FROM centos
MAINTAINER ayuan<3610089198@qq.com>ENV MYPATH /usr/local2
WORKDIR $MYPATHRUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 81CMD echo "now u see me"

并使用其创建的镜像为 mycentos:1.1

此时再使用docker run mycentos:1.1的时候会有内容输出

[root@bogon dockerfile]# docker run mycentos:1.1
now u see me

查看镜像构建历史

[root@bogon ~]# docker history b4d1f561551c
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
b4d1f561551c   20 hours ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B
ec25d74b54d8   20 hours ago   /bin/sh -c #(nop)  EXPOSE 81                    0B
a15cf7014ac8   20 hours ago   /bin/sh -c yum -y install net-tools             24.9MB
fc3ebb2dce60   20 hours ago   /bin/sh -c yum -y install vim                   60.7MB
148148e015b4   20 hours ago   /bin/sh -c #(nop) WORKDIR /usr/local2           0B
5894cd6588ba   20 hours ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local2       0B
d000efa750f3   20 hours ago   /bin/sh -c #(nop)  MAINTAINER ayuan<36100891…   0B
300e315adb2f   6 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>      6 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>      6 months ago   /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB

CMD和ENTRYPOINT区别

CMD["[命令1]","[命令2]",…]:执行多条命令,用“,”分割,表示运行之后自动执行的命令

  1. 测试CMD
 1. 编写dockerfile-cmd-test文件[root@bogon dockerfile]# cat dockerfile-cmd-test FROM centosCMD ["ls","-a"]2. 构建镜像docker build -f dockerfile-cmd-test -t cmdtest .3. 运行之后会自动执行 ls -a 命令[root@bogon dockerfile]# docker run cmdtest....dockerenvbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar4. 尝试为CMD增加参数 意使其执行 ls -al[root@bogon dockerfile]# docker run cmdtest -ldocker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.# 结果会报错,因为在CMD的情况下,-l会取代 ls -a ,但是-l不是完整的命令,所以会报错# 改正,ls -al 是完整的命令,会执行[root@bogon dockerfile]# docker run cmdtest ls -altotal 0drwxr-xr-x.   1 root root   6 Jun 25 03:20 .drwxr-xr-x.   1 root root   6 Jun 25 03:20 ..-rwxr-xr-x.   1 root root   0 Jun 25 03:20 .dockerenvlrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bindrwxr-xr-x.   5 root root 340 Jun 25 03:20 devdrwxr-xr-x.   1 root root  66 Jun 25 03:20 etcdrwxr-xr-x.   2 root root   6 Nov  3  2020 homelrwxrwxrwx.   1 root root   7 Nov  3  2020 lib -> usr/liblrwxrwxrwx.   1 root root   9 Nov  3  2020 lib64 -> usr/lib64drwx------.   2 root root   6 Dec  4  2020 lost+founddrwxr-xr-x.   2 root root   6 Nov  3  2020 mediadrwxr-xr-x.   2 root root   6 Nov  3  2020 mntdrwxr-xr-x.   2 root root   6 Nov  3  2020 optdr-xr-xr-x. 112 root root   0 Jun 25 03:20 procdr-xr-x---.   2 root root 162 Dec  4  2020 rootdrwxr-xr-x.  11 root root 163 Dec  4  2020 runlrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbindrwxr-xr-x.   2 root root   6 Nov  3  2020 srvdr-xr-xr-x.  13 root root   0 Jun 25 02:05 sysdrwxrwxrwt.   7 root root 145 Dec  4  2020 tmpdrwxr-xr-x.  12 root root 144 Dec  4  2020 usrdrwxr-xr-x.  20 root root 262 Dec  4  2020 var
  1. 测试ENTRYPOINT
   1. 编写 dockerfile-entrypoint-test 文件[root@bogon dockerfile]# vim dockerfile-entrypoint-testFROM centosENTRYPOINT ["ls","-a"]2. 构建镜像docker build -f dockerfile-entrypoint-test -t entrypoint-test .3. 运行之后会自动执行 ls -a 命令[root@bogon dockerfile]# docker run 94c729adceb6....dockerenvbindevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar4. 追加运行# 实际执行的是 ls -al[root@bogon dockerfile]# docker run 94c729adceb6 -ltotal 0drwxr-xr-x.   1 root root   6 Jun 25 03:31 .drwxr-xr-x.   1 root root   6 Jun 25 03:31 ..-rwxr-xr-x.   1 root root   0 Jun 25 03:31 .dockerenvlrwxrwxrwx.   1 root root   7 Nov  3  2020 bin -> usr/bindrwxr-xr-x.   5 root root 340 Jun 25 03:31 devdrwxr-xr-x.   1 root root  66 Jun 25 03:31 etcdrwxr-xr-x.   2 root root   6 Nov  3  2020 homelrwxrwxrwx.   1 root root   7 Nov  3  2020 lib -> usr/liblrwxrwxrwx.   1 root root   9 Nov  3  2020 lib64 -> usr/lib64drwx------.   2 root root   6 Dec  4  2020 lost+founddrwxr-xr-x.   2 root root   6 Nov  3  2020 mediadrwxr-xr-x.   2 root root   6 Nov  3  2020 mntdrwxr-xr-x.   2 root root   6 Nov  3  2020 optdr-xr-xr-x. 115 root root   0 Jun 25 03:31 procdr-xr-x---.   2 root root 162 Dec  4  2020 rootdrwxr-xr-x.  11 root root 163 Dec  4  2020 runlrwxrwxrwx.   1 root root   8 Nov  3  2020 sbin -> usr/sbindrwxr-xr-x.   2 root root   6 Nov  3  2020 srvdr-xr-xr-x.  13 root root   0 Jun 25 02:05 sysdrwxrwxrwt.   7 root root 145 Dec  4  2020 tmpdrwxr-xr-x.  12 root root 144 Dec  4  2020 usrdrwxr-xr-x.  20 root root 262 Dec  4  2020 var

实战:Tomcat镜像

莫得资源,盲听

  1. 准备镜像文件,tomcat压缩包,jdk压缩包

  2. 编写DockerFile文件,官方命名DockerFile,build的时候会自动寻找这个文件,就不需要-f指定了

   FROM centosMAINTAINER ayuan<3610089198@qq.com>COPY readme.txt /usr/local/readme.txtADD jdk-8ull-linux-x64.tar.gz /usr/local                    # ADD命令,运行的时候会自动解压压缩包到指定的路径ADD apache-tomcat-9.0.22.tar.gz /usr/localRUN yum -y install vim# 配置环境变量ENV MYPATH /usr/localWORKDIR $MYPATHENV JAVA_HOME /usr/local/jdk1.8.0_11ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/binEXPOSE 8080CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out# tail -F [文件名]:tail命令启动的时候,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件
  1. 构建镜像
   docker build -t diytomcat .  # 因为用的是官方的名字,所以可以不使用 -f [DockerFile名字] 来指定文件

运行日志截图:

  1. 启动镜像
   # 同步test信息,同步日志信息docker run -d -p 9090:8080 --name mytomcat -v /home/mytomcat/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/kuangshen/build/tomca/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs diytomcat
  1. 访问测试
   curl localhost:9090       # 如果可以成功访问,那么在外网也可以访问
  1. 发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了,不必再进入容器)

    1. 进入挂载的test目录


2. 在test下创建WEB-INF目录,并在WEB-INF目录下创建web.xml文件

3. 在test下创建index.jsp文件

4. 查看日志


日志信息:

发布自己的镜像

DockerHub

  1. 地址 https://hub.docker.com/注册账号

  2. 确定账号可登录

  3. 在自己的服务器上提交自己的镜像

  1. 登录完毕后就可以提交镜像了

    这里被拒绝是因为有重复的,建议加上作者信息和版本号便于区分和维护




发布中部分日志

提交的时候也是按照层级来提交的

发布到aliyun

  1. 登录aliyun

  2. 找到容器镜像服务

  3. 创建命名空间

  4. 创建容器镜像

  5. 浏览信息

  # 公网地址:可通过这个地址来访问当前仓库


6. 发布步骤

【Docker】06 DockerFile相关推荐

  1. 【Docker】自定义dockerfile构建容器镜像并发布

    0 前言 此篇博客参考此b站视频完成,是一个有趣的小实践. 1 项目原址 准备工作:在github上下载一个zip压缩包 网址:恋爱倒计时静态网页 2 从0开始 2.1 创建项目文件夹并解压源项目等操 ...

  2. 【docker】基于dockerfile编写LNMP

    文章目录 一.基础环境准备 二.部署nginx(容器IP为172.18.0.10) 1.整个Dockerfile文件内容 2.配置nginx.conf文件 3.构建镜像 三.部署mysql 1.整个D ...

  3. 【Docker】之 Dockerfile 指令详解

    目录 Dockerfile 基本结构 Dockerfile 指令 指定基础镜像 FROM 维护者信息 MAINTAINER 元数据标签 LABEL 设置环境变量 ENV 镜像构建参数 ARG 指定工作 ...

  4. 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目

    日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...

  5. 【Docker】使用docker安装部署NextCloud私人网盘

    [Docker]使用docker安装部署NextCloud私人网盘 1.查询并下载NextCloud镜像 执行命令 docker search nextcloud docker pull nextcl ...

  6. 【Centos 7】【Docker】 安装 kafka

    前言 CentOS Linux release 7.6.1810 (Core) Docker version 19.03.14, build 5eb3275d40 准备 docker 已安装. 安装 ...

  7. 【Centos 7】【Docker】 安装 redis

    前言 CentOS Linux release 7.6.1810 (Core) Docker version 19.03.14, build 5eb3275d40 准备 docker 已安装. 安装 ...

  8. 【CentOS7】【docker】常用操作命令

    目录 前言 查找镜像 可视化查找镜像 docker命令查找镜像 镜像操作 拉取镜像 查看本地已拉取的镜像 删除镜像 创建容器 创建但不运行容器 创建并运行容器 管理容器 查看运行着的容器 查看本地已创 ...

  9. 【Centos 8】【Centos 7】【Docker】 添加 DockerHub 的镜像地址

    前言 CentOS Linux release 8.2 CentOS Linux release 7.6 [Centos 8][Centos 7][Docker] 安装 RabbitMQ时,拉取doc ...

  10. 【Docker】ERROR: Could not find a version that satisfies the requirement pytest==5.0.1

    1.背景 背景参考:[Docker]elasticsearch 监控工具 elasticsearch-HQ [lcc@lcc ~/soft/es/elasticsearch-HQ-3.5.12]$ p ...

最新文章

  1. 安装终端服务和终端服务授权,激活终端服务授权
  2. 7-9将灰度转为彩色
  3. 数据库树状结构的关系表的删除方案
  4. windows2003下防火墙ISA大型实验
  5. mysql 默认事务隔离级别_上个厕所的功夫,搞懂MySQL事务隔离级别
  6. 【C语言工具】AddressSanitizer - 内存检测工具
  7. mysql 图像数据类型_MySQL数据类型
  8. 华为鸿蒙主题设计,2020华为全球主题设计大赛,简直就是神仙打架啊!
  9. 虚拟摄像头之二: 配置v4l2loopback虚拟摄像头为前置或后置摄像头
  10. Python Revisited Day 08 (高级程序设计技术)
  11. 存储圈装逼必上TOP 10网站
  12. 怎么在谷歌地图上画图_如何在Google地图上规划具有多个目的地的公路旅行
  13. 直播带货平台搭建需要用到哪些第三方(下)
  14. spotlight on oracle
  15. java 开源sns_JAVA开源SNS社交管理问答知识付费系统JEESNS v1.4.2
  16. 或许我们做错了,但绝非一无是处
  17. SSM基础框架之SpringIOC
  18. 查看网站是具体那个国家
  19. Android 3D游戏开发技术宝典pdf
  20. 图像噪声(MATLAB)

热门文章

  1. Julia : varinfo() 与工作空间,@isdefined, @which
  2. 帮您管好云:阿里云混合云管理平台发布 | 凌云时刻
  3. 容器操作系统再添丁,AWS开源Bottlerocket,类似RancherOS?
  4. Cloud Foundry 2018欧盟峰会日程已确定
  5. 何万青 | 从天河2号到阿里云超算,P9技术大牛的职业发展智慧
  6. 【优化算法】吉萨金字塔建造优化算法(GPC)【含Matlab源码 1438期】
  7. 【印刷数字识别】基于matlab OCR识别系统【含Matlab源码 438期】
  8. 【气动学】基于matlab内弹道【含Matlab源码 057期】
  9. 创建dqn的深度神经网络_深度Q网络(DQN)-III
  10. 单片机定时报警C语言程序,单片机控制的简易定时报警器电路设计( - 控制/MCU - 电子发烧友网...