======
Docker
======
`Docker Command Line Reference `_
Docker Commands
===============
Get Information about Docker Environment
``docker info``
Show Docker Images built and downloaded
``docker images``
Download Built Image from Repository
``docker pull ubuntu``
List Running Containers
``docker ps``
List All Containers
``docker ps -a``
Start Container from a Built Image
``docker run ubuntu``
Start Container with Interactive Shell
``docker run -i -t ubuntu /bin/bash``
Detach from container but keep it running: ctrl+p ctrl+q
Start a Stopped Container
``docker start ``
Stop a Running Container
``docker stop ``
Restart Container
``docker restart ``
Kill a Running Container
``docker kill ``
Commit a Container Container
``docker commit ``
Docker Run
----------
Run a docker image
Run a docker image, interactively with a tty
``docker run -i -t ubuntu /bin/bash``
-i interactive
-t tty
Detach with ctrl+p ctrl+q
Bind docker to listen on address/socket
-H
Get Container Reference
``JOB=$(docker run -d -p 4444 ubuntu:12.10 /bin/nc -l 4444)``
MySQL
=====
Starting a MySQL Docker Container with a name and pre-set password
``docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag``
Remotely link to the MySQL Container
``docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql``
Connect to MySQL via MySQL Client:
``docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'``
Access Container
``docker exec -it some-mysql bash``
The MySQL Server log is available through Docker's container log:
``docker logs some-mysql``
Customising MySQL
-----------------
Customise through the MySQL Command Line:
``docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci``
Use a custom MySQL.cnf
``docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag``
Container Initilisation
When the container is started any ``.sh`` and ``.sql`` files in ``/docker-entrypoint-initdb.d`` are executed automtically.
Data Storage
Mount a local disk
``docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag``
Docker Flow
===========
Create a Dockerfile
vi Dockerfile
Build the Image, from the current directory
docker build .
docker build --label tex --tag tex .
Run the image
docker run --name tex -it
docker exec -it POSTest bash
http://training.docker.com/introduction-to-docker
https://blog.jessfraz.com/post/docker-containers-on-the-desktop/
Docker Compose
--------------
Docker compose is build collections of Docker containers.
Docker compose mult be installed (it comes bundles in the docker toolbox on OSX)
From within the Project folder, containing a docker-compose.yml file, run: `docker-compose up -d`
==================== ======================================
Command
==================== ======================================
docker-compose up -d Start container collection, and detach
docker-compose up Start containers, and view logs
docker-compose down Shutdown containers, destroy data
==================== ======================================
.. code-block:: bash
:caption: View attached volumes
:name: View attached volumes
$ docker volume ls
DRIVER VOLUME NAME
local mypos_app_log
local mypos_db_data
local mypos_db_init
local mypos_dblog
local mypos_mypos
local mypos_oslog
Inspect an attached volume for details:
.. code-block:: bash
:caption: Inspect attached volume
:name: Inspect attached volume
docker volume inspect mypos_db_data
[
{
"Name": "mypos_db_data",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/mypos_db_data/_data",
"Labels": null,
"Scope": "local"
}
]
The location of files on OSX isn't clear, use absolute paths and not mount points.