Docker. Управление образами и контейнерами

Категория: Linux

Справка по командам управления образами и контейнерами Docker.

Быстро запустить временный контейнер:

docker run --rm -it -v $(pwd):/app -w /app --name some-name node:8.17.0-alpine sh
docker run --rm -it -v $(pwd):/usr/share/nginx/html:ro -w /usr/share/nginx/html --name nginx-proxy -p 8080:80 nginx bash

Термины

Image (Образ) - это статический билд на основе определенной OS (дистрибутива). На основе 1 образа можно создавать разные контейнеры.

Container (Контейнер) - это кастомизированный инстанс образа. Создается на основе Dockerfile.

Volume (Том) - предпочтительный способ для постоянного хранения/обмена данными между контейнером и хост-машиной.

Права на запуск docker

Чтобы запускать Docker контейнеры под своим пользователем без sudo, нужно добавиться в группу docker и перлогиниться:

sudo usermod -aG docker $USER

Сервис Docker

Управление сервисом Docker'а:

sudo service docker start|stop|restart|status
sudo restart docker # алиас

Образы

Список доступных образов:

docker images

Скачать образ (или весь репозиторий) из официального регистра (хранилища образов):

docker pull ubuntu:14.04

Посмотреть информацию об образе:

docker inspect ubuntu

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

docker rmi IMAGE_ID

Сохранить состояние контейнера как образ:

docker commit CONTAINER_ID IMAGE_NAME

Контейнеры

Внимание!

После запуска Docker контейнера сервисы/демоны (как-то SSH, Supervisor и прочие) не будут запускаться автоматически! Я потратил несколько часов на отладку ошибки: "ssh_exchange_identification: read: Connection reset by peer", при попытке подключиться к контейнеру по SSH. А оказалось, что всего-то не запускался демон sshd. Вы должны будете вручную запускать нужные демоны или супервизор после старта контейнера:

docker exec -it CONTAINER_ID bash
docker exec CONTAINER_ID bash -c "service ssh start"

Список всех контейнеров (запущенных и остановленных):

docker ps -a

Удалить контейнер(ы):

docker rm CONTAINER_ID CONTAINER_ID

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

docker rm $(docker ps -aq)

Создать и запустить Docker контейнер c Ubuntu 14.04 в интерактивном режиме (открыть shell этого контейнера):

docker run -it ubuntu bash
docker run --rm -it -v $(pwd):/app -w /app --name some-name node:8.17.0-alpine sh
docker run [опции] образ [команда]
-i  Интерактивный режим, держим STDIN открытым
-t  Allocate/creates a pseudo-TTY that attaches stdin and stdout
--name  Имя контейнера вместо ID
-w  Указать рабочую директорию (--workdir)
-e  Установить переменную окружения в контейнере
-u  Пользователь:группа под которым должен быть запущен контейнер
-v  Смонтировать в контейнер файл или каталог хост-системы
-p  Пробросить порт(ы) контейнера - <порт хост-системы>:<порт контейнера> (--publish=[])
--entrypoint  Заменить дефолтную команду из ENTRYPOINT файла Dockerfile
Примечание

Чтобы отсоединить TTY без остановки контейнера нажмите Ctr+P + Ctrl+Q.

Создать и запустить Docker контейнер в режиме демона с пробросом SSH порта:

docker run -itd -p 127.0.0.1:221:22 ubuntu

Создать и запустить контейнер с последующим удалением этого контейнера после остановки (полезно для отладки):

docker run -i -t --rm ubuntu bash

Запустить остановленный контейнер интерактивно:

docker start -i CONTAINER_ID

Подключиться к демонизированному контейнеру:

docker attach CONTAINER_ID

Команды Docker

Usage: docker [OPTIONS] COMMAND [arg...]
       docker daemon [ --help | ... ]
       docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

  --config=~/.docker                 Location of client config files
  -D, --debug=false                  Enable debug mode
  --disable-legacy-registry=false    Do not contact legacy registries
  -H, --host=[]                      Daemon socket(s) to connect to
  -h, --help=false                   Print usage
  -l, --log-level=info               Set the logging level
  --tls=false                        Use TLS; implied by --tlsverify
  --tlscacert=~/.docker/ca.pem       Trust certs signed only by this CA
  --tlscert=~/.docker/cert.pem       Path to TLS certificate file
  --tlskey=~/.docker/key.pem         Path to TLS key file
  --tlsverify=false                  Use TLS and verify the remote
  -v, --version=false                Print version information and quit

Commands:
    attach    Attach to a running container
    build     Build an image from a Dockerfile
    commit    Create a new image from a container's changes
    cp        Copy files/folders between a container and the local filesystem
    create    Create a new container
    diff      Inspect changes on a container's filesystem
    events    Get real time events from the server
    exec      Run a command in a running container
    export    Export a container's filesystem as a tar archive
    history   Show the history of an image
    images    List images
    import    Import the contents from a tarball to create a filesystem image
    info      Display system-wide information
    inspect   Return low-level information on a container or image
    kill      Kill a running container
    load      Load an image from a tar archive or STDIN
    login     Register or log in to a Docker registry
    logout    Log out from a Docker registry
    logs      Fetch the logs of a container
    network   Manage Docker networks
    pause     Pause all processes within a container
    port      List port mappings or a specific mapping for the CONTAINER
    ps        List containers
    pull      Pull an image or a repository from a registry
    push      Push an image or a repository to a registry
    rename    Rename a container
    restart   Restart a container
    rm        Remove one or more containers
    rmi       Remove one or more images
    run       Run a command in a new container
    save      Save an image(s) to a tar archive
    search    Search the Docker Hub for images
    start     Start one or more stopped containers
    stats     Display a live stream of container(s) resource usage statistics
    stop      Stop a running container
    tag       Tag an image into a repository
    top       Display the running processes of a container
    unpause   Unpause all processes within a container
    volume    Manage Docker volumes
    wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.


#docker

категория: Linux