0. 创建 Network
docker network create dev-ops
1. Docker 安装 Nginx
Docker 安装 Nginx 时,要把容器中的文件挂载到本地目录,方便我们配置 Nginx,不用修改配置还要进入容器中;
- 1.1 下载镜像
docker pull nginx
- 1.2 先运行一次容器(为了拷贝配置文件 )
docker run -p 80:80 --name nginx --network dev-ops -v /opt/mount/nginx/html:/usr/share/nginx/html -v /opt/mount/nginx/logs:/var/log/nginx -d nginx
/opt/mount/nginx是本地目录(随便起名字),该目录下有两个子目录html
logs
- 1.3 拷贝配置
docker container cp nginx:/etc/nginx /opt/mount/nginx
- 1.4 修改目录名字
mv /opt/mount/nginx/nginx /opt/mount/nginx/conf
- 1.5 停止、删除容器
docker stop nginx
docker rm nginx
2. 使用 Docker 再次运行 Nginx
docker run -p 80:80 --name nginx --network dev-ops -v /opt/mount/nginx/html:/usr/share/nginx/html -v /opt/mount/nginx/logs:/var/log/nginx -v /opt/mount/nginx/conf:/etc/nginx -d nginx
3. Nexus3
- 3.1 获取镜像
docker pull sonatype/nexus3
- 3.2 创建挂载目录
docker volume create --name nexus3
- 3.3 运行镜像
docker run -dti --name nexus3 --network dev-ops --network-alias devops-nexus3 --restart=always -p 8081:8081 -v nexus3:/nexus-data sonatype/nexus3
- 3.4 配置 Nginx
touch nexus3.conf
vim nexus3.conf
server {
listen 80;
server_name 你自己的域名或者IP;
location / {
proxy_pass http://devops-nexus3:8081;
proxy_set_header Host $host;
}
}
- 3.5 重启 Nginx
docker restart nginx
4. 配置 Nexus Docker
upstream nexus_docker_get {
# devops-nexus3 是上面启动 nexus3 配置的 --network-alias;
# 8082 是配置 Docker Group 仓库配置的端口
server devops-nexus3:8082;
}
upstream nexus_docker_push {
# devops-nexus3 是上面启动 nexus3 配置的 --network-alias;
# 8082 是配置 Docker Hosted 仓库配置的端口
server devops-nexus3:8083;
}
server {
listen 80;
server_name 域名;
set $upstream "nexus_docker_push";
if ( $request_method ~* 'GET' ) {
set $upstream "nexus_docker_get";
}
# [解决Nexus Docker仓库搜索镜像返回500错误](https://zhangge.net/5144.html)
if ( $request_uri ~ '/search' ) {
# 这是上面文章提到的问题,但是我没有遇到
# set $upstream "nexus_docker_push";
}
location / {
proxy_pass http://$upstream;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
5. Jenkins
- 下载镜像
docker pull jenkins/jenkins
- 创建挂载目录
mkdir -p /opt/mount/jenkins
启动
docker run -itd --name jenkins --network dev-ops --network-alias devops-jenkins --restart=always -p 8080:8080 -p 50000:50000 -v /opt/mount/jenkins:/var/jenkins_home jenkins/jenkins
6. 问题 QA
413 Request Entity Too Large
这是因为我中间使用 Nginx 做了代理,Nginx 对请求的body大小做了限制;需要在 nginx 配置文件 http 节点 下面加入或者修改;
# 该值可以加大点,毕竟 Docker image 动不动 几百兆
client_max_body_size 50M;
unauthorized: access to the requested resource is not authorized
通过
docker login 自己的Docker私服域名
登录成功后,推送镜像过程中出现的错误; 解决方式 点击进入;问题就是,我新建一个用于 Docker 仓库的 Docker 账号、角色;给角色设置的权限不对;
以上是使用 Docker Nginx Nexus3 搭建的 Docker 仓库
在搭建过程中也是各种搜索、格式参考文档,如果你在搭建过程中遇到问题,欢迎留言交流。