Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to publish docker images to docker hub from gitlab-ci

Gitlab provides a .gitlab-ci.yml template for building and publishing images to its own registry (click "new file" in one of your project, select .gitlab-ci.yml and docker). The file looks like this and it works out of the box :)

# This file is a template, and might need editing before it works on your project. # Official docker image. image: docker:latest  services:   - docker:dind  before_script:   - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY  build-master:   stage: build   script:     - docker build --pull -t "$CI_REGISTRY_IMAGE" .     - docker push "$CI_REGISTRY_IMAGE"   only:     - master  build:   stage: build   script:     - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .     - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"   except:     - master 

But by default, this will publish to gitlab's registry. How can we publish to docker hub instead?

like image 480
GabLeRoux Avatar asked Aug 05 '17 02:08

GabLeRoux


People also ask

How do I publish a Docker image to Docker Hub?

To push an image to Docker Hub, you must first name your local image using your Docker Hub username and the repository name that you created through Docker Hub on the web. You can add multiple images to a repository by adding a specific :<tag> to them (for example docs/base:testing ).


1 Answers

No need to change that .gitlab-ci.yml at all, we only need to add/replace the environment variables in project's pipeline settings.

1. Find the desired registry url

Using hub.docker.com won't work, you'll get the following error:

Error response from daemon: login attempt to https://hub.docker.com/v2/ failed with status: 404 Not Found

Default docker hub registry url can be found like this:

docker info | grep Registry Registry: https://index.docker.io/v1/ 

index.docker.io is what I was looking for.

2. Set the environment variables in gitlab settings

I wanted to publish gableroux/unity3d images using gitlab-ci, here's what I used in Gitlab's project > Settings > CI/CD > Variables

CI_REGISTRY_USER=gableroux CI_REGISTRY_PASSWORD=******** CI_REGISTRY=docker.io CI_REGISTRY_IMAGE=index.docker.io/gableroux/unity3d 

CI_REGISTRY_IMAGE is important to set.
It defaults to registry.gitlab.com/<username>/<project>
regsitry url needs to be updated so use index.docker.io/<username>/<project>

Since docker hub is the default registry when using docker, you can also use <username>/<project> instead. I personally prefer when it's verbose so I kept the full registry url.

This answer should also cover other registries, just update environment variables accordingly. 🙌

like image 186
GabLeRoux Avatar answered Sep 22 '22 22:09

GabLeRoux