Dockerfile文件中包含了很多指令
- 通过这个脚本文件,可以build出一个镜像
- 因此通过Dockerfile,我们可以自动化地在任何其他机器上重建相同的编译环境
使用步骤:
- 编写一个dockerfile文件
docker build构建成一个镜像- build名称为
Dockerfile的文件:docker build -t ubuntu-test:latest . - build自定义名称的Dockerfile文件:
docker build -t ubuntu-test:latest -f Dockerfile.custom .
- build名称为
docker run运行镜像docker push发布镜像(DockerHub)
Dockerfile指令
- 每个指令都是大写
- 执行从上到下,并且每一条指令对应镜像的一层,这和镜像的分层结构很契合
#表示注释
FROM #基础镜像MAINTAINER #作者:姓名+邮箱RUN #镜像构建时,需要执行的命令ADD #添加文件COPY #将文件拷贝到镜像中WORKDIR #工作目录VOLUME #挂载目录EXPOSE #指定暴露端口ENV #构建时,设置环境变量CMD #指定容器启动时,需要运行的命令#docker run后接的命令,会将CMD替换掉ENTRYPOINT #指定容器启动时,需要运行的命令(与CMD有区别)#docker run后接的命令,会被追加到ENTRYPOINT命令的后面ONBUILD
发布镜像
发布到docker hub中
docker login -u <username># 再输入密码docker tag <镜像ID> <tag> #为镜像添加一个tagdocker push <作者名字>/<镜像名称>:<tag> #push对应的镜像
示例
Tomcat
- 编写Dockerfile文件,名字为
mytomcat-dockerfile```dockerfile FROM centos #父镜像 MAINTAINER geodoergeodoer@163.com #作者
COPY readme.txt /usr/local/readme.txt #将./readme.txt文件拷贝到指定目录
ADD jdk-Build-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
#将本地文件..拷贝到指定目录下。ADD命令会自动解压
RUN yum -y install vim RUN yum -y install net-tools
ENV MYPATH /usr/local #进入时的目录 WORKDIR $MYPATH #工作目录
ENV JAVA_HOME /usr/local/jdk1.8.0_11 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080 #往外暴露8080端口
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/cataline.out
CMD echo “——end——“
CMD /bin/bash #进入bash
2. 生成镜像,并运行```dockerfiledocker build -f mytomcat-dockerfile -t mytomcat:0.1 .#-f dockerfile文件#如果文件名是Dockerfile,这个参数就可以省略#-t <镜像名>:<tag>#. 当前目录docker run -d -p 9090:8080 --name mytomcat1 -v /home/build/tomcat/test:usr/local/apache-tomcat-9.0.22/webapps/test ...
可以使用以下命令,查看镜像ID
- 看到镜像的构建过程
docker history <镜像ID>
