1、请这行RUN bash -c 'touch /app.jar’命令的意思和作用是什么?
ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar
#add命令把jar复制过去,
RUN bash -c 'touch /app.jar'
touch命令的作用是修改这个文件的访问时间和修改时间为当前时间。
2、Djava.security.egd=file:/dev/./urandom是什么作用?
例子:
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
解释:
java.security.SecureRandom源码分析
java.security.egd=file:/dev/./urandom
SecureRandom在java各种组件中使用广泛,可以可靠的产生随机数。
但在大量产生随机数的场景下,性能会较低。
这时可以使用"-Djava.security.egd=file:/dev/./urandom"
加快随机数产生过程。
3、VOLUME /tmp 是什么作用?
作用:用于指定持久化目录
VOLUME /tmp
VOLUME 指定了临时文件目录为/tmp。
其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。
此步骤是可选的,如果涉及到文件系统的应用就很有必要了。
/tmp目录用来持久化到 Docker 数据文件夹,
因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
格式:
- VOLUME ["/path/to/dir"]
示例:
- VOLUME ["/data"]
- VOLUME ["/var/www", “/var/log/apache2”, “/etc/apache2”]
注:一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:
- 卷可以容器间共享和重用
- 容器并不一定要和其它容器共享卷
- 修改卷后会立即生效
- 对卷的修改不会对镜像产生影响
- 卷会一直存在,直到没有任何容器在使用它
4、Dockerfile如何复制保留子目录结构?
试图从本地主机复制一些文件和文件夹到Docker镜像。
files的子文件夹是这样的:
folder1
file1
file2
folder2
file1
file2
正确写法:
COPY files/ /files/
参数:https://cloud.tencent.com/developer/ask/98544
COPY : 复制命令,COPY package.json /usr/src/app/
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
5、ADD : 更高级的复制文件
- ADD : 更高级的复制文件, ADD 指令和 COPY 的格式和性质基本一致。
- 但是在 COPY 基础上增加了一些功能,比如 <源路径> 可以是一个 URL,这种情况下,Docker 引擎会试图去下载这个链接的文件放到 <目标路径> 去;
- 如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去。
- 这些是COPY指令不能做到的。
例子:
#ADD 添加本地文件到镜像
ADD pcre-8.37.tar.gz /usr/local/src
ADD nginx-1.9.3.tar.gz /usr/local/src
6、RUN:指令是用来执行命令行命令的
RUN:指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。
RUN <command> : RUN echo 'Hello, Docker!'
/usr/share/nginx/html/index.html
RUN ["executable", "param1", "param2"] : RUN ["/bin/bash", "-c", "echo hello"]
例子:
#RUN 在镜像中执行命令
RUN yum install -y wget gcc_c++ make openssl-devel
RUN useradd -s /sbin/nologin -M www
RUN yum install -y gcc gcc-c++
RUN ./configure --prefix=/usr/local/nginx \
--user=www --group=www --with-http_ssl_module \
--with-http_stub_status_module \
--with-pcre=/usr/local/src/pcre-8.37 && make && make install
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
7、WORKDIR 指定工作目录
WORKDIR 指定工作目录,使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),
以后各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。
WORKDIR <工作目录路径>
相当于 cd
例子:
#WORKDIR 镜像中切换到目录
WORKDIR /usr/local/src/nginx-1.9.3
8、ENV 设置环境变量
ENV 设置环境变量,格式有两种
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
例子:
#配置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH