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

Download the blueprint that can take a company of any maturity level all the way up to enterprise-scale continuous delivery using a combination of Automic Release Automation, Automic’s 20+ years of business automation experience, and the proven tools and practices the company is already leveraging.

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.


Download the ‘Practical Blueprint to Continuous Delivery’ to learn how Automic Release Automation can help you begin or continue your company’s digital transformation.

Topics:

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

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

X

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

{{ parent.tldr }}

{{ parent.urlSource.name }}