通过 dockerfile 构建自定义镜像
# 创建个文件夹,存放dockerfile
[root@localhost ~]# mkdir docker
[root@localhost ~]# cd docker/
# 创建dockerfile(用于基于一个镜像构建一个新镜像,必须是这个文件名,否则提示找不到文件)
[root@localhost docker]# cat dockerfile
# 基础镜像 IMAGE ID FROM 82a5b82cec98 # 维护者 MAINTAINER venus # 镜像操作, RUN 用来在构建镜像时运行系统命令 # 注意,每个RUN就会多一层镜像(可通过docker history IMAGE查看已有的镜像层),这样会造成镜像臃肿。可用过"&&"或者换行"\"写多条命令解决。 RUN yum install -y httpd # 中文支持 RUN yum -y install kde-l10n-Chinese RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 RUN echo 'LC_ALL="zh_CN.utf8"' > /etc/locale.conf ENV LANG zh_CN.utf8 ENV LC_ALL zh_CN.utf8 # 中国时区 RUN rm -f /etc/localtime RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 安装jdk ADD发现是一个压缩包会自动解压,不需要手动再解,另外仅支持当前路径下的文件,不支持绝对路径 ADD ./jdk-8u131-linux-x64.tar.gz /usr/local RUN ln -s /usr/local/jdk1.8.0_131 /usr/local/jdk # 设置JAVA环境变量 ENV JAVA_HOME /usr/local/jdk ENV PATH $JAVA_HOME/bin:$PATH ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV TZ Asia/Shanghai # EXPOSE的作用在docker run --publish-all 参数时有用,宿主机会自动分配随机端口号到EXPOSE的端口 # 如果在docker run时,不指定端口映射 --publish 或 --publish-all,则在docker ps中PORTS列会显示EXPOSE的端口 EXPOSE 80 EXPOSE 8080 RUN mkdir /root/ops # 添加启动脚本 ADD ./start_httpd.sh /root/ops RUN chmod 777 /root/ops/start_httpd.sh # 工作目录,即登录容器后的目录 WORKDIR /root # 通过CMD执行容器内命令。 # CMD参数是在run一个容器时默认运行的命令,如果run时指定命令,则会覆盖此处的CMD参数。 CMD sh /root/ops/start_httpd.sh # 通过ENTRYPOINT执行容器内脚本,ENTRYPOINT不会被run容器时指定的命令覆盖,会做为参数传给ENTRYPOINT里的命令。 #ADD ./sh.sh / #RUN chmod 777 /sh.sh #ENTRYPOINT ["/sh.sh"]
# 参考cmd与entrypoint区别:https://www.cnblogs.com/lienhua34/p/5170335.html
# 根据 dockerfile 构建一个镜像(镜像名字为java8)
docker build -t java8 .
然后docker images 就可以看到java8的镜像了。
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4168.html