我们使用 Docker 来安装和运行 GitLab 中文版,由于新版本问题较多,这里我们使用目前相对稳定的 10.5 版本,docker-compose.yml
version: '3.1'
services:
web:
image: 'twang2218/gitlab-ce-zh'
restart: always
hostname: '192.168.75.145'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.175.194:8080'
gitlab_rails['gitlab_shell_ssh_port'] = 2222
unicorn['port'] = 8888
nginx['listen_port'] = 8080
ports:
- '8080:8080'
- '8443:443'
- '2222:22'
volumes:
- /usr/local/docker/gitLab/config:/etc/gitlab
- /usr/local/docker/gitLab/data:/var/opt/gitlab
- /usr/local/docker/gitLab/logs:/var/log/gitlab
我们使用 Docker 来安装和运行 Nexus,docker-compose.yml
配置如下:
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus
ports:
- 8081:8081
volumes:
- /usr/local/docker/nexus/data:/nexus-data
启动时如果出现权限问题可以使用:
chmod 777 /usr/local/docker/nexus/data
赋予数据卷目录可读可写的权限
地址:http://ip:port/ 用户名:admin 密码:admin123
意为第三方仓库,如:
maven-central
nuget.org-proxy
版本策略(Version Policy):
Release: 正式版本
Snapshot: 快照版本
Mixed: 混合模式
布局策略(Layout Policy):
Strict:严格
Permissive:宽松
存储本地上传的组件和资源的,如:
maven-releases
maven-snapshots
nuget-hosted
部署策略(Deployment Policy):
Allow Redeploy:允许重新部署
Disable Redeploy:禁止重新部署
Read-Only:只读
通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包,如:
maven-public
nuget-group
在 Maven settings.xml 中添加 Nexus 认证信息(servers 节点下):
<server>
<id>nexus-releasesid>
<username>adminusername>
<password>admin123password>
server>
<server>
<id>nexus-snapshotsid>
<username>adminusername>
<password>admin123password>
server>
nexus-releases: 用于发布 Release 版本
nexus-snapshots: 用于发布 Snapshot 版本(快照版)
Release 版本与 Snapshot 定义如下:
Release: 1.0.0/1.0.0-RELEASE
Snapshot: 1.0.0-SNAPSHOT
在项目 pom.xml 中设置的版本号添加 SNAPSHOT 标识的都会发布为 SNAPSHOT 版本,没有 SNAPSHOT 标识的都会发布为 RELEASE 版本。
SNAPSHOT 版本会自动加一个时间作为标识,如:1.0.0-SNAPSHOT 发布后为变成 1.0.0-SNAPSHOT-20180522.123456-1.jar
在 pom.xml 中添加如下代码:
<distributionManagement>
<repository>
<id>nexus-releasesid>
<name>Nexus Release Repositoryname>
<url>http://127.0.0.1:8081/repository/maven-releases/url>
repository>
<snapshotRepository>
<id>nexus-snapshotsid>
<name>Nexus Snapshot Repositoryname>
<url>http://127.0.0.1:8081/repository/maven-snapshots/url>
snapshotRepository>
distributionManagement>
注意事项:
ID 名称必须要与 settings.xml 中 Servers 配置的 ID 名称保持一致。
项目版本号中有 SNAPSHOT 标识的,会发布到 Nexus Snapshots Repository,否则发布到 Nexus Release Repository,并根据 ID 去匹配授权账号。
mvn deploy
Nexus 3.0 不支持页面上传,可使用 maven 命令:
mvn deploy:deploy-file
-DgroupId=com.aliyun.oss
-DartifactId=aliyun-sdk-oss
-Dversion=2.2.3
-Dpackaging=jar
-Dfile=D:\aliyun-sdk-oss-2.2.3.jar
-Durl=http://127.0.0.1:8081/repository/maven-3rd/
-DrepositoryId=nexus-releases
注意事项:
建议在上传第三方 JAR 包时,创建单独的第三方 JAR 包管理仓库,便于管理有维护。
(maven-3rd)-DrepositoryId=nexus-releases 对应的是 settings.xml 中
Servers 配置的 ID 名称。(授权)
<repositories>
<repository>
<id>nexusid>
<name>Nexus Repositoryname>
<url>http://127.0.0.1:8081/repository/maven-public/url>
<snapshots>
<enabled>trueenabled>
snapshots>
<releases>
<enabled>trueenabled>
releases>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>nexusid>
<name>Nexus Plugin Repositoryname>
<url>http://127.0.0.1:8081/repository/maven-public/url>
<snapshots>
<enabled>trueenabled>
snapshots>
<releases>
<enabled>trueenabled>
releases>
pluginRepository>
pluginRepositories>
官方的 Docker Hub 是一个用于管理公共镜像的地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry,它可以用来存储和管理自己的镜像。
在之前的 Docker 私有仓库 章节中已经提到过如何配置和使用容器运行私有仓库,这里我们使用 docker-compose 来安装,配置如下:
version: '3.1'
services:
registry:
image: registry
restart: always
container_name: registry
ports:
- 5000:5000
volumes:
- /usr/local/docker/registry/data:/var/lib/registry
启动成功后需要测试服务端是否能够正常提供服务,有两种方式:
浏览器端访问
http://ip:5000/v2/
Ubuntu Server 16.04 LTS 版本,属于 systemd 系统,需要在 /etc/docker/daemon.json 中增加如下内容(如果文件不存在请新建该文件)
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries": ["ip:5000"]
}
注意:该文件必须符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
使用 docker info 命令手动检查,如果从配置中看到如下内容,说明配置成功
Insecure Registries:
192.168.75.133:5000
127.0.0.0/8
我们以 Nginx 为例测试镜像上传功能
docker pull nginx
docker images
docker tag nginx 192.168.75.133:5000/nginx
docker push 192.168.75.133:5000/nginx
curl -XGET http://192.168.75.133:5000/v2/_catalog
以 Nginx 为例,查看已提交的列表
curl -XGET http://192.168.75.133:5000/v2/nginx/tags/list
先删除镜像
docker rmi nginx
docker rmi 192.168.75.133:5000/nginx
再拉取镜像
docker pull 192.168.75.133:5000/nginx
私服安装成功后就可以使用 docker 命令行工具对 registry 做各种操作了。然而不太方便的地方是不能直观的查看 registry 中的资源情况。如果可以使用 UI 工具管理镜像就更好了。这里介绍两个 Docker Registry WebUI 工具
docker-registry-frontend
docker-registry-web
两个工具的功能和界面都差不多,我们以 docker-registry-fontend 为例讲解
我们使用 docker-compose 来安装和运行,docker-compose.yml 配置如下:
version: '3.1'
services:
frontend:
image: konradkleine/docker-registry-frontend:v2
ports:
- 8080:80
volumes:
- ./certs/frontend.crt:/etc/apache2/server.crt:ro
- ./certs/frontend.key:/etc/apache2/server.key:ro
environment:
- ENV_DOCKER_REGISTRY_HOST=192.168.75.133
- ENV_DOCKER_REGISTRY_PORT=5000
注意:请将配置文件中的主机和端口换成自己docker鏡像仓库的地址
运行成功后在浏览器访问:http://192.168.75.133:5000