# Dockerfile
近期帮朋友制作了Docker镜像以方便使用,在制作的过程中经历了兼容问题,镜像size臃肿,镜像内多服务问题,下面开始码实例。
FROM euleros
WORKDIR /opt
ADD opencv-4.1.0.tar.gz /opt
RUN rpm --rpmbuilddb && \
yum install openssh-server make cmake nginx vlc -y && \
mkdir -p /opt/opencv-4.1.0/build && \
cd /opt/opencv-4.1.0/build && \
cmake .. && \
make && make install && \
yum clean all && \
rm -rf /var/cache/yum/*
COPY run.sh /opt/
EXPOSE 22 80 8080
EXTRYPOINT ["/opt/run.sh"]
上述文件讲解:
因为dockerfile中每一个指令都会在docker镜像中添加一层,它就像一个存储文件一样,这样看起来比较易于扩展,把每一层添上一个功能,最大到127层。
FROM euleros # 该指令位于dokcerfile文件的首行, 是告诉我们是基于哪个镜像的基础上做的扩展。
WORKDIR /opt # 该指令定义当前用户登录使用的工作目录位置,后续所有操作都在这个目录
ADD opencv-4.1.0.tar.gz /opt #复制文件进入容器有2种COPY和ADD,copy比较清晰就是复制,add命令相对功能就多一些可以对压缩包进行解压缩的操作
RUN rpm --rpmbuilddb && \
yum install openssh-server make cmake nginx vlc -y && \
mkdir -p /opt/opencv-4.1.0/build && \
cd /opt/opencv-4.1.0/build && \
cmake .. && \
make && make install && \
yum clean all && \
rm -rf /var/cache/yum/*
# RUN 命令 ,每条操作命令都用"&&“与符号进行间隔,这样所有操作的都被封装到一层里头,这样我们的存储空间就相对会小一点
EXPOSE 22 80 8080 # 该命令,提示暴露给外部链接访问使用的端口,用以提示在配置的时候如果操作。
ENTRYPOINT ["/opt/run.sh"] # 该命令,是容器启动运行的核心命令,指出了当前容器中运行的入口,当然它还有另一个命令CMD,但是推荐ENTRYPOINT,它可以通过docker run 命令在最后面加上相关参数,让容器内可以接收到。
# 关于run.sh脚本,里头编辑了nginx和ssh的启动命令.
#!/bin/bash
/usr/sbin/nginx
/usr/sbin/sshd -D
#注意,上述文件中最后一个指定需要不能运行中断,是一个不能结束的命令。