Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Docker using private registry

DZone's Guide to

Docker using private registry

· DevOps Zone
Free Resource

Planning to extract out a few microservices from your monolith? Read this free guide to learn the best practice before you get started.

There is an easy way to define Docker container using Dockerfile, you may find it in  previous article . There I installed ActiveMQ to Vagrant in Docker without using any registry. The other way to do it is private Docker registry. I will install now MongoDB in a Docker container w/o Dockerfile.
First we need to prepare private registry. I have a system with docker installed and I'm just running registry and registry-ui containers there:

docker run -d -p 5000:5000 registry
docker run -d -p 8080:8080 atcol/docker-registry-ui
Than I need to add registry url in registry ui. In http://10.100.63.193:8080 (that's my host) I'm adding new registry (url: `http://10.100.63.193:5000`, version: `v1`).
Next step is installing MongoDB into ubuntu container:

docker run -t -i --name mongo ubuntu /bin/bash
And something like: `apt-get install mongodb` inside docker shell. After that I need to create Docker image from current container:

docker commit -m "first commit" mongo 10.100.63.193:5000/mongo
docker rm mongo
docker run --name mongo -d -p 27017:27017 -v /data --entrypoint /usr/bin/mongod 10.100.63.193:5000/mongo --dbpath /data
docker commit -m "first commit" mongo 10.100.63.193:5000/mongo
Here I'm creating a `10.100.63.193:5000/mongo` image from `mongo` container. That I define some default variables like expose for `27017` port, volume `/data` and `/usr/bin/mongod` with `--dbpath /data` arguments as entry point. That means new `mongo` container will start mongo service with `/data/` shared volume and `27017` port, mapped to the host system.
Volume `/data` means that this dir inside container basically is not part of that container. You can share volumes between different containers and you can map volume to specific host folder. I will do that late.
Now I need to push my image into registry: `docker push 10.100.63.193:5000/mongo`. You can also specify tag like `10.100.63.193:5000/mongo:t1` if you need to save that version forever. To update `10.100.63.193:5000/mongo` I just need to change stuff inside that container and commit into image with the same name.
On my target machine I'm executing:

docker pull 10.100.63.193:5000/mongo
docker run -d -p 27017:27017 -v /var/data:/data 10.100.63.193:5000/mongo
So it will download the container and run it. And it will store all mongo data into `/var/data` host folder. So I can do whatever I want with container and be not afraid about my real data.
That's it. I can now add this container into my Vagrant file or deploy it directly to real system.


Learn how to measure the impact of every feature release on performance and customer experience metrics.

Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}