The DevOps Zone is brought to you in partnership with New Relic. Download 5 Unsung Tools of DevOps to see which tools make the cut and why.
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-uiThan 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/bashAnd 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/mongoHere 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/mongoSo 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 New Relic. Read about where DevOps started and how the adoption rate went from tiny startups to giant Fortune 500 enterprises.