Я нахожусь в процессе настройки реестра gitlab на сервере, потому что я хочу начать использовать пользовательские образы с моим конвейером CI / CD.
текущий статус
- I имеет настройка gitlab на локальном сервере с бегуном (работает конвейер хранилища и CI / CD) .
- Я могу просматривать пакеты -> реестр в gitlab моего сервера в браузере
- I могу успешно "docker login" ( в то время как на сервере).
- I не может pu sh изображений в реестр, находясь на сервере (я могу pu sh to localhost / project / my- ubuntu , но не localhost: 4567 / project / my-ubuntu и ничего не просматривается в пакетах-> реестр)
- I имеет установку Omnibus GitLab (вот почему у меня есть файл gitlab.rb)
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
Gitlab-ctl версия 12.9.0 Docker версия 19.03.8
Цель # 1
- get docker логин, работающий на сервере
- pu sh образ в реестр на сервере
- просмотр изображений в ' пакеты-> реестр 'в моем веб-браузере
Цель # 2
- docker войдите из моего ноутбук
- pu sh образ с ноутбука в реестр gitlab сервера
- настроить gitlab-ci.yml для использования нового образа и запустить конвейер.
Шаги, предпринятые на сервере
- проверка концепции реестра
- настройка gitlab.rb
- docker login и pu sh в реестр
ШАГ 1: проверить концепцию реестра
user@my-server:/# sudo -i
root@my-server:/# export certsDir='/etc/gitlab/ssl/certs'
root@my-server:/# export myRegistry='localhost'
root@my-server:/# cd $certsDir
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
# spin up a container (certs and ports configured)
root@my-server:/# docker run -d --restart=always --name registry -v $certsDir:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:4567 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/$myRegistry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/$myRegistry.key -p 4567:4567 registry:2
# configure localhost for loopback
root@my-server:/# vim /etc/hosts
127.0.0.1 localhost
# get rid of any previous garbage
root@my-server:/# rm -rf /etc/docker/daemon.json
# pull, tag, and push image to local registry
root@my-server:/# docker pull ubuntu:16.04
docker tag ubuntu:16.04 localhost:4567/my-ubuntu
docker push localhost:4567/my-ubuntu
root@my-server:/etc/gitlab/ssl/certs# docker push localhost:4567/my-ubuntu
The push refers to repository [localhost:4567/my-ubuntu]
4ae3adcb66cb: Pushed
aa6685385151: Pushed
0040d8f00d7e: Pushed
9e6f810a2aab: Pushed
latest: digest: sha256:a98d9dcf3a34b2b78e78c61d003eb4d7a90d30fd54451686e2f0bd2ef5f602ac size: 1150
root@my-server:/etc/gitlab/ssl/certs# exit
user@my-server:/etc/gitlab/ssl/certs$ sudo docker pull python:latest
user@my-server:/etc/gitlab/ssl/certs$ sudo docker push localhost:4567/my-python
The push refers to repository [localhost:4567/my-python]
fbefc7d9db96: Pushed
bd436d37b328: Pushed
8b6dde37c5c4: Pushed
3dffd131f01f: Pushed
271910c4c150: Pushed
6670e930ed33: Pushed
c7f27a4eb870: Pushed
e70dfb4c3a48: Pushed
1c76bd0dc325: Pushed
latest: digest: sha256:d24b098d2b144adc02ed5c9917a17485b55a30f7ca55d8015b6df018b9337cde size: 2217
# View what curl says
user@my-server:/etc/gitlab/ssl/certs$ sudo curl -v localhost
* Rebuilt URL to: localhost/
* Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 80 failed: Connection refused
* Failed to connect to localhost port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 80: Connection refused
user@my-server:/etc/gitlab/ssl/certs$ sudo curl -v localhost:4567
* Rebuilt URL to: localhost:4567/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 4567 (#0)
> GET / HTTP/1.1
> Host: localhost:4567
> User-Agent: curl/7.58.0
> Accept: */*
>
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
* Failed writing body (0 != 7)
* stopped the pause stream!
* Closing connection 0
# shut-down the container
root@my-server:/# docker container rm registry
root@my-server:/# docker rmi <image number for registry>
ШАГ 2: настроить gitlab.rb
root@my-server:/ vim /etc/gitlab/gitlab.rb
registry_external_url 'http://localhost:4567'
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/certs/localhost.crt"
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/certs/localhost.key"
root@my-server:/# gitlab-ctl reconfigure
... no errors output ...
Running handlers:
Running handlers complete
Chef Client finished, 7/794 resources updated in 13 seconds
gitlab Reconfigured!
root@my-server:/# gitlab-ctl restart
ok: run: alertmanager: (pid 7262) 0s
ok: run: gitaly: (pid 7291) 1s
ok: run: gitlab-exporter: (pid 7308) 0s
ok: run: gitlab-workhorse: (pid 7312) 0s
ok: run: grafana: (pid 7326) 1s
ok: run: logrotate: (pid 7350) 0s
ok: run: nginx: (pid 7356) 1s
ok: run: node-exporter: (pid 7358) 0s
ok: run: postgres-exporter: (pid 7365) 1s
ok: run: postgresql: (pid 7373) 0s
ok: run: prometheus: (pid 7376) 0s
ok: run: redis: (pid 7473) 1s
ok: run: redis-exporter: (pid 7480) 0s
ok: run: registry: (pid 7488) 1s
ok: run: sidekiq: (pid 7498) 0s
ok: run: unicorn: (pid 7504) 0s
root@my-server:/etc/gitlab/ssl/certs# gitlab-ctl status
run: alertmanager: (pid 7262) 117s; run: log: (pid 1485) 4322901s
run: gitaly: (pid 7291) 117s; run: log: (pid 719) 4323118s
run: gitlab-exporter: (pid 7308) 116s; run: log: (pid 1395) 4322919s
run: gitlab-workhorse: (pid 7312) 116s; run: log: (pid 1288) 4322938s
run: grafana: (pid 7326) 116s; run: log: (pid 1778) 4322827s
run: logrotate: (pid 7350) 115s; run: log: (pid 1325) 4322931s
run: nginx: (pid 7821) 1s; run: log: (pid 1294) 4322937s
run: node-exporter: (pid 7358) 114s; run: log: (pid 1374) 4322925s
run: postgres-exporter: (pid 7365) 114s; run: log: (pid 1515) 4322893s
run: postgresql: (pid 7373) 113s; run: log: (pid 871) 4323112s
run: prometheus: (pid 7376) 113s; run: log: (pid 1443) 4322907s
run: redis: (pid 7473) 113s; run: log: (pid 675) 4323122s
run: redis-exporter: (pid 7480) 112s; run: log: (pid 1419) 4322911s
run: registry: (pid 7488) 112s; run: log: (pid 26387) 66209s
run: sidekiq: (pid 7498) 111s; run: log: (pid 1181) 4322944s
run: unicorn: (pid 7504) 111s; run: log: (pid 1129) 4322948s
ШАГ 3: docker войти и pu sh в реестр
# wait for a minute, setup deploy token and docker login
- GO TO: http://my-server/my-project/container_registry
docker login localhost:4567
docker build -t localhost:4567/projectx/projectxy/projectxyz .
docker push localhost:4567/projectx/projectxy/projectxyz
- GO TO: http://my-server/my-project/~/settings/ci_cd
- create a deploy token
root@my-server:/# docker login localhost:4567
Username: <username from deploy token>
Password: <token>
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
# try to push to gitlab registry from the server
root@my-server:/# docker pull ubuntu:16.04
root@my-server:/# docker tag ubuntu:16.04 localhost:4567/projectx/projectxy/my-ubuntu
root@my-server:/# docker push localhost:4567/projectx/projectxy/my-ubuntu
The push refers to repository [localhost:4567/projectx/projectxy/my-ubuntu]
4ae3adcb66cb: Preparing
aa6685385151: Preparing
0040d8f00d7e: Preparing
9e6f810a2aab: Preparing
denied: requested access to the resource is denied
Альтернативные подходы
- После приведенных выше команд я попытался создать образ реестра (поскольку ни один не присутствовал с docker ps, docker ps -a, docker images)
root@my-server:/etc/gitlab/ssl/certs# export certsDir='/etc/gitlab/ssl/certs'
root@my-server:/etc/gitlab/ssl/certs# export myRegistry='localhost'
root@my-server:/etc/gitlab/ssl/certs# docker run -d --restart=always --name registry -v $certsDir:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/$myRegistry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/$myRegistry.key -p 443:5000 registry:2
Unable to find image 'registry:2' locally
2: Pulling from library/registry
486039affc0a: Pull complete
ba51a3b098e6: Pull complete
8bb4c43d6c8e: Pull complete
6f5f453e5f2d: Pull complete
42bc10b72f42: Pull complete
Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
Status: Downloaded newer image for registry:2
2968d5a32c01b53890881d56a582fdcce2bfad38a7a2f7b56060b75a1ebd817c
root@my-server:# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2968d5a32c01 registry:2 "/entrypoint.sh /etc…" 13 seconds ago Up 8 seconds 0.0.0.0:443->5000/tcp registry
root@my-server:/etc/gitlab/ssl/certs# docker push localhost:4567/projectx/projectxy/my-ubuntu
The push refers to repository [localhost:4567/projectx/projectxy/my-ubuntu]
4ae3adcb66cb: Preparing
aa6685385151: Preparing
0040d8f00d7e: Preparing
9e6f810a2aab: Preparing
denied: requested access to the resource is denied
альтернативные подходы
127.0.0.1 localhost registry.me
Вопросы
Состояние gitlab-ctl показывает, что реестр работает, так почему я не могу добавить туда sh?
какую часть конфигурации файла gitlab.rb
я бы изменил, чтобы подключиться к своему образу реестра. Создает ли gitlab свой собственный реестр?
В чем разница между созданием моего собственного реестра и его загрузкой и подключением gitlab к реестру?