Docker¶
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 <JOB>
- Stop a Running Container
docker stop <JOB>
- Restart Container
docker restart <JOB>
- Kill a Running Container
docker kill <JOB>
- Commit a Container Container
docker commit <container> <some_name>
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 |
$ 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:
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.