1. 简介:
- Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本,Dockerfile从From命令开始,紧接着各种命令,参数等,最终会生成一个新的镜像。
- 使用Dockerfile构建镜像的步骤:
1. 编写Dockerfile文件
2. 使用docker build构建镜像
3. 使用docker run 运行容器
2. 用法
-
语法规则
- 指令必须要大写,而且后面必须跟参数 - 第一条指令必须是FROM,指定Base Image基础镜像 - 指令按从上往下的顺序,依次执行 - 每条指令都会创建一个新的镜像层并提交 - #表示注释
-
常用指令
指令 解释 FROM 指定基础镜像,即当前镜像是基于哪个镜像的 MAINTAINER 指定作者 RUN 指定构建过程中要运行的命令 ENV 设置环境变量 WORKDIR 指定默认的工作目录,即进入容器后默认的工作目录 VOLUME 创建挂载点,也成为容器数据卷,用于数据共享以及持久化 CMD 指定容器运行时要运行的命令,与RUN不同的是,这些命令不是在镜像构建过程中执行的 ENTRYPOINT 指定容器在启动时要运行的命令,与CMD有所不同 COPY 拷贝文件/目录到容器中 ADD 拷贝文件到镜像中,且会自动解压缩 EXPOSE 指定对外暴露的端口
3. 范例
- 自定义centos镜像
CMD和ENTRYPOINT的区别:#1. 编写dockerfile文件,如下: FROM centos MAINTAINER sunwei ENV MYPATH /usr/local/centos RUN mkdir -p $MYPATH WORKDIR $MYPATH #构建过程中安装软件 RUN yum install net-tools -y RUN yum install bind -y #在容器中创建挂载点,无法在宿主机上生成目录,是自动生成的,可以使用docker inspect 容器id 进项查看 VOLUME ["/data1","/data2"] #指定容器在启动时需要执行的命令 CMD ["/bin/bash"] #2. 使用docker build 构建镜像 docker build -f dockerfile -t mycentos:v1 . 注意:dockerfile文件放在一个新的目录下 #3. 使用docker run运行容器 docker run -it b25b1dad795c #4. 查看镜像的变更历史 docker history b25b1dad795c #5. 验证挂载点,这步先使用docker inspect查看宿主机的挂载目录 /var/lib/docker/volumes/0b001b4cc8db1ebbbb4c537c17a5c44adb700fb0e1b941bc82 cc717c4ae1 96f6/_data /var/lib/docker/volumes/f020f5a5664bf68312be9f49a640f27ecfb49990b231aaf3d0eb 7cb723fa0dd d/_data
1.在Dockerfile中可以有多个CMD指令,但是只有最后一条生效,所以一般只有一条CMD指令
2.CMD指令在被docker run 之后的参数覆盖
vi aaa
FROM centos
CMD ["/bin/ls"]
CMD ["/bin/bash"]
docker build -f aaa -t itany/aaa .
docker run -it itany/aaa
docker run -it itany/aaa /bin/pwd
3. ENTRYPOINT:
docker run之后的参数会被作为ENTRYPOINT指令的参数,组合成新的命令:
vi bbb
FROM centos
ENTRYPOINT ["/bin/ls","/usr/local"]
docker build -f bbb -t itany/bbb .
docker run -it itany/bbb
docker run -it itany/bbb -l # ls /usr/local -l
- 自定义tomcat镜像
#1. 编写dockerfile文件 vim dockerfile #指定作者 MAINTAINER sunwei #拷贝文件,文件必须与dockerfile文件放在同一目录下 COPY sunwei.txt /usr/local ADD jdk-8u211-linux-x64.tar.gz /usr/local ADD apache-tomcat-9.0.21.tar.gz /usr/local #配置环境变量 ENV JAVA_HOME /usr/local/jdk1.8.0_211 ENV CLASSPATH .:$JAVA_HOME/lib ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.21 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin #指定工作目录,进入容器中,直接进入的目录 WORKDIR $CATALINA_HOME RUN yum -y install vim EXPOSE 8080 CMD ["catalina.sh","run"] #2. 使用dockerfile构建镜像 docker build -f dockerfile -t mytomcat:v1.0 . #3. 使用docker run运行容器 docker run --name sw-tomcat -p 8999:8080 -v /docker/index:/usr/local/apache-tomcat-9.0.21/webapps/ROOT -d mytomcat:v1.0
大功告成!!!
鲁大师说过:愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者的话。