From 7c4b3e9b893d6e39a7e4934f9388a4e179a6b8bb Mon Sep 17 00:00:00 2001 From: zhengkunwang223 Date: Mon, 27 Feb 2023 18:58:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20mariadb=20docker-r?= =?UTF-8?q?egistry=20nexus=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/docker-registry/metadata/logo.png | Bin 0 -> 7191 bytes apps/docker-registry/versions/2.8.1/README.md | 73 +++++++ .../versions/2.8.1/config.json | 12 ++ .../versions/2.8.1/docker-compose.yml | 16 ++ apps/list.json | 49 ++++- apps/mariadb/metadata/logo.png | Bin 0 -> 33880 bytes apps/mariadb/versions/10.9.5/README.md | 78 ++++++++ apps/mariadb/versions/10.9.5/config.json | 20 ++ .../versions/10.9.5/docker-compose.yml | 17 ++ apps/nexus/metadata/logo.png | Bin 0 -> 1245 bytes apps/nexus/versions/3.47.1/README.md | 184 ++++++++++++++++++ apps/nexus/versions/3.47.1/config.json | 12 ++ apps/nexus/versions/3.47.1/docker-compose.yml | 18 ++ 13 files changed, 477 insertions(+), 2 deletions(-) create mode 100644 apps/docker-registry/metadata/logo.png create mode 100644 apps/docker-registry/versions/2.8.1/README.md create mode 100644 apps/docker-registry/versions/2.8.1/config.json create mode 100644 apps/docker-registry/versions/2.8.1/docker-compose.yml create mode 100644 apps/mariadb/metadata/logo.png create mode 100644 apps/mariadb/versions/10.9.5/README.md create mode 100644 apps/mariadb/versions/10.9.5/config.json create mode 100644 apps/mariadb/versions/10.9.5/docker-compose.yml create mode 100644 apps/nexus/metadata/logo.png create mode 100644 apps/nexus/versions/3.47.1/README.md create mode 100644 apps/nexus/versions/3.47.1/config.json create mode 100644 apps/nexus/versions/3.47.1/docker-compose.yml diff --git a/apps/docker-registry/metadata/logo.png b/apps/docker-registry/metadata/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa75b2a7ad30dd168678a322e907a5c373fb8f3 GIT binary patch literal 7191 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 Z_ + +[![Build Status](https://github.com/distribution/distribution/workflows/CI/badge.svg?branch=main&event=push)](https://github.com/distribution/distribution/actions?query=workflow%3ACI) +[![GoDoc](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/distribution/distribution) +[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) +[![codecov](https://codecov.io/gh/distribution/distribution/branch/main/graph/badge.svg)](https://codecov.io/gh/distribution/distribution) +[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Fdistribution.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Fdistribution?ref=badge_shield) +[![OCI Conformance](https://github.com/distribution/distribution/workflows/conformance/badge.svg)](https://github.com/distribution/distribution/actions?query=workflow%3Aconformance) + +This repository contains the following components: + +|**Component** |Description | +|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **registry** | An implementation of the [OCI Distribution Specification](https://github.com/opencontainers/distribution-spec). | +| **libraries** | A rich set of libraries for interacting with distribution components. Please see [godoc](https://pkg.go.dev/github.com/distribution/distribution) for details. **Note**: The interfaces for these libraries are **unstable**. | +| **documentation** | Docker's full documentation set is available at [docs.docker.com](https://docs.docker.com). This repository [contains the subset](docs/) related just to the registry. | + +### How does this integrate with Docker, containerd, and other OCI client? + +Clients implement against the OCI specification and communicate with the +registry using HTTP. This project contains a client implementation which +is currently in use by Docker, however, it is deprecated for the +[implementation in containerd](https://github.com/containerd/containerd/tree/master/remotes/docker) +and will not support new features. + +### What are the long term goals of the Distribution project? + +The _Distribution_ project has the further long term goal of providing a +secure tool chain for distributing content. The specifications, APIs and tools +should be as useful with Docker as they are without. + +Our goal is to design a professional grade and extensible content distribution +system that allow users to: + +* Enjoy an efficient, secured and reliable way to store, manage, package and + exchange content +* Hack/roll their own on top of healthy open-source components +* Implement their own home made solution through good specs, and solid + extensions mechanism. + +## Contribution + +Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute +issues, fixes, and patches to this project. If you are contributing code, see +the instructions for [building a development environment](BUILDING.md). + +## Communication + +For async communication and long running discussions please use issues and pull requests on the github repo. +This will be the best place to discuss design and implementation. + +For sync communication we have a #distribution channel in the [CNCF Slack](https://slack.cncf.io/) +that everyone is welcome to join and chat about development. + +## Licenses + +The distribution codebase is released under the [Apache 2.0 license](LICENSE). +The README.md file, and files in the "docs" folder are licensed under the +Creative Commons Attribution 4.0 International License. You may obtain a +copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/. diff --git a/apps/docker-registry/versions/2.8.1/config.json b/apps/docker-registry/versions/2.8.1/config.json new file mode 100644 index 00000000..6dc00080 --- /dev/null +++ b/apps/docker-registry/versions/2.8.1/config.json @@ -0,0 +1,12 @@ +{ + "formFields": [ + { + "type": "number", + "labelZh": "端口", + "labelEn": "Port", + "required": true, + "default": 5000, + "envKey": "PANEL_APP_PORT_HTTP" + } + ] +} \ No newline at end of file diff --git a/apps/docker-registry/versions/2.8.1/docker-compose.yml b/apps/docker-registry/versions/2.8.1/docker-compose.yml new file mode 100644 index 00000000..33686678 --- /dev/null +++ b/apps/docker-registry/versions/2.8.1/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' +services: + docker-registry: + image: registry:2.8.1 + restart: always + container_name: ${CONTAINER_NAME} + ports: + - ${PANEL_APP_PORT_HTTP}:5000 + networks: + - 1panel-network + volumes: + - ./data:/var/lib/registry + +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/list.json b/apps/list.json index 3238f8a7..57d055a9 100644 --- a/apps/list.json +++ b/apps/list.json @@ -3,11 +3,11 @@ "tags": [ { "key": "WebSite", - "name": "网站" + "name": "建站" }, { "key": "Server", - "name": "服务器" + "name": "Web 服务器" }, { "key": "Database", @@ -222,6 +222,51 @@ "website": "https://www.mongodb.com/", "github": "https://github.com/mongodb/mongo", "document": "https://www.mongodb.com/docs/" + }, + { + "key": "mariadb", + "name": "MariaDB", + "tags": ["Database"], + "versions": ["10.9.5"], + "shortDescZh": "MYSQL 复刻版", + "shortDescEn": "The open source relational database", + "type": "runtime", + "required": [], + "crossVersionUpdate": false, + "limit": 1, + "website": "https://mariadb.org/", + "github": "https://github.com/MariaDB/server/", + "document": "https://mariadb.org/documentation/" + }, + { + "key": "docker-registry", + "name": "Docker Registry", + "tags": ["CI/CD"], + "versions": ["2.8.1"], + "shortDescZh": "Docker 镜像的存储和分发系统", + "shortDescEn": "A storage and distribution system for named Docker images", + "type": "runtime", + "required": [], + "crossVersionUpdate": false, + "limit": 1, + "website": "https://hub.docker.com/_/registry", + "github": "https://github.com/distribution/distribution", + "document": "https://docs.docker.com/registry/" + }, + { + "key": "nexus", + "name": "Nexus Repository", + "tags": ["CI/CD"], + "versions": ["3.47.1"], + "shortDescZh": "开源存储库", + "shortDescEn": "An open source repository for build artifacts", + "type": "runtime", + "required": [], + "crossVersionUpdate": false, + "limit": 1, + "website": "https://www.sonatype.com/products/nexus-repository", + "github": "https://github.com/sonatype/docker-nexus3", + "document": "https://help.sonatype.com/repomanager3" } ] } \ No newline at end of file diff --git a/apps/mariadb/metadata/logo.png b/apps/mariadb/metadata/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..995c4cdb685051a02f6e4cde84e56cedba71e6c9 GIT binary patch literal 33880 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 + +# Sonatype Nexus3 Docker: sonatype/nexus3 + +[![Join the chat at https://gitter.im/sonatype/nexus-developers](https://badges.gitter.im/sonatype/nexus-developers.svg)](https://gitter.im/sonatype/nexus-developers?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +A Dockerfile for Sonatype Nexus Repository Manager 3, starting with 3.18 the image is based on the [Red Hat Universal Base Image](https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image) while earlier versions used CentOS. + +* [Contribution Guidlines](#contribution-guidelines) +* [Running](#running) +* [Building the Nexus Repository Manager image](#building-the-nexus-repository-manager-image) +* [Chef Solo for Runtime and Application](#chef-solo-for-runtime-and-application) +* [Testing the Dockerfile](#testing-the-dockerfile) +* [Red Hat Certified Image](#red-hat-certified-image) +* [Notes](#notes) + * [Persistent Data](#persistent-data) +* [Getting Help](#getting-help) + +## Contribution Guidelines + +Go read [our contribution guidelines](https://github.com/sonatype/docker-nexus3/blob/main/.github/CONTRIBUTING.md) to get a bit more familiar with how +we would like things to flow. + +## Running + +To run, binding the exposed port 8081 to the host, use: + +``` +$ docker run -d -p 8081:8081 --name nexus sonatype/nexus3 +``` + +When stopping, be sure to allow sufficient time for the databases to fully shut down. + +``` +docker stop --time=120 +``` + + +To test: + +``` +$ curl http://localhost:8081/ +``` + +## Building the Nexus Repository Manager image + +To build a docker image from the [Dockerfile](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile) you can use this command: + +``` +$ docker build --rm=true --tag=sonatype/nexus3 . +``` + +The following optional variables can be used when building the image: + +- NEXUS_VERSION: Version of the Nexus Repository Manager +- NEXUS_DOWNLOAD_URL: Download URL for Nexus Repository, alternative to using `NEXUS_VERSION` to download from Sonatype +- NEXUS_DOWNLOAD_SHA256_HASH: Sha256 checksum for the downloaded Nexus Repository Manager archive. Required if `NEXUS_VERSION` + or `NEXUS_DOWNLOAD_URL` is provided + +## Chef Solo for Runtime and Application + +Chef Solo is used to build out the runtime and application layers of the Docker image. The Chef cookbook being used is available +on GitHub at [sonatype/chef-nexus-repository-manager](https://github.com/sonatype/chef-nexus-repository-manager). + +## Testing the Dockerfile + +We are using `rspec` as the test framework. `serverspec` provides a docker backend (see the method `set` in the test code) +to run the tests inside the docker container, and abstracts away the difference between distributions in the tests +(e.g. yum, apt,...). + + rspec [--backtrace] spec/Dockerfile_spec.rb + +## Red Hat Certified Image + +A Red Hat certified container image can be created using [Dockerfile.rh.ubi](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile.rh.ubi) which is built to be compliant with Red Hat certification. +The image includes additional meta data to comform with Kubernetes and OpenShift standards, a directory with the +licenses applicable to the software and a man file for help on how to use the software. It also uses an ENTRYPOINT +script the ensure the running user has access to the appropriate permissions for OpenShift 'restricted' SCC. + +The Red Hat certified container image is available from the +[Red Hat Container Catalog](https://access.redhat.com/containers/#/registry.connect.redhat.com/sonatype/nexus-repository-manager) +and qualified accounts can pull it from registry.connect.redhat.com. + +## Other Red Hat Images + +In addition to the Universal Base Image, we can build images based on: +* Red Hat Enterprise Linux: [Dockerfile.rh.el](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile.rh.el) +* CentOS: [Dockerfile.rh.centos](https://github.com/sonatype/docker-nexus3/blob/main/Dockerfile.rh.centos) + +## Notes + +* Our [system requirements](https://help.sonatype.com/display/NXRM3/System+Requirements) should be taken into account when provisioning the Docker container. +* Default user is `admin` and the uniquely generated password can be found in the `admin.password` file inside the volume. See [Persistent Data](#user-content-persistent-data) for information about the volume. + +* It can take some time (2-3 minutes) for the service to launch in a + new container. You can tail the log to determine once Nexus is ready: + +``` +$ docker logs -f nexus +``` + +* Installation of Nexus is to `/opt/sonatype/nexus`. + +* A persistent directory, `/nexus-data`, is used for configuration, + logs, and storage. This directory needs to be writable by the Nexus + process, which runs as UID 200. + +* There is an environment variable that is being used to pass JVM arguments to the startup script + + * `INSTALL4J_ADD_VM_PARAMS`, passed to the Install4J startup script. Defaults to `-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs`. + + This can be adjusted at runtime: + + ``` + $ docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2703m -Xmx2703m -XX:MaxDirectMemorySize=2703m -Djava.util.prefs.userRoot=/some-other-dir" sonatype/nexus3 + ``` + + Of particular note, `-Djava.util.prefs.userRoot=/some-other-dir` can be set to a persistent path, which will maintain + the installed Nexus Repository License if the container is restarted. + + Be sure to check the [memory requirements](https://help.sonatype.com/display/NXRM3/System+Requirements#SystemRequirements-MemoryRequirements) when deciding how much heap and direct memory to allocate. + +* Another environment variable can be used to control the Nexus Context Path + + * `NEXUS_CONTEXT`, defaults to / + + This can be supplied at runtime: + + ``` + $ docker run -d -p 8081:8081 --name nexus -e NEXUS_CONTEXT=nexus sonatype/nexus3 + ``` + +### Persistent Data + +There are two general approaches to handling persistent storage requirements +with Docker. See [Managing Data in Containers](https://docs.docker.com/engine/tutorials/dockervolumes/) +for additional information. + +1. *Use a docker volume*. Since docker volumes are persistent, a volume can be created specifically for + this purpose. This is the recommended approach. + + ``` + $ docker volume create --name nexus-data + $ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3 + ``` + +2. *Mount a host directory as the volume*. This is not portable, as it + relies on the directory existing with correct permissions on the host. + However it can be useful in certain situations where this volume needs + to be assigned to certain specific underlying storage. + + ``` + $ mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data + $ docker run -d -p 8081:8081 --name nexus -v /some/dir/nexus-data:/nexus-data sonatype/nexus3 + ``` + +## Getting Help + +Looking to contribute to our Docker image but need some help? There's a few ways to get information or our attention: + +* Chat with us on [Gitter](https://gitter.im/sonatype/nexus-developers) +* File an issue [on our public JIRA](https://issues.sonatype.org/projects/NEXUS/) +* Check out the [Nexus3](http://stackoverflow.com/questions/tagged/nexus3) tag on Stack Overflow +* Check out the [Nexus Repository User List](https://groups.google.com/a/glists.sonatype.com/forum/?hl=en#!forum/nexus-users) + +## License Disclaimer + +_Nexus Repository OSS is distributed with Sencha Ext JS pursuant to a FLOSS Exception agreed upon between Sonatype, Inc. and Sencha Inc. Sencha Ext JS is licensed under GPL v3 and cannot be redistributed as part of a closed source work._ diff --git a/apps/nexus/versions/3.47.1/config.json b/apps/nexus/versions/3.47.1/config.json new file mode 100644 index 00000000..f427c7f7 --- /dev/null +++ b/apps/nexus/versions/3.47.1/config.json @@ -0,0 +1,12 @@ +{ + "formFields": [ + { + "type": "number", + "labelZh": "端口", + "labelEn": "Port", + "required": true, + "default": 8081, + "envKey": "PANEL_APP_PORT_HTTP" + } + ] +} \ No newline at end of file diff --git a/apps/nexus/versions/3.47.1/docker-compose.yml b/apps/nexus/versions/3.47.1/docker-compose.yml new file mode 100644 index 00000000..1fb40350 --- /dev/null +++ b/apps/nexus/versions/3.47.1/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' +services: + nexus: + image: sonatype/nexus3:3.47.1 + restart: always + container_name: ${CONTAINER_NAME} + environment: + - TZ=Asia/Shanghai + ports: + - ${PANEL_APP_PORT_HTTP}:8081 + volumes: + - ./data/nexus:/nexus-data + networks: + - 1panel-network + +networks: + 1panel-network: + external: true \ No newline at end of file