一、实验背景
一般docker容器默认使用的root权限做服务的启动,安全整改要求,服务的启动用户要为普通用户。
整改后,服务进程的所有者需为普通用户,不能为root。
二、实验环境
操作系统: CentOS7.5 Minimal
IP: 192.168.1.104
三、编写dockerfile,制作镜像
# mkdir /opt/abc
# cp HelloWorldWeb-0.0.1-SNAPSHOT.jar /opt/abc
# cd /opt/abc
# vim Dockerfile
############################################################
FROM centos:7
RUN yum clean all && \
yum -y install java && \
useradd -m -d /home/test -u 2019 -U test
WORKDIR /home/test
USER test
ADD --chown=test HelloWorldWeb-0.0.1-SNAPSHOT.jar /home/test/app.jar
CMD exec java -Djava.security.egd=file:/dev/./urandom -jar app.jar
EXPOSE 8080
#############################################################
# docker build -f Dockefile -t test:v1 .
# docker images
四、用镜像启动容器测试
# docker run -it -d --name test -p 8080:8080 test:v1
# docker ps -a
docker ps -a --no-trunc
# docker logs test
# ss -tan
# docker exec -it test bash
$ ps aux | grep java
从上可以看出,java进程的所有者为指定的test用户,而不是root了。
浏览器访问:http://192.168.1.104:8080
五、参考
Dockerfile语法大全
https://www.jianshu.com/p/e37225134adf
Dockerfile reference
https://docs.docker.com/engine/reference/builder
dockerfile指定jvm参数
https://segmentfault.com/a/1190000007271728