The idea is to setup isolated development environment that can be used for several projects without the need to start all different services needed by different projects every time the computer is booted.
Lets say we have three projects X, Y, and Z where X and Y uses Postgres while Z uses MySql.
Instead of starting both Postgres and MySql when our computer starts, we want to start Postgres when we are working on project X and Y or, start MySql when we are working on project Z.
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a Compose file to configure your application’s services.
According to the Docker Machine documentation:
Docker Machine allows you to provision Docker on virtual machines that reside either on your local system or on a cloud provider. Docker Machine creates a host on a VM and you use the Docker Engine client as needed to build images and create containers on the host.
We’ll need to install Docker, Docker Compose, and Docker Machine. Notice that Virtualbox is needed to run a docker machine locally.
sudo pacman -S docker virtualbox yaourt -S docker-compose-bin docker-machine sudo modprobe vboxdrv
Load the virtualbox kernel modules by adding the following line in the /etc/modules-load.d/virtualbox.conf file.
vboxdrv vboxnetadp vboxnetflt vboxpci
If you want to point the Docker images folder to a different path, you will need to edi the systemd service as follows:
systemctl edit --full docker
-ExecStart=/usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs +ExecStart=/usr/bin/docker daemon --graph='/path/to/custom/folder/Docker/' -H fd:// --exec-opt native.cgroupdriver=cgroupfs
Enable and start daemon
systemctl enable docker systemctl start docker
To run docker as your regular user and without the need to sudo, you will needto add your user to the docker group.
gpasswd -a <user> docker
Creating a new machine
# ip class must be different than your local network ip # i.e: local network = 192.168.0.1 # docker machine ip should be something like 192.168.50.1/24 docker-machine create --virtualbox-hostonly-cidr <ip> -d virtualbox <machine-name>
To tell Docker to talk to that machine you need to run the following command:
eval "$(docker-machine env <machine-name>)"
Starting and Stopping machines
docker-machine stop <machine-name> docker-machine start <machine-name>
To use Docker Compose you need to create a file called docker-compose.yml in the root folder of your project.
Here is an example of such file:
docker-compose.yml postgres: container_name: my_psql_container restart: always image: paintedfox/postgresql volumes: - /my/local/filesystem/some-dir:/data ports: - "127.0.0.1:5432:5432"
This file is telling Docker Compose to run a container using the paintedfox/postgresql image and to attach the container’s /data folder to /my/local/filesystem/some-dir folder in our local filesystem. It is also telling the container to export the port 5432.
Note: Each container has its own set of parameters and configurations, this is just an example.
Then you can start the environment described by the docker-compose.yml file by running the following command:
docker-compose up -d
And you can stop the environment by running:
Docker Basic commands
Running an Arch linux container
- -t assigns a pseudo-tty or terminal to the container
- -i allow to make an interactive connection by grabbing the standard in (STDIN) of the container.
- -d to run the container as daemon
docker run -t -i base/archlinux /bin/bash
Checking running containers
Reading container logs
To get the container name see ‘Checking running containers’
- -f makes the container logs to act like ‘tail -f’
docker logs <container_name>
Start / Stop running containers
docker start <container_name> docker stop <container_name>
Checking docker client commands
Checking command help
docker <command> --help
Inspecting docker container info
docker inspect <container_name>
docker rm <container_name>
docker pull <image_name>
docker search <term>