DevOps Zone is brought to you in partnership with:

Software developer with 4 years of experience in commercial industry. Successfully delivered projects as developer and technical leader. Experienced at development of reliable and flexible systems with high performance on java ee and open-source stack. Alexey has posted 5 posts at DZone. You can read more from them at their website. View Full User Profile

Docker using private registry

07.18.2014
| 11547 views |
  • submit to reddit
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.


Published at DZone with permission of its author, Alexey Kutuzov. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)