====== 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.