Команды для работы с Docker

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы, например LXC. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любой Linux-системе с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.
Сегодня мы поговорим о том как управлять Docker и какие есть основные команды для этого.  Большинство команд вы можете узнать в интерактивном справочнике https://www.docker.com/tryit/

Образы

# Скачать образ ubuntu с тегом latest

$ docker pull ubuntu

# То же самое, но указанное явно

$ docker pull ubuntu:latest

# Скачать все теги образа ubuntu

$ docker pull --all-tags ubuntu

# Получить список образов, которые есть на локальной машине

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               9cbaf023786c        4 days ago          192.8 MB

# Просмотр информации об образе
# Пример вывода — https://gist.github.com/bessarabov/4afa32c1ff3c958d4a9f

$ docker inspect bessarabov/sample_nginx

# Удалить образ ubuntu:latest

$ docker rmi ubuntu

# Создать образ (в текущей папке должен находится файл Dockerfile)
# Эта команда создаст образ bessarabov/sample_nginx с тегом latest

$ docker build --tag bessarabov/sample_nginx .

# Создать новый тег на основе уще существующего образа

$ docker tag bessarabov/sample_nginx:latest 192.168.59.103:5000/bessarabov/sample_nginx:latest
$ docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
bessarabov/sample_nginx                       latest              b2d112ab861d        18 hours ago        231.6 MB
192.168.59.103:5000/bessarabov/sample_nginx   latest              b2d112ab861d        18 hours ago        231.6 MB

Работа с контейнерами

# Запустить контенейр в интерактивном режиме
# (ключи -i -t можно объединить в -it)

$ docker run -i -t ubuntu:14.04 /bin/bash
[email protected]:/#

# Получить список контенеров
# (если не указать ключ -a, то будет показаны только работающие контенеры)

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
7aacffdfb531        ubuntu:14.04        "/bin/bash"         3 seconds ago       Exited (0) 1 seconds ago                       silly_hopper

# Удалить контенер (можно удалить только остановленный контейнер).
# Команде можно передать как CONTAINER ID, так и NAME

docker rm 7aa (писать полный ID необязательно)

# Запустить контейнер и автоматически удалить его после того как он
# остановится

$ docker run --rm -it ubuntu:14.04 /bin/bash

# Запустить контейнер и указать ему имя ‘sample’. Если явно не указывать
# имя, то оно будет создано автоматически, типа ‘silly_hopper’

$ docker run -it --name sample ubuntu:14.04 /bin/bash

# Запустить контейнер в виде демона, сделать чтобы порт 8000 на хост
# машине соответствовал 80 порту в контейнере

$ docker run --detach --publish 8000:80 --name sample bessarabov/sample_nginx

# Вот как выглядит инфа об этом контейнере:

$ docker ps -a
CONTAINER ID        IMAGE                            COMMAND                CREATED             STATUS              PORTS                  NAMES
5124abdf830b        bessarabov/sample_nginx:latest   "/bin/sh -c 'nginx -   3 seconds ago       Up 2 seconds        0.0.0.0:8000->80/tcp   sample

# Запуск контейнера, без его удаления. Следует помнить, что когда вы используете команду docker run, контейнер создается заново стирая все изменения, которые были произведены в нем. Для запуска контейнера не с нуля используется команда

$ docker start sample

# Для того чтобы остановить контейнер

$ docker stop sample

# После того как контейнер остановлен его можно удалить (и он больше не будет показываться в `docker ps -a`:

$ docker rm sample

# Удалить все контейнеры

$ docker rm $(docker ps -a -q)

# Удалить все образы

$ docker rmi $(docker images -q)

#  Если вы хотите сохранить изменения (допустим, в образ ubuntu вы установили какие-то новые пакеты, поменяли ядро и т.п.) в образе, то необходимо использовать команду commit.

$ docker ps -l (узнаем ID необходимого контейнера)
$ docker commit 698 ubuntu/newpackage

boot2docker

# Выяснить на каком ip адресе работает виртуальная машина с докером

$ boot2docker ip
The VM's Host only interface IP address is: 192.168.59.103

# Строка для добавления в .bash_profile, которая выставляет правильные
# переменные окружения
eval $(boot2docker shellinit 2> /dev/null)

Демон Docker

# Используйте следующие команды для перезапуска, старта или остановки daemon docker

$ sudo service docker restart
$ sudo service docker start
$ sudo service docker stop

# В случае ошибок можно посмотреть состояние docker

$ docker -d

Обновление Docker

Для инсталлляции новой версии docker используйте команду  wget с ключом N:

$ wget -N https://get.docker.com/ | sh

Технология docker достаточно молодая, но как мне кажется весьма перспективная и интересная, я и сам до конца еще всего не знаю и не до конца понимаю, поэтому оставляйте Ваши замечания, наблюдения, уточнения.
Подробнее o Docker можно прочитать здесь http://rus-linux.net/MyLDP/vm/docker/docker-tutorial.html

Образы и контейнеры Docker в картинках