Over a million developers have joined DZone.

Docker using private registry

· DevOps Zone

The DevOps zone is brought to you in partnership with Sonatype Nexus. The Nexus suite helps scale your DevOps delivery with continuous component intelligence integrated into development tools, including Eclipse, IntelliJ, Jenkins, Bamboo, SonarQube and more. Schedule a demo today

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 (that's my host) I'm adding new registry (url: ``, 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
docker rm mongo
docker run --name mongo -d -p 27017:27017 -v /data --entrypoint /usr/bin/mongod --dbpath /data
docker commit -m "first commit" mongo
Here I'm creating a `` 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`. You can also specify tag like `` if you need to save that version forever. To update `` 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
docker run -d -p 27017:27017 -v /var/data:/data
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 Sonatype Nexus. Use the Nexus Suite to automate your software supply chain and ensure you're using the highest quality open source components at every step of the development lifecycle. Get Nexus today


The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}