Over a million developers have joined DZone.
Gold Partner

Docker using private registry

· DevOps Zone

The DevOps Zone is brought to you in partnership with LogEntries. Learn how you can convert any query into a data visualization for your dashboard with Logentries.

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.


The DevOps Zone is brought to you in partnership with LogEntries. Learn how you can convert any query into a data visualization for your dashboard with Logentries.

Topics:

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

{{ parent.tldr }}

{{ parent.urlSource.name }}