Application build process can include a step for creating and building a docker image for the target app.
Docker images then needs to be pushed to a docker registry, so that the deployment step can use that image to deploy the application.
In order for the pipeline to work, one needs a docker registry to host the images, either local or public.
Docker hub offers a cloud hosted registry, which is very flexible and always available, but requires your systems to have internet access.
I tested using Docker hub registry and building a simple local registry.
Running a local docker registry is simple, its just another docker container.
sherif@Luthien:~$ cat docker_registry.sh docker run -d \ -p 5100:5000 \ --restart=always \ --name luthien_registry \ -v /registry:/var/lib/registry \ registry:2In the above script, I am mapping the default registry port 5000 on the container to port 5100 on the host machine.
To verify if the registry is running, we use the docker ps or docker container ps command to check:
sherif@Luthien:~$ docker container ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26009ca9e4f4 registry:2 "/entrypoint.sh /etc…" About a minute ago Up About a minute 0.0.0.0:5100->5000/tcp luthien_registry sherif@Luthien:~$Next we need to build a test image to test the new registry, to do this we use a docker file:
sherif@Luthien:~$ cat Dockerfile FROM busybox CMD echo "Hello world! This is my first Docker image." sherif@Luthien:~$Then we use docker build to create the image locally:
sherif@Luthien:~$ docker build -f ./Dockerfile -t busybox_hello:1.0 ./ Sending build context to Docker daemon 3.432GB Step 1/2 : FROM busybox ---> 6858809bf669 Step 2/2 : CMD echo "Hello world! This is my first Docker image." ---> Running in 3a7a187ab5ba Removing intermediate container 3a7a187ab5ba ---> 63213a968c8e Successfully built 63213a968c8e Successfully tagged busybox_hello:1.0 sherif@Luthien:~$ docker image ls -a REPOSITORY TAG IMAGE ID CREATED SIZE busybox_hello 1.0 7415dea3e476 22 seconds ago 1.23MB busybox latest 6858809bf669 3 days ago 1.23MB sherif@Luthien:~$Then we tag the local image using the name:port/tag:version of the image to be pushed to the registry.
sherif@Luthien:~$ docker tag busybox_hello:1.0 luthien:5100/busybox_hello:1.0 sherif@Luthien:~$ docker image ls -a REPOSITORY TAG IMAGE ID CREATED SIZE busybox_hello 1.0 7415dea3e476 23 minutes ago 1.23MB luthien:5100/busybox_hello 1.0 7415dea3e476 23 minutes ago 1.23MB busybox latest 6858809bf669 3 days ago 1.23MB sherif@Luthien:~$Then we push the locally tagged image to the registry using docker push:
sherif@Luthien:~$ docker push luthien:5100/busybox_hello:1.0 The push refers to repository [luthien:5100/busybox_hello] be8b8b42328a: Pushed 1.0: digest: sha256:d7c348330e06aa13c1dc766590aebe0d75e95291993dd26710b6bbdd671b30d1 size: 527 sherif@Luthien:~$In order to confirm if the image was pushed, we use the docker registry rest API to query for our new image:
sherif@Luthien:~$ curl -LX GET http://luthien:5100/v2/_catalog {"repositories":["busybox_hello"]} sherif@Luthien:~$ curl -LX GET http://luthien:5100/v2/busybox_hello/tags/list {"name":"busybox_hello","tags":["1.0"]} sherif@Luthien:~$
If we want to push to an exsiting docker hub repository, we follow a simpler process.
We just need to build the image with the repository tag, do a docker login then do a docker push.
This should push the image as a version tag into the existing repository.
sherif@Luthien:~$ docker build -t sfattah/sfattah_r:1.0 ./ sherif@Luthien:~$ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: sfattah Password: Login Succeeded sherif@Luthien:~$ docker push sfattah/sfattah_r:1.0 The push refers to repository [docker.io/sfattah/sfattah_r] be8b8b42328a: Mounted from library/busybox 1.0: digest: sha256:d7c348330e06aa13c1dc766590aebe0d75e95291993dd26710b6bbdd671b30d1 size: 527 sherif@Luthien:~$
No comments:
Post a Comment