Dockerfile简介
参考链接:Docker官网_Dockerfile
DockerFile是用来构建Docker镜像文本文件、是由一条条构建镜像所需的指令和参数构成、每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。
从构建镜像的角度来看、Dockerfile、Docker镜像、Docker容器分别代表三个不同阶段、DockerFile面向开发、Docker镜像成为交付标准、Docker容器则涉及部署与运维、
Dockerfile构建
- 编写 Dockerfile 文件
- 通过Docker build 命令构建文件
- Docker run 运行容器实例
DockerFile注意事项
1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2、指令按照从上到下、顺序执行
3、#表示注释
4、每条指令都会创建一个新的镜像并对镜像进行提交
DockerFile常用保留字指令
指令名称 | 注释 |
---|---|
FROM | 基础镜像、当前镜像是基于哪个镜像、指定一个已经存在的镜像作为模板、第一套必须是from |
MAINTAINER | 镜像维护者的姓名和地址 |
RUN | 容器构建是所需的运行命令、有两种格式 |
RUN Shell格式 | <命令行命令> 等同于、在终端操作Shell命令、RUN yum -y install vim |
RUN Exec格式 | RUN [“./test.php”,“dev”,“offline”] 等价于 RUN ./test.php dev offline |
EXPOSE | 当前容器对外暴漏出的端口 |
WORKDIR | 指定创建容器后、终端默认登陆进来的工作目录、一个落脚点 |
USER | 指定该镜像是以什么样的用户去执行、如果不指定、默认是ROOT |
ENV | 用来在构建镜像过程中设置环境变量 |
ADD | 将宿主机目录下的文件拷贝到镜像文件且会自动处理URL和解压Tar压缩包 |
COPY | 类似ADD、拷贝文件和目录到镜像中、COPY src dest、COPY [“src”,“dest”] |
VOLUME | 容器数据卷、用于数据保存和持久化工作 |
CMD | 指定容器启动要干什么、可以有多个只有最后一个生效、后面会覆盖前面 |
CMD SHELL格式 | CMD <命令> |
CMD EXEC格式 | CMD [“参数1”,“参数2”] |
ENTRYPOINT | [“”,“”,“”] |
ENTRYPOINT、CMD 命令使用
ENTRYPOINT也是用来指定一个容器启动时要运行的命令
类似于CMD指令、但是ENTRYPOINT不会被Docker Run后面的指令覆盖掉、会当作参数送给指令行
案例:通过DockerFile构建nginx:test镜像
FROM ngnix
ENTRYPOINT ["nginx","-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
是否传参 | 按照DockerFile编写执行 | 传参执行 |
---|---|---|
Docker命令 | docker run nginx:test | docker run nginx:test -c /etc/nginx/new.conf |
实际执行命令 | nginx -c /etc/nginx/nginx.conf | nginx -c /etc/nginx/nginx.conf |
更多指令参考:Docker官网
Centos7镜像具备 vim + ifconfig + jdk8
编写脚本、创建目录
[root@Hadoop101 apps]# mkdir myfile
[root@Hadoop101 apps]# cd myfile/
[root@Hadoop101 myfile]# vim Dockerfile
FROM centos
MAINTAINER vv<vv1213418894@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
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
// 注意必须是当前文件夹、后面的 .
[root@Hadoop101 myfile]# docker build -t centosjava:1.0 .
[root@Hadoop101 myfile]# docker run -it centosjava:1.0
// 安装成功
[root@Hadoop101 myfile]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
虚悬镜像
仓库名、标签都是的镜像、俗称dangling image
[root@Hadoop101 myfile]# docker image ls -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> dae15ee4541 up 1s ago 72.8MB
删除虚悬镜像
[root@Hadoop101 myfile]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
Total reclaimed space: 0B