概述

DockerFile是用于构建Docker镜像的文件,是一个命令参数脚本文件。
通过DockerFile构建Docker镜像的步骤:

  1. 编写一个DockerFile文件。
  2. 通过docker build 命令结合DockerFile构建一个镜像。
  3. docker run 创建并运行容器。
  4. docker push 发布镜像到DockerHub或者阿里云镜像仓库等地方。

很多官方的镜像都是基础包,很多功能都是没有的,比如官方的centos镜像没有vim、ifconfig等功能。所以我们可能经常需要构建自己的镜像。

DockerFile的基础知识:

  • 每个保留关键字(指令)都必须是大写字母。
  • DockerFile从上执行到下。
  • #表示注释。
  • 每个指令都会创建一个新的镜像层,并提交。

DockerFile的常用指令:

命令 说明
FROM 指定基础镜像,要创建的镜像一切都从这个基础镜像开始
MAINTAINER 镜像是谁写的,这个DockerFile的作者,一般填入一些有用的信息,比如姓名+邮箱
RUN 镜像构建的时候需要运行的命令
ADD 往镜像里面加文件,压缩文件会自动解压
WORKDIR 指定镜像的工作目录,使用该镜像创建的容器进入时会进入该目录
VOLUME 挂载的目录,数据卷
EXPOSE 暴露端口配置
CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被代替
ENTRYPOINT 指定这个容器启动的时候要运行的命令,可以追加命令
ENV 构建的时候设置环境变量

实战

构建自己的centos镜像

先来个简单的,我们构建的centos镜像是基于官方的centos镜像基础上构建,只是官方的镜像没有vim、ifconfig功能,我们构建的镜像加上这两个功能,并设置工作目录,官方的镜像是根目录为工作目录。

  1. 编写DockerFile
    DockerFile内容,注释不能跟步骤同一行,我这里只是为了更清晰直观
FROM centos:7  #指定基础镜像为centos:7
MAINTAINER Yehaocong<823006202@qq.com>  #编写一些DockerFile的作者信息
ENV WORKPATH /usr/local   #设置环境变量WORKPATH=/usr/local
WORKDIR $WORKPATH    #设置工作目录为/usr/local
RUN yum -y install vim   #安装vim
RUN yum -y install net-tools  #安装net-tools
EXPOSE 80  #暴露80端口
CMD echo $WORKPATH  #设置一些容器启动时执行的命令
CMD echo "===end==="
CMD /bin/bash
  1. 使用docker build命令构建
    docker build . -f DockerFile文件路径 -t 镜像名:tag .
docker build . -f mycentosdockerfile -t mycentos:1.0 .


看到下图信息说明镜像构建成功。

  1. 用构建的镜像创建并运行一个容器:
docker run -it b9f10846b69d  #这里要用你自己的镜像ID,也可以使用name+tag,只是本人习惯用id


可以看到与官方的centos不同的是,刚进来时是在/usr/local目录,而官方的是在根目录。并且有vim和ifconfig功能,官方的没有。
成功利用DockerFile构建一个镜像。

实战,构建一个tomcat镜像

第一步:准备文件
需要文件:

  1. jdk环境:压缩包
  2. tomcat:压缩包
  3. readme.txt:说明文件,可选。


第二步:编写Dockerfile
Dockerfile

说明:注释是要单独一行才有效,我这写在一行是为了可读性高点。

FROM centos:7   #基于centos7镜像上构建tomcat8.5镜像
MAINTAINER YeHaocong<823006202@qq.com>   #记录一些作者的个人信息
COPY readme.txt /usr/local   #拷贝readme.txt到docker镜像的/usr/local目录
ADD jdk-8u261-linux-x64.tar.gz /usr/local  #拷贝并解压缩jdk-8u261-linux-x64.tar.gz到docker镜像的/usr/local目录,ADD是包括解压,COPY是只拷贝不解压的
ADD apache-tomcat-8.5.57.tar.gz /usr/local  #//拷贝并解压缩apache-tomcat-8.5.57.tar.gz到docker镜像的/usr/local目录
RUN yum -y install vim  #安装vim
ENV WORKPATH /usr/local  #设置环境变量WORKPATH 的值为/usr/local
WORKDIR $WORKPATH   #设置镜像的工作目录为/usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_261  #设置JAVA_HOME
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.57 #设置CATALINA_HOME
ENV PATH $PATH:$JAVA_HOME/bin:CATALINA_HOME/bin #设置jdk的环境变量和tomcat的环境变量
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib #设置jdk的CLASSPATH
EXPOSE 8080  #暴露8080端口
CMD /usr/local/apache-tomcat-8.5.57/bin/startup.sh && /bin/bash  #在容器启动时执行两个命令,第一个是运行tomcat,第二个是开启一个终端,目的是在docker容器启动时,有个前台进程,以至于docker不会因没有前台进程而自动关闭。使用CMD命令只有最后一个CMD才会生效,所以不能两个命令写两个CMD,要写在同一个CMD里面,多个命令用&&分隔。

第三步:使用build命令并配置DockerFile构建镜像:

#如果你编写的Dockerfile文件的文件名为Dockerfile,并且你执行该命令时是跟Dockerfile文件在同一目录的换,就不用显示用-f参数指定Dockerfile的路径docker build . -t diytomcat:8.5 .

第四步:利用构建的镜像创建并运行容器:

#宿主机的5151端口映射docker的8080端口,镜像ID使用自己的镜像Id。
docker run -dit -p 5151:8080  7ac2a4531567

第五步:验证
本地访问localhost:5151服务。

外面的网访问:

成功。镜像构建完成。

将镜像推送到DockerHub上

第一步:注册账号。
首先要注册一个DockerHub账号,如果已经有账号就跳过这步。

第二步:登录DockerHub

docker login -u 账号名

执行上面命令后按回车,然后输入密码再按回车。

出现Login Succeeded代表登录成功。

第三步:

使用命令:

#docker push 你的DockerHub账号/镜像名:tagdocker push yehaocong/diytomcat:8.5

这里会有个坑:

意思要推送的镜像在本地不存在。
这时,就要给镜像打个标生成一个版本号,创建一个版本,最好要改成 你的DockerHub账号/镜像名:tag这样的名字。

# docker tag 镜像ID 要打标成的新标签名
docker tag e99d0ea96d6b yehaocong/diytomcat:8.5

然后再次推送。


推送成功。
别人可以使用下面命令进行下载

docker pull yehaocong/diytomcat:8.5


下载成功。

镜像发布到阿里云仓库

第一步:注册阿里云账号。
注册一个阿里云账号,如果已有,可以跳过这步。

第二步:登录阿里云创建命名空间和镜像仓库

  • 点击容器进行服务
  • 点击管理控制台
  • 创建命名空间


  • 创建阿里云镜像仓库

  • 点击下一步,设置代码源

    这里选择本地仓库。然后点击创建镜像仓库。

第三步:上传镜像,点击你刚刚创建的仓库:
登录阿里云之前如果登录了dockerhub,要使用docker logout退出登录。

这里有详细步骤。
按着步骤来就好,无非就登录,创建版本号,推送。


推送成功。

Docker之DockerFile讲解相关推荐

  1. docker第五期 DockerFile讲解

    DockerFile DockerFile 介绍 DockerFile 构建过程 DockerFile的指令 FROM: 指定基础镜像,Dockerfile第一个命令 MAINTAINER:维护者/创 ...

  2. (转)Docker 基础 : Dockerfile

    全文来自 Docker 基础 : Dockerfile Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像.我们会先介绍 Dockerfile 的 ...

  3. Docker用Dockerfile定制镜像

    用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...

  4. Docker Review - dockerfile 实战_使用dockerfile制作tomcat镜像

    文章目录 Pre Docker 官方镜像 Dockerfile dockerfile制作tomcat镜像 准备软件 编写Dockerfile文件 dockerfile构建镜像 启动镜像 测试访问tom ...

  5. docker之Dockerfile指令介绍

    Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建 通过使用build命令,根据Dockerfiel的描述来构建镜像 通过源代码路径的方式 通过标准输入流的方 ...

  6. Docker : Dockerfile 定制镜像

    使用 Dockerfile 定制镜像 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程.   镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们 ...

  7. Docker 精通之 Dockerfile

    Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile 1.基本说明 Dockfile 是一个用于编写 ...

  8. Docker使用Dockerfile构建简单镜像

    Docker使用Dockerfile构建简单镜像 首先确保系统已经安装docker 构建镜像 安装基础镜像 sudo docker pull ubuntu 查看镜像是否已经拉取成功 REPOSITOR ...

  9. Docker使用Dockerfile构建镜像

    2019独角兽企业重金招聘Python工程师标准>>> Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条 ...

最新文章

  1. c#如何取自身应用程序文件名和路径?
  2. C# 获取电脑的网络连接状态
  3. WPF异步载入图片,附带载入中动画
  4. Javascript中的对象查找【转】
  5. 李宏毅机器学习课程11~~~为何要深?
  6. 如何在运行时更改日志记录级别
  7. Python 第五天
  8. 分布式存储图解_BERT的youxiu变体:ALBERT论文图解介绍
  9. 读博士也有技巧:如何快乐地做研究
  10. python与golang_Golang与python线程详解及简单实例
  11. 华为带动涨价?二季度中国市场智能手机均价涨了13%
  12. SQL点滴35—SQL语句中的exists
  13. Xcode7 出现-fembed-bitcode错误的解决办法
  14. 分区怎么4k对齐_电脑升级SSD后,依然卡顿怎么解决?
  15. 4-26 pixel赋值问题 mbcmp函数 宏定义
  16. php挑战答题,挑战答题小程序5.3.1开源
  17. C#员工考勤管理系统源码 考勤工资管理系统源码
  18. Linux的shell脚本教程(一)
  19. word无法加载mathtype.wll
  20. kaggle TMDB Box Office Prediction

热门文章

  1. abb机器人开通选项_ABB机器人623-1Multitasking选项 ABB机器人多任务使用方法教程...
  2. 【英语学习】【Level 07】U06 First Time L5 A Different City
  3. Intel 64/x86_64/IA-32/x86处理器基本执行环境 (2) - 64位执行环境
  4. Intel® Nehalem/Westmere架构/微架构/流水线 (9) - 系统软件增强/能耗增强
  5. Android WebView:这是一份全面 详细的WebView学习指南
  6. Epic Games 携精彩作品强势登录 GMGC 2016
  7. Eigen 简明教程之如何从Python转到Eigen
  8. 轻松生成ip地址的姿势,最快得到批量***目标
  9. 怕死吗?研究人员推出可模拟“灵魂出窍”的VR系统
  10. HomeHack:黑客如何控制 LG 的 IoT 家用设备