Using Docker Compose / fig

Docker Tutorials - YouTube

boot2docker/WORKAROUNDS.md at master · boot2docker/boot2docker

Should I use Vagrant or Docker.io for creating an isolated environment? - Stack Overflow

Vagrant is more similar to Fig (official orchestration tool for docker containers). Vagrant is also similar to boot2docker (Virtualbox image of Tiny Core Linux), but can use VMWare and other Linux-es Vagrant’s synced_folder are similar to boot2docker’s.

Nice illustrations and best explanation and setup: Setting up a development environment using Docker and Vagrant

Docker for the Laravel framework Beautiful Laravel Development with Docker & Fig

Create any index.php:

cd /c/Users/Colovic/Documents ; sudo mkdir www ; cd www ; echo "<?PHP phpinfo();?>" > index.php

First time only (default mysql root password is empty):

cd /c/Users/Colovic/Documents/www

docker run -d --name db -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=libidasql2 -e MYSQL_USER=libidasql2 -e MYSQL_PASSWORD="-syexye-7" -v "$(pwd)/data":/data-on-host mysql

docker run -d --name app --link db:mysql -p 80:80 -v "$(pwd)":/var/www/html php:5.6-apache
docker exec app a2enmod rewrite
docker restart app

sudo docker commit app php:5.6-apache-rewrite

Later only use: docker start db app or docker stop app db

To import db content:

docker exec db mysql -uroot -ppass -e "USE libidasql2; SOURCE /data-on-host/setup.sql;"

To connect inside a container (can do: multiple instances):

docker exec -it db bash

db: name: libidasql2, user: libidasql2, pass: -syexye-7

cd /c/Users/Colovic/Documents ; sudo mkdir www ; cd www ; echo “” > phpinfo.php

Data directory:

docker run –name=data -v /var/volume1 -v /var/volume2 rhel7-data true –volume=/c/Users/Colovic/Documents/www/data:/data-on-host

apt-get update -y && apt-get install -y php5-mcrypt php5-fpm
php5-curl
php5-gd
php5-geoip
php5-imagick
php5-imap
php5-json
php5-ldap
php5-memcache
php5-memcached
php5-mongo
php5-mssql
php5-mysqlnd
php5-pgsql
php5-redis
php5-sqlite
php5-xdebug
php5-xmlrpc

rm /etc/php5/mods-available/mcrypt.ini apt-get -y purge php5-mcrypt apt-get -y install mcrypt apt-get -y install php5-mcrypt php5enmod mcrypt

ln -s /etc/php5/mods-available/mcrypt.ini /usr/local/etc/php/conf.d/mcrypt.ini

Using Docker Compose / fig


User Docker client from Windows

You must enable Docker remote socket service, as explained earlier.

Install Docker CLI on Windows. Prebuild binaries can be downloaded from here.

wget --no-check-certificate https://master.dockerproject.com/windows/amd64/docker.exe

Now, simply use it with:

set DOCKER_HOST=tcp://192.168.0.11:2375

or command line parameter:

docker --host=tcp://192.168.0.11:2375 ps

You will get an error: client and server don’t have same version (client : 1.19, server: 1.17). If you really want to manually run a new docker binary before it is updated in CoreOS, you can download the binary and run a local docker unit file. Read here

Windows port of Docker Client



Fastest way to install boot2docker by using Vagrant: mitchellh/boot2docker-vagrant-box

Or with support for Fig? Micka33/Vagrant-docker-fig

vagrant init mitchellh/boot2docker
vagrant up

boot2docker start && boot2docker ssh

Fig: Windows problem and a fix

Create an alias:

alias fig='docker run --rm -it -v $(pwd):/app -v /var/run/docker.sock:/var/run/docker.sock -e FIG_PROJECT_NAME=$(basename $(pwd)) dduportal/fig'

To make it permanent, we need to customize file /var/lib/boot2docker/bootlocal.sh:

sudo touch /var/lib/boot2docker/bootlocal.sh
sudo chmod +x /var/lib/boot2docker/bootlocal.sh
echo 'echo "alias fig='"'"'docker run --rm -it -v \$(pwd):/app -v /var/run/docker.sock:/var/run/docker.sock -e FIG_PROJECT_NAME=\$(basename \$(pwd)) dduportal/fig'"'"'" >> /home/docker/.ashrc' | sudo tee -a /var/lib/boot2docker/bootlocal.sh
sudo reboot

Windows 7 with boot2docker support for fig

Important: Docker Compose is a replacement for Fig.


In boot2docker, symbolic links or junction points on Windows don’t work. You can use hard-link, but it only exist for files, not directories.


boot2docker is Tiny Core Linux. Installing an app is done with:

tce-load -wi nano.tcz

And run by:

nano

DIY: Tiny Core Linux

And I want it permament in boot2docker, so we will download a packages to a persistent local directory. Do this only once.

cd /var/lib/boot2docker
sudo mkdir tcz
cd tcz
for i in ncurses-common ncurses nano; do sudo wget ftp://ftp.nl.netbsd.org/vol/2/metalab/distributions/tinycorelinux/5.x/x86_64/tcz/$i.tcz; done

And make it permanent:

echo 'tce-load -i /var/lib/boot2docker/tcz/*.tcz' | sudo tee -a /var/lib/boot2docker/bootlocal.sh

OpenShift: as Proxmox, but with Docker (PaaS)

Hosted services that provide “Platform-as-a-Service” or “PaaS”.

Paas: necessary parts to quickly deploy and run a LAMP application: the web server, application server, application runtimes and libraries, database service, and so forth.

OpenShift Origin is the open source project that enables the OpenShift hosted service. Using OpenShift Origin, you can build your own PaaS.

OpenShift Origin vs OpenStack

PaaS typically runs on top of an IaaS provider. For example, both the OpenShift hosted service and the Heroku hosted service run on top of Amazon’s AWS IaaS service.

CoreOS, Project Atomic, boot2docker: stripped Linux for Docker deplyment

CoreOS uses Docker instead of a package manager. CoreOS runs on almost any platform - Vagrant, Amazon EC2, QEMU/KVM, VMware and OpenStack and your own hardware.

Install CoreOS on Hetzner

Project Atomic is same as CoreOS, but backed by Red Hat, and used in OpenShift.

CoreOS vs. Project Atomic

Boot2docker is a lightweight Linux distribution based on Tiny Core Linux made specifically to run Docker containers.

Why not CoreOS? CoreOS is targeted at building infrastructure and distributed systems. Author just wanted the fastest way to boot to Docker.

OpenStack, Proxmox: IaaS

Same as Amazon AWS, but on my server.

OpenStack provides “Infrastructure-as-a-Service”, or “IaaS”. It provides bootable virtual machines, networking, block storage, object storage, and so forth.

Test solutions for free: CloudSpin

Similar projects:

Docker Hosting Services

Like Amazon AWS based on Docker. Instant Docker hosts in the cloud.

OpenShift Online,

Orchard is closed, as company is aquired with Docker Inc as they are a makers of Fig.


Docker is Driving a New Breed of PaaS

Flynn Octohost Deis Tsuru


Hetzner Automation

Shell tool for Hetzner robot wertarbyte/hetzner-robot-perl

Bootstrap-ing

Re-install a server and put SSH key

Automatic installimage: rmoriz/hetzner-bootstrap Ruby jedi4ever/hetzner-cli Bootstrap server as Docker-enabled: iMelnik/hetzner-docker

ArchLinux install script for a Hetzner root server: pschmitt/hetzner-arch Bootstrap CoreOS: asconix/hetzner-bootstrap-coreos


Using Penflip as public documentation: https://www.penflip.com/


In Windows, only once:

VBoxManage sharedfolder add boot2docker-vm --name projects --hostpath c:\projects
VBoxManage modifyvm boot2docker-vm --natpf1 "web,tcp,,80,,80"

In boot2docker:

sudo mkdir /projects
sudo mount -t vboxsf projects /projects

And make it permanent:

echo 'sudo mkdir /projects' | sudo tee -a /var/lib/boot2docker/bootlocal.sh
echo 'sudo mount -t vboxsf -o uid=1000,gid=50 projects /projects' | sudo tee -a /var/lib/boot2docker/bootlocal.sh

Optimizing Dockerfiles for Smaller Sizes


Docker

boot2docker/boot2docker Open Port Check Tool Deploy a PHP app with Docker, Nginx, FPM and CentOS SCL | Enalean docker-arch-php/Dockerfile at master · jprjr/docker-arch-php Deploy a PHP app with Docker, Nginx, FPM and CentOS SCL | Enalean SEED Official Blog — Creating a Docker Container to run PHP, NGINX and… Apache and PHP on Docker — Dev Tricks — Medium How to deploy PHP projects with docker dylanlindgren/docker-laravel-nginx docker-laravel-nginx/Dockerfile at master · dylanlindgren/docker-laravel-nginx docker-laravel-nginx/config at master · dylanlindgren/docker-laravel-nginx Docker for the Laravel framework enable php extension on docker php container - Google Search Best practices for writing Dockerfiles - Docker Documentation docker using dockerfile - Google Search Docker Explained: Using Dockerfiles to Automate Building of Images | DigitalOcean A Week Of Docker – Daniel Martins docker manager gui - Google Search Make Your Docker Workflow Awesome With Fig.sh mysql: Search Results | Docker Hub Registry - Repositories of Docker Images docker-library/docs Docker For WordPress Dev Environment - KatPadi’s Point

docker-wordpress-nginx-ssh/README.md at master · oskarhane/docker-wordpress-nginx-ssh What does Docker add to just plain LXC? - Stack Overflow Docker vs. Vagrant proxmox docker - Google Search hetzner-docker/README.md at master · iMelnik/hetzner-docker

Fully Automated Workflow on Dedicated Systems | Baremetal Industries Build own private cloud on Hetzner - Cloud Hosting - Web Hosting Talk

Docker Images

A repository potentially holds multiple variants of an image. Each variant is identified by a tag and you can refer to a tagged image like so ubuntu:14.04. If you don’t specify a variant, for example you just use ubuntu, then Docker will default to using the ubuntu:latest image.

Docker Hub

The Docker Hub is a public registry maintained by Docker. Docker Registry is engine that stores and distributes images centrally and is used as a backend on Docker Hub. You can always host it by yourself.

As we can see from their prices, Docker Hub allow us unlimited public repositories, but only 1 private repositories for free.

We can search registry:

docker search mysql

Getting image from Docker Hub is easy, and doesn’t require authentication for public images.

docker pull mysql

To commit changes in container into image:

docker commit -m "First commit data image" -a "Vladan Colovic" <IMAGEHASH> cvladan/data:v00

To push that image to Docker Hub:

docker push etaktiker/data

Docker will ask you for username and password on Docker Hub. These credentials will be securely stored in cat ~/.dockercfg for later reuse.

To rename an image:

docker tag old/name:tag new/name:tag

Tags are just human-readable aliases so we can have more than one for every image. You can “untag” the old name by removing the image after you retagged it docker rmi old/name:tag. That will just remove the alias/tag, since image still has other names - that actual image won’t be deleted.

If we have Dockerfile we can use a docker build command to build new images from scratch.

Articles & sources:


Proxy

Divert traffic based on hostname.

HAProxy is the best opensource loadbalancer on the market. Varnish is the best opensource static file cacher on the market. Nginx is the best opensource webserver on the market.

I will use jwilder/nginx-proxy as it supports wildcards.


Web Control Panel with Docker

paimpozhil/WhatPanel Ajenti Webserver Control Panel

How to backup docker container volumes


Problems?

If you get an error:

Repository X already being pulled by another client. Waiting.

just restart Docker service. This is in done with:

sudo systemctl restart docker
Moving images

Saving a docker as image and moving it to a new host:

How to copy docker images from one host to another without via repository?

Docker management tools

I looked at Docker-UI and Panamax, and Docker-UI looks much simpler and cleaner for me. The possible solutions are Kubernetes (Google), Mesos, Shipyard and Docker-UI.

Shipyard

I found out that shipyard web GUI is not working as expected in Chrome - better use Firefox.

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock shipyard/deploy start

Login as admin / shipyard and ad an engine http://192.168.0.11:2375/.

We can run shipyard-cli with another container:

docker run -ti --rm shipyard/shipyard-cli

shipyard login
http://192.168.0.11:8080/
admin
shipyard

Sources & articles


Docker’s image inheritance

Docker only supports running a single foreground process. Docker does not run anything by default - you have to specify exactly one foreground proces you want to run.

Best way to ensure image inheritance is by using Supervisor that itself run as a foreground process, which will keep our containers up and running.

Using Supervisor with Docker to manage processes Using Supervisor from Docker Documentation

date 01. Jan 0001 | modified 29. Dec 2023
filename: Infrastructure - Docker