DockerFile
指令介绍
| 指令名称 | 指令作用 |
| -------------------- | ------------------------------------------------------------ |
| FROM | 基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,有效的Dockerfile必须以FROM指令开始 |
| MAINTAINER(已弃用) | 设置镜像的作者,新版本建议采用LABEL指令 |
| RUN | 容器构建时需要运行的指令,包含两种语法:(1)RUN 相当于在终端执行shell命令 (2)RUN ["可执行命令","参数1","参数2"] 说明:RUN命令是在docker build时运行 |
| EXPOSE | 当前容器对外暴露出的端口 |
| WORKDIR | 指定在创建容器后,终端默认登录进来的工作目录,作为落脚点 |
| USER | 指定该镜像以什么样的用户去执行,如果不指定,默认为root |
| ENV | 用来在构建镜像过程中设置环境变量,语法:ENV 变量名 变量值,这个环境变量可以在后续的任何RUN指令中使用,也可以在其他指令中直接使用这些环境变量,例如:WORKDIR $JAVA_HOME |
| VOLUME | 配置容器数据卷,用于数据保存和持久化工作 |
| ADD | 将宿主机目录下的文件或将远程URL资源文件拷贝进镜像,并且会自动解压tar压缩包(远程资源不解压) |
| COPY | 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>,语法: COPY src dest | COPY ["src","dest"] src:源文件或源目录 dest:容器内的指定路径,该路径自动创建 |
| CMD | 指定容器启动后要干的事情,语法1:CMD <命令> 语法2:CMD ["命令","参数1","参数2" ...] 注意事项:Dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换
与RUN命令的区别:CMD命令是在docker 启动时运行 RUN是在docker构建时执行 |
| ENTRYPOINT | 也是用来指定一个容器启动时要运行的命令,类似于CMD命令,但是ENTRYPONIT不会被docker run后面的命令覆盖,而是作为命令行参数传递刚给ENTRYPOINT指令指令的程序,如果和CMD一起使用,则CMD相当于为ENTRYPOINT传参 |
构建Docker镜像
docker build -t 新镜像名称:tag .
案例
为ubuntu安装vim,新建一个a.txt文件并添加内容
FROM ubuntu:latest #根镜像
MAINTAINER g11n #设置作者
ENV HOME_PATH /root #设置环境变量
RUN apt-get update -y #
RUN apt-get install vim -y
RUN touch $HOME_PATH/a.txt
RUN echo 'test' >> $HOME_PATH/a.txt
WORKDIR $HOME_PATH
EXPOSE 8080 #暴露端口
CMD /bin/bash #设置启动命令
为ubuntu安装jdk8
FROM ubuntu:latest
MAINTAINER g11n
USER root
ENV JAVA_HOME /usr/local/java/jdk1.8.0_77
ENV JRE_HOME /usr/local/java/jdk1.8.0_77/jre
ENV CLASSPATH $CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
# send package to docker image and unpack
ADD jdk-8u77-linux-x64.tar.gz /usr/local/java
RUN apt-get update
CMD ["/bin/bash"]
发布微服务到docker
FROM java:8
MAINTAINER fmc
VOLUME /tmp:/docker_app/docker_service
WORKDIR /root/
ADD docker_service-0.0.1-SNAPSHOT.jar docker_service.jar
EXPOSE 6001
CMD java -jar docker_service.jar
什么是虚悬镜像?
- 编写Dockerfile
FROM ubuntu
CMD echo "success"
构建
docker build .
REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 7f3463a6bea3 7 seconds ago 72.8MB
仓库和tag都是none的镜像称为虚悬镜像,一般为构建失败的镜像,删除即可