Docker 安装 Nexus
- 使用Dockeran安装最新的Nexus
docker run -d -p 8081:8081 -p 8082:8082 -p 8088:8088 -p 8090:8090 --name nexus sonatype/nexus3
- 防火墙设置Nexus访问端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent #添加放行端口
firewall-cmd --reload #重新加载配置
Nexus初始化设置
- 访问Nexus通过http://ip:8081进行访问
ip a #查询ip信息
- 登录Nexus设置用户名密码
docker exec -it nexus /bin/bash #登录到nexus
vi nexus-data/admin.password #查看密码
Nexus默认密码
使用默认密码登录管理后台并设置新的密码
设置Docker私服使用的仓库
- 设置镜像的存储点
- 创建存储点
- 保存创建的存储点
- 创建本地仓库
5. 选择仓库类型
6. 创建仓库并保存
- 放行仓库的端口8088,退出Docker容器的终端
firewall-cmd --zone=public --add-port=8088/tcp --permanent #添加放行端口
firewall-cmd --reload #重新加载配置
- 登录仓库,IP地址换成对应的IP
docker login -u admin -p 123456 192.168.0.127:8088
如果出现下面警告
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get “https://192.168.0.127:8088/v2/”: http: server gave HTTP response to HTTPS client
添加daemon.json配置
vim /etc/docker/daemon.json
将下面内容添加到文件里面,然后保存退出
{
"insecure-registries":["192.168.0.127:8088"]
}
重启Docker
systemctl daemon-reload
systemctl restart docker.service
docker start nexus #重启nexus
重新登录仓库
docker login -u admin -p 123456 192.168.0.127:8088
上传镜像
- Docker开启远程连接
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
systemctl daemon-reload #重新加载配置文件
systemctl restart docker.service #重启服务
firewall-cmd --zone=public --add-port=2375/tcp --permanent #添加放行端口
firewall-cmd --reload #重新加载配置
docker start nexus #重启nexus
- 创建测试项目,新建一个Spring Boot测试项目。项目结构如下
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>docker_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
</parent>
<dependencies>
<!-- web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--启动类-->
<configuration>
<mainClass>com.demo.Application</mainClass>
</configuration>
</plugin>
<!--打包自动复制到docker的目录下-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>package</id>
<phase>package</phase>
<configuration>
<target>
<echo message="*******************package*******************" />
<copy todir="${basedir}/src/docker" overwrite="true">
<fileset dir="${project.build.directory}"
erroronmissingdir="false">
<include name="*.jar" />
</fileset>
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
application.yml
server:
port: 9702 #项目端口
Application.java
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@RequestMapping("/test")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
/**
* 管理界面
*
* @return
*/
@GetMapping
public String test() {
return "Hello World!";
}
}
Dockerfile
# 基础镜像,使用alpine操作系统,openjkd使用8u201
FROM openjdk:8u201-jdk-alpine3.9
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
#应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar
ADD app.jar app.jar
#设置参数
ENV TZ Asia/Shanghai
#启动容器时的进程
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
#暴露9702端口
EXPOSE 9702
- 使用IntelliJ IDEA 连接Docker
- 服务器查看构建的镜像
docker images
- 将镜像推送到私服
docker start nexus #启动服务
docker tag demo:latest 192.168.0.127:8088/demo:latest
docker push 192.168.0.127:8088/demo:latest #推送镜像
推送成功
查看推送成功的镜像
- 下载镜像使用
- 我们将下面存在的所用镜像删除
- 从私服下载镜像使用
docker pull 192.168.0.127:8088/demo:latest
- 运行镜像
docker run -itd --name demo -p 9702:9702 192.168.0.127:8088/demo:latest #运行镜像
docker ps -a #查看状态
运行成功
- 放行端口
firewall-cmd --zone=public --add-port=9702/tcp --permanent #添加放行端口
firewall-cmd --reload #重新加载配置
- 测运行结果
设置代理代理仓库
- 设置代理仓库镜像统一去代理仓库下载
保存代理仓库,放行代理仓库的防火墙
firewall-cmd --zone=public --add-port=8082/tcp --permanent #添加放行端口
firewall-cmd --reload #重新加载配置
vim /etc/docker/daemon.json #修改配置文件
在daemon.json里面添加8082端口内容
{
"insecure-registries":["192.168.0.127:8088","192.168.0.127:8082"]
}
登录代理仓库
systemctl daemon-reload #重新加载配置文件
systemctl restart docker.service #重启服务
docker start nexus #启动服务
docker login -u admin -p 123456 192.168.0.127:8082 #登录代理厂库
登录成功
- 从代理仓库下载内容
docker rm -f demo #删除服务
docker rmi 192.168.0.127:8088/demo:latest #删除原来的镜像
docker pull 192.168.0.127:8082/demo:latest #从代理仓库下载镜像
docker images #查看镜像
- 启动服务
docker run -itd --name demo -p 9702:9702 192.168.0.127:8082/demo:latest #启动服务
docker ps -a #查看运行状态
再次访问成功