DockerFile是用于构建Docker镜像的文件,是一个命令参数脚本文件。
通过DockerFile构建Docker镜像的步骤:
很多官方的镜像都是基础包,很多功能都是没有的,比如官方的centos镜像没有vim、ifconfig等功能。所以我们可能经常需要构建自己的镜像。
DockerFile的基础知识:
DockerFile的常用指令:
命令 | 说明 |
---|---|
FROM | 指定基础镜像,要创建的镜像一切都从这个基础镜像开始 |
MAINTAINER | 镜像是谁写的,这个DockerFile的作者,一般填入一些有用的信息,比如姓名+邮箱 |
RUN | 镜像构建的时候需要运行的命令 |
ADD | 往镜像里面加文件,压缩文件会自动解压 |
WORKDIR | 指定镜像的工作目录,使用该镜像创建的容器进入时会进入该目录 |
VOLUME | 挂载的目录,数据卷 |
EXPOSE | 暴露端口配置 |
CMD | 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被代替 |
ENTRYPOINT | 指定这个容器启动的时候要运行的命令,可以追加命令 |
ENV | 构建的时候设置环境变量 |
先来个简单的,我们构建的centos镜像是基于官方的centos镜像基础上构建,只是官方的镜像没有vim、ifconfig功能,我们构建的镜像加上这两个功能,并设置工作目录,官方的镜像是根目录为工作目录。
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
docker build . -f mycentosdockerfile -t mycentos:1.0 .
docker run -it b9f10846b69d #这里要用你自己的镜像ID,也可以使用name+tag,只是本人习惯用id
可以看到与官方的centos不同的是,刚进来时是在/usr/local目录,而官方的是在根目录。并且有vim和ifconfig功能,官方的没有。
成功利用DockerFile构建一个镜像。
第一步:准备文件
需要文件:
第二步:编写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
docker login -u 账号名
执行上面命令后按回车,然后输入密码再按回车。
出现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 pull yehaocong/diytomcat:8.5
第一步:注册阿里云账号。
注册一个阿里云账号,如果已有,可以跳过这步。
第二步:登录阿里云创建命名空间和镜像仓库
第三步:上传镜像,点击你刚刚创建的仓库:
登录阿里云之前如果登录了dockerhub,要使用docker logout退出登录。
这里有详细步骤。
按着步骤来就好,无非就登录,创建版本号,推送。
推送成功。