Wanted to play around with Docker and found an interesting Operating System that hosts docker containers.
This is what I had to do to get it up and running on my Mac OS X with VMware Fusion.
Lets start by downloading CoreOS. Lightweight Cluster Server.
I downloaded the stable branch, you could also try alpha or beta.
# curl -LO http://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_insecure.zip
Unzip a couple of virtuals.
# unzip coreos_production_vmware_insecure.zip -d coreos1
# unzip coreos_production_vmware_insecure.zip -d coreos2
Start VMware Fusion and open vmx file on coreos1 and then coreos2. I liked to add more memory, say 2G memory and 20G of disk space.
Start virtual server.
On the Mac open a terminal and cd into coreos1. Of course you will see I am using a private network for this test and also you should be setting up your own ssh keys.
$ cd coreos1
$ ssh -i insecure_ssh_key [email protected] hit enter. You should be logged into coreos1.
Now we need to setup a Cloud-Config. Now there is different ways to do this. I choose to setup the virtuals by editing each one, as I wanted to set a static ip address, start some services and connect to get the token for the cluster I want to setup.
OK, lets get the token for this new cluster. In a web browser go to http://discovery.etcd.io/new and copy and paste the result into a document, for later use.
Setup the Network
# cd /etc/systemd/network
# vi static.network
[Match]
Name=<interface Name>[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
Restart network
# systemctl restart systemd-networkd
Now we will setup the Cloud-Config
# mkdir /var/lib/coreos-install
# vi /var/lib/coreos-install/user_data
#cloud-confighostname: coreos1coreos:etcd:discovery: https://discovery.etcd.io/<token>addr: 192.168.1.100:4001peer-addr: 192.168.1.100:7001update:reboot-strategy: etcd-lockunits:- name: etcd.servicecommand: start- name: fleet.servicecommand: start
# coreos-cloudinit --from-file /var/lib/coreos-install/user_data
# cd /etc/systemd/system/
# mkdir etcd.service.d
# mv /run/systemd/system/etcd.service.d/20-cloudinit.conf /etc/systemd/system/etcd.service.d/20-cloudinit.conf
Restart virtual.
# reboot
Now lets work on the second server.
$ cd coreos2
$ ssh -i insecure_ssh_key [email protected] hit enter. You should be logged into coreos2.
Now we need to setup a Cloud-Config. Now there is different ways to do this. I choose to setup the virtuals by editing each one, as I wanted to set a static ip address, start some services and connect to get the token for the cluster I want to setup.
OK, lets use the token we retrieved before.
Setup the Network
# cd /etc/systemd/network
# vi static.network
[Match]
Name=<interface Name>[Network]
Address=192.168.1.101/24
Gateway=192.168.1.1
DNS=8.8.8.8
Restart network
# systemctl restart systemd-networkd
Now we will setup the Cloud-Config
# mkdir /var/lib/coreos-install
# vi /var/lib/coreos-install/user_data
#cloud-confighostname: coreos2coreos:etcd:discovery: https://discovery.etcd.io/<token>addr: 192.168.1.101:4001peer-addr: 192.168.1.101:7001update:reboot-strategy: etcd-lockunits:- name: etcd.servicecommand: start- name: fleet.servicecommand: start
# coreos-cloudinit --from-file /var/lib/coreos-install/user_data
# cd /etc/systemd/system/
# mkdir etcd.service.d
# mv /run/systemd/system/etcd.service.d/20-cloudinit.conf /etc/systemd/system/etcd.service.d/20-cloudinit.conf
Restart virtual.
# reboot
Now we can check and see if the two servers are connected in a cluster.
# fleetctl list-machines
You should receive something like this.
How to replace your ssh keys.
# cat ~/.ssh/id_rsa.pub | ssh [email protected] -i insecure_ssh_key update-ssh-keys -a user ssh [email protected] update-ssh-keys -D oem
# systemctl status -l fleet
# systemctl start fleet
# systemctl status -l fleet
# systemctl list-machines
Now you can start playing around with Docker.
Login to one of your CoreOS servers and try the commands below.
This will download CentOS image.
# docker pull centos
Look at what images you have.
# docker images
Run a CentOS container Repository and connect to bash prompt.
# docker run -i -t centos /bin/bash
Run a CentOS 6 container, Repository:TAG and connect to bash prompt.
# docker run -i -t centos:centos6 /bin/bash
Run a CentOS 7 container, Repository:TAG and connect to bash prompt.
# docker run -i -t centos:centos7 /bin/bash
Look for the image you were working on.
# docker ps -a
Save to your image.
# docker commit 9dbb15de0aac coreos/apache
Login to your new image.
# docker run -i -t coreos/apache /bin/bash
Login to your new image.
# docker run -i -t coreos/apache:latest /bin/bash
If you update again you will need to save the image again.
Run a web server on port 80. You will connect by the server coreos1 or coreos2 apache is running on.
# docker run -d -p 80:80 apache /usr/sbin/apachectl -D FOREGROUND
Go to web browser and type in 192.168.1.100 or 192.168.1.101 and you should see the default web server.
There is a lot more you can do, this is just the beginning. I will be adding other articles about docker later.
References:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-coreos-cluster-on-digitalocean
https://coreos.com/docs/quickstart/
https://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/
https://coreos.com/docs/launching-containers/building/getting-started-with-docker/
http://docs.docker.com/userguide/dockerizing/
https://docs.docker.com/installation/centos/
Ansible and Docker
Docker Filesystem Persistence With Flocker
http://www.centurylinklabs.com/docker-filesystem-persistence-with-flocker/
Persistence Storage for MySQL Database.
http://www.alexecollins.com/content/docker-persistence/
http://txt.fliglio.com/2013/11/creating-a-mysql-docker-container/
CLI reference.
http://docs.docker.com/reference/commandline/cli/
Other reference stuff.
https://docs.docker.com/articles/basics/#check-your-docker-install
https://github.com/coreos/bugs/issues/100
https://github.com/coreos/coreos-cloudinit/blob/master/Documentation/config-drive.md
http://seanmcgary.com/posts/deploying-docker-containers-on-coreos-using-fleet