Docker część V: DockerHub

Po wszystkich naszych zmaganiach przyszedł czas na poznanie Docker Hub. Jest on tym samym dla dockerowych obrazów czym Github dla naszych repozytoriów – miejscem ich przechowywania, udostępniania oraz miejscem, z którego możemy je pobrać. Dziś pokażę, jak wysłać stworzony przez nas obraz z lokalnego zbioru na Docker Hub, a następnie zautomatyzuję ten proces przy pomocy Bitbucket Pipelines. Skorzystamy z tego samego projektu, którego używaliśmy w części trzeciej, dotyczącej Dockerfiles. Zatem nasz projekt ma taką oto strukturę:

Screen Shot 2017-08-15 at 17.42.45
Gdzie w src znajduje się świeża aplikacja mvc, a nasz plik Dockerfile wygląda tak:

FROM microsoft/dotnet

ADD src/. app/

ENV ASPNETCORE_URLS="http://+:5000"

EXPOSE 5000

WORKDIR app/

RUN dotnet restore && dotnet build

ENTRYPOINT dotnet run

Docker Hub

Aby móc publikować swoje pliki na Docker Hub musimy mieć na nim konto. Udajemy się więc tutaj i zakładamy je, jeśli go nie mamy. Następnie z menu u góry wybieramy Create -> Create Repository. Zostaniemy przeniesieni na stronę tworzenia repozytorium. Nadajemy mu nazwę oraz opcjonalnie opisy i klikamy przycisk Create.
W tym momencie możemy przejść do tworzenia naszego obrazu. Budujemy nasz plik Dcokerfile komendą:

docker build .

Teraz nadajemy mu taki sam tag jak naszemu repozytorium:

docker tag [imageId] [namespace/repositoryName]

gdzie namespace to po prostu nazwa naszego konta, a nazwa repozytorium to nazwa ustawiona przez nas. Dla przykładu moje repozytorium to krystiankolad/test-app. Mogliśmy ten tag ustawić już podczas budowania, podając argument -t.
Aby móc wysyłać nasze obrazy do repozytorium musimy się zalogować komendą:

docker login

Następnie podajemy nazwę użytkownika oraz hasło. Będąc zalogowanym jedyne, co musimy zrobić to przy użyciu komendy:

docker push [namespace/repositoryName]

zpushować nasze repozytorium do Docker Huba. Po kilku chwilach możemy wejść na nasze repozytorium na https://hub.docker.com/ i w sekcji tag powinniśmy zobaczyć taki obrazek:

Screen Shot 2017-08-15 at 17.52.43
Teraz przy użyciu komendy:

docker search

możemy znaleźć nasze repozytorium.

Automatyzacja

Ciągłe ręczne wysyłanie naszego obrazu na Docker Hub jest nieco monotonne. Jednak można wykorzystać Bitbucket Pipelines, aby zautomatyzować ten proces przy każdym pushu do zdalnego repozytorium. Aby to zrobić, w utworzonym repozytorium wybieramy z menu po lewej Pipelines, a następnie u dołu wybieramy opcję Docker. Commitujemy podany nam plik oraz pobieramy go na naszym komputerze komendą:

git pull

Zmieniamy plik tak, aby wyglądał następująco:

# This is a sample build configuration for Docker.
# Check our guides at https://confluence.atlassian.com/x/O1toN for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
# image: atlassian/default-image:latest

# enable Docker for your repository
options:
  docker: true

pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          # build the Docker image (this will use the Dockerfile in the root of the repo)
          - docker build -t $IMAGE_NAME .
          # authenticate with the Docker Hub registry
          - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
          # push the new Docker image to the Docker registry
          - docker push $IMAGE_NAME

Nasz plik .yaml mówi Pipelines, że mają zbudować nasz obraz, zalogować się na nasze konto, a potem zpushować nasz obraz na repozytorium. Stanie się tak za każdym razem, kiedy na Bitbucketa zostanie zpushowany jakikolwiek commit. IMAGE_NAME, DOCKER_HUB_USERNAME oraz DOCKER_HUB_PASSWORD zostaną pobrane ze zmiennych środowiskowych. Nie chcemy w końcu udostępniać naszego hasła w żadnym pliku ;D. Ustawia się je, klikając po lewej stronie w Settings, a następnie w sekcji Pipelines wybieramy “Environment variables”. Ustawiamy tam nazwy zmiennych i ich wartości.
Po ustawieniu zmiennych oraz zpushowaniu naszego pliku z lokalnego repozytorium oraz odczekaniu chwili naszym oczom powinny się ukazać dwa obrazki: jeden na Bitbucket Pipelines:

Screen Shot 2017-08-15 at 18.14.44
a drugi na Docker Hub:

Screen Shot 2017-08-15 at 18.15.43.png
Możecie mi nie wierzyć, ale to po prostu najnowsza wersja ;P.

Tym oto sposobem pokazałem wam, w jaki sposób publikuje się swoje własne obrazy na Docker Hub oraz jak można ten proces zautomatyzować przy użyciu Bitbucket Pipelines.

Do przeczytania niedługo 😉

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s