一、实验背景
我们使用nexus作为项目中docker镜像库,现在服务器要切ARM,但是nexus官方并不提供ARM版本的docker镜像。
我们知道,nexus本质上是一个java服务,只需要使用ARM架构的基础镜像和ARM架构的jre,然后将nexus的装包打进去,就能构建一个ARM架构的nexus 镜像。
鉴于手头没有ARM架构的服务器,我们有x86_64 的CentOS7.5 模拟构建,在ARM服务器上的实现思路是一样!
二、实验环境
操作系统: CentOS7.5
IP:192.168.1.100
nexus 安装包:nexus-3.16.0-01-unix.tar.gz
jre安装包:jre-8u212-linux-x64.tar.gz
三、生成镜像构建文件
在宿主机
# useradd nexus
# java -version
# tar -zxf nexus-3.16.0-01-unix.tar.gz
# vim nexus-3.16.0-01/bin/nexus.rc
# ./nexus-3.16.0-01/bin/nexus start
# ss -tan | grep 8081
浏览器访问: http://xx.xx.xx.xx:8081
# ./nexus-3.16.0-01/bin/nexus stop
# tar -zcf nexus.tar.gz nexus-3.16.0-01 sonatype-work
# cat Dockerfile
#####################################################
FROM centos:centos7.5.1804
ENV NEXUS_VERSION="3.16.0-01" \
NEXUS_BASE="/opt/nexus" \
JRE_VERSION="8u212"
RUN groupadd -g 1000 nexus && \
useradd -r -u 1000 -g 1000 -m -c "Nexus Repository Manager" -d ${NEXUS_BASE} -s /bin/false nexus && \
mkdir -p ${NEXUS_BASE}
ADD jre-${JRE_VERSION}-linux-x64.tar.gz /usr/local/
COPY nexus.tar.gz /opt
COPY start-nexus-repository-manager.sh /opt
RUN chown -R nexus:nexus ${NEXUS_BASE} /opt/start-nexus-repository-manager.sh
VOLUME ${NEXUS_BASE}
EXPOSE 8081 8443
USER nexus
CMD ["sh", "-c", "/opt/start-nexus-repository-manager.sh"]
###################################################################
# cat start-nexus-repository-manager.sh
###################################
#!/bin/bash
umask 0027
JAVA_HOME="/usr/local/jre1.8.0_212"
PATH=$JAVA_HOME/bin:$PATH
nexus_base="/opt/nexus"
if [ -z "$(ls -A ${nexus_base})" ]; then
cd /opt
tar -zxf nexus.tar.gz -C ${nexus_base}
chown -R nexus:nexus ${nexus_base}
rm -rf nexus.tar.gz
fi
cd ${nexus_base}/nexus-3.16.0-01/bin
exec ./nexus run
#######################################
四、构建镜像
# docker build -f Dockerfile -t nexus:3.16.0-01 .
# mkdir /opt/nexus
# chown -R 1000:1000 /opt/nexus
# docker run -it -d --name nexus -v /opt/nexus:/opt/nexus -p 8081:8081 nexus:3.16.0-01
# docker logs -f nexus
# ss -tan | grep 8081
# docker rm -f nexus
五、将nexus服务注册成系统服务
# vim /etc/systemd/system/nexus.service
#######################################################
[Unit]
Description=Nexus
Requires=docker.service
[Service]
ExecStartPre=-/usr/bin/docker rm -f nexus
ExecStart=/usr/bin/docker run \
--name nexus \
--ulimit nofile=65536:65536 \
-p 8081:8081 \
-p 2020:2020 \
-v /opt/nexus:
/opt/nexus \
nexus:3.16.0-01
ExecStop=/usr/bin/docker stop nexus
LimitNOFILE=65535
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
#######################################################
# systemctl daemon-reload
# systemctl start nexus
# systemctl enable nexus
# systemctl status nexus
浏览器访问:http:/xx.xx.xx.xx:8081
六、参考
nexus镜像的安全加固
https://www.jianshu.com/p/54b460724d95
用nexus3.5搭建docker私有仓库
https://www.jianshu.com/p/7a7db54a538f
用nexus3.x 官方镜像搭建docker私有镜像仓库
https://www.jianshu.com/p/86e573f18df3
Nexus 3.x的三种docker仓库
https://www.jianshu.com/p/ff8bd2505480