Docker之DockerFile讲解

概述

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

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

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

DockerFile的基础知识:

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

Docker之DockerFile讲解_第1张图片

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 .

Docker之DockerFile讲解_第2张图片
看到下图信息说明镜像构建成功。
在这里插入图片描述
在这里插入图片描述

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

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

实战,构建一个tomcat镜像

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

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

在这里插入图片描述
第二步:编写Dockerfile
Dockerfile
Docker之DockerFile讲解_第4张图片
说明:注释是要单独一行才有效,我这写在一行是为了可读性高点。

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服务。
Docker之DockerFile讲解_第5张图片
外面的网访问:
Docker之DockerFile讲解_第6张图片
成功。镜像构建完成。

将镜像推送到DockerHub上

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

第二步:登录DockerHub

docker login -u 账号名

执行上面命令后按回车,然后输入密码再按回车。
Docker之DockerFile讲解_第7张图片
出现Login Succeeded代表登录成功。

第三步:
在这里插入图片描述

使用命令:

#docker push 你的DockerHub账号/镜像名:tag

docker push yehaocong/diytomcat:8.5

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

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

在这里插入图片描述

然后再次推送。
Docker之DockerFile讲解_第8张图片
在这里插入图片描述
推送成功。
别人可以使用下面命令进行下载

docker pull yehaocong/diytomcat:8.5

Docker之DockerFile讲解_第9张图片
下载成功。

镜像发布到阿里云仓库

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

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

  • 点击容器进行服务
    Docker之DockerFile讲解_第10张图片
  • 点击管理控制台
    Docker之DockerFile讲解_第11张图片
  • 创建命名空间
    Docker之DockerFile讲解_第12张图片
    Docker之DockerFile讲解_第13张图片
    在这里插入图片描述
  • 创建阿里云镜像仓库
    Docker之DockerFile讲解_第14张图片

Docker之DockerFile讲解_第15张图片

  • 点击下一步,设置代码源
    Docker之DockerFile讲解_第16张图片
    这里选择本地仓库。然后点击创建镜像仓库。

Docker之DockerFile讲解_第17张图片

第三步:上传镜像,点击你刚刚创建的仓库:
登录阿里云之前如果登录了dockerhub,要使用docker logout退出登录。
Docker之DockerFile讲解_第18张图片
这里有详细步骤。
按着步骤来就好,无非就登录,创建版本号,推送。
Docker之DockerFile讲解_第19张图片
Docker之DockerFile讲解_第20张图片
推送成功。

你可能感兴趣的:(docker,docker)