Rootop 服务器运维与web架构

通过dockerfile自定义docker镜像

通过 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的镜像了。

原创文章,转载请注明。本文链接地址: http://www.rootop.org/pages/4168.html

作者:Venus

专注于 服务器运维与web架构 E-mail:venus#rootop.org

评论已关闭。