DockerFile
DockerFile
DockerFile简介
# dockerfile是面向开发的,是一个命令脚本文件,用来构造镜像的。
# 1.编写dockerfile命令脚本文件
# 2.docker build -f dockerfile所在路径 -t 生成的镜像名称 生成到哪儿的路径 --> 构造镜像
# 3.docker run --> 运行镜像
# 4.docker push --> 发布镜像(DockerHub,阿里云镜像仓库)
dockerfile 基础知识
1. 每个保留关键字(指令)都必须是大写字母
2. 执行从上到下按顺序执行
3. 注释 #符号
4. 每个指令都会创建一个新的镜像层,并提交

查看Docker Hub官网,镜像的DockerFile:


DockerFile 指令
FROM # 基础镜像,一切从这里开始构建(例如:centos)
MAINTAINER #镜像是谁写的(一般是作者+邮箱)
RUN # 镜像构建的时候需要运行的命令
ADD # 在centos的基础上添加需要的东西(例如:tomcat)
WORKDIR # 运行镜像后,进入控制台的工作目录(例如:/bin/bash)
VOLUME # 数据卷挂在的目录(和手动在命令行写-v一样)
EXPOSE # 映射端口(和手动在命令行写-p一样)
CMD # 指定容器启动的时候要运行的命令,*命令替换
ENTRYPOINT # 指定容器启动的时候要运行的命令,*命令追加
-------------------------------------------------------------
CMD ["ls","-a"] , docker run ls -l # ls -l 会把原来的 ls -a 替换掉,最终执行ls -l
# 注意:cmd,如果写成run -l,会报错:因为-l会把原来的ls -a 替换掉,执行-l,-l不是命令就报错
ENTRYPOINT ["ls","-a"] , docker run -l # -l 会追加到 ls -a后面,最终执行 ls -a -l
ONBUILD # 当构建一个被继承DockerFile,这个时候就会运行ONBUILD的指令(说白了就是一个触发指令)
-------------------------------------------------------------
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量(和手动在命令行写-e一样)

练习1:Centos镜像
Docker Hub中99%的镜像都是以FROM scratch为基础,然后再配置自己需要的软件和配置。
# 1.编写dockerfile脚本
FROM centos
MAINTAINER auv<email>
ENV MYPATH /user/local
WORKDIR $MYPATH
RUN yum -y install vim # 安装vim
RUN yum -y install net-tools # 安装net-tolls(ifconfig命令...)
EXPOSE 80
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
# 2.docker build -f dockerfile脚本文件路径 -t 生成的镜像名称 镜像生成后的所在路径
# 3.docker run -it mycentos , 进入控制后pwd会发现工作目录是/user/local,运行vim,ifconfig也是都可以

# 4. docker history imageName(imageId) 查看镜像的构建历史

练习2:Tomcat镜像
-
准备jdk和tomcatlinux版的压缩包
![]()
-
编写dockerfile脚本文件(官方命名Dockerfile,build时就会自动找这个文件,就不用-f了)
FROM centos
MAINTAINER auv<email>
COPY readme.txt /usr/local/
ADD jdk-8u221-linux-x64.tar.gz /usr/local/ # 会自动解压到/usr/local/目录下
ADD apache-tomcat-8.5.73.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH # 工作目录,run镜像容器后,pwd 便会发现控制台位置在/usr/local
# 配置jdk,tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.73
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.73
ENV PATH $PATH:$HAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.73/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.73/logs/catalina.out
-
docker build -t diytomcat .
![]()
-
# 后台运行镜像容器
docker run -d -p 9090:8080 --name tomcat01 -v D:\docker-file\tomcat\webapps\test:/usr/local/apache-tomcat-8.5.73/webapps/test -v D:\docker-file\tomcat\logs\:/usr/local/apache-tomcat-8.5.73/logs diytomcat -
docker exec -it containerId bash # 进入控制台![]()
-
在宿主机D:\docker-file\tomcat\webapps\test挂载的目录下添加 index.html
<h1>Hello World</h1> -
在宿主机浏览器访问 http://localhost:9090/test/index.html
![]()
-
查看容器和宿主机数据卷挂载的目录,都是数据共享的!





浙公网安备 33010602011771号