我的业务需求:
业务上要对接db2数据库, 然而该jar包中央仓库没有。本地编译还好,可我们的测试环境和最终服务镜像制作都是在aws上,所以最终决定在aws上创建一个Nexus服务,内外网都可以使用。
官网下载UNIX版压缩包
准备需要的环境
- Dockerfile
- jdk (nexus依赖jdk)
- 下载好的tar.gz包
以上三个文件要在一个文件夹中, Dockerfile 文件内容如下:
1 FROM centos:latest
2
3 MAINTAINER woaidouwentao
4
5 RUN mkdir /Nexus
6
7 COPY nexus-3.16.1-02-unix.tar.gz /Nexus
8
9 COPY jdk1.8.0_101 /Nexus/jdk1.8.0_101
10
11 RUN echo 'export JAVA_HOME=/Nexus/jdk1.8.0_101' >> /etc/profile
12
13 RUN echo 'export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile
14
15 RUN echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
16
17 RUN tar -zxf /Nexus/nexus-3.16.1-02-unix.tar.gz -C /Nexus
18
19 RUN sed -i 's|# INSTALL4J_JAVA_HOME_OVERRIDE=|INSTALL4J_JAVA_HOME_OVERRIDE=/Nexus/jdk1.8.0_101|' /Nexus/nexus-3.16.1-02/bin/nexus
20
21 WORKDIR /Nexus/nexus-3.16.1-02/bin
22
23 ENTRYPOINT sh nexus start; tailf nexus
制作镜像
- docker build -t nexus:v3.16.1 . (千万别忽略了最后的点 )
- 查看制作完成的镜像:docker images | grep nex
创建Volume
- 镜像跑起来就是container,万一container挂了我们所有的jar就从这个世界“消失了”所以要对镜像做持久化映射,先创建一个volume
- docker volume create nexus_respository (创建名为nexus_respository的volume)
然后就可以不用怕镜像挂掉重启啥都没有了:
docker run -d -p 9907:8081 -v nexus_respository:/Nexus/sonatype-work/nexus3/blobs nexus:v3.16.1 /bin/bash - nexus 默认端口是8801我做了端口映射到9907, 红色部分是volume的名字和docker内部要持久化的路径,blobs是存储二进制文件的路径。