06 DockerFile
DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
1. 基础知识
(1)每条保留字指令都必须是大写字母且后面要跟随至少一个参数
(2)指令按照从上到下,顺序执行
(3)#表示注释
(4)每条指令都会创建一个新的镜像层,并对镜像提交
2. Docker执行DockerFile的大致流程
(1)docker运行一个基础镜像的容器
(2)执行指令对容器进行修改
(3)提交一个新的容器,并运行这个新容器
(4)执行dockerfile中的下一条指令
3. DockerFile常用指令
FROM 当前的镜像继承自哪个基础镜像
MAINTAINER 镜像维护者姓名和邮箱地址
RUN 在容器构建时需要运行的命令,shell格式 or exec格式,在docker build时运行
EXPOSE 容器对外暴露的端口
WORKDIR 进入容器的初始目录
USER 指定该镜像以什么用户执行,默认为root
ENV 构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像并自动处理URL和解压压缩包
COPY 将宿主机目录下的文件拷贝进镜像
VOLUME 容器数据卷
CMD 容器启动后要做的事情,shell格式 or exec格式,只有最后一个CMD会生效,并会被docker run后的命令覆盖
ENTRYPOINT 类似于CMD。搭配CMD使用后ENTRYPOINT为固定参数,CMD为可变参数传递给ENTRYPOINT。ENTRYPOINT不会被docker run后的命令覆盖。
4. DockerFile实例一
创建Dockerfile文件
# vim Dockerfile
编写内容
FROM ubuntu
MAINTAINER zhouyc
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN apt-get -y update
# 安装vim
RUN apt-get -y install vim
# 安装ifconfig命令
RUN apt-get -y install net-tools
# 安装java8
RUN mkdir -p /usr/loacl/java
ADD jdk-8u241-linux-x64.tar.gz /usr/local/java/
#配置JAVA环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_241
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success---------------ok"
CMD /bin/bash
运行构建命令
docker build -t ubuntu_with_jdk8:1.0 .
5. DockerFile实例二:通过docker发布JavaWeb微服务
第一步:通过Maven将JavaWeb微服务项目打包,上传至服务器
第二步:编写DockerFile文件
在jar包同目录下创建Dockerfile文件
vim DockerFile
编写DockerFile文件
FROM java:8
MAINTAINER zhouyc
VOLUME /tmp
ADD docker_boot-0.0.1-SNAPSHOT.jar docker_test.jar
ENTRYPOINT ["java", "-jar", "/docker_test.jar"]
EXPOSE 6001
第三步:构建镜像文件
运行构建命令
docker build -t dockers_test:1.0 .
第四步:运行容器
docker run -d -p 6001:6001 dockers_test:1.0
6. 虚悬镜像
docker在构建或删除镜像过程中出现错误,产生的仓库名、标签名都是的镜像
[root@iZ2ze0v2pan6jiw4jb3g2cZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu_with_jdk8 1.0 62d5b24c3c9b 22 hours ago 587MB
<none> <none> 34e77a048178 22 hours ago 113MB
查询全部虚悬镜像
docker image ls -f dangling=true
删除全部虚悬镜像
docker image prune