Использование контейнеров Docker

Docker-контейнер — это лёгкая, портативная, самодостаточная программная среда, используемая для запуска приложений.

Docker-контейнеры упаковывают приложение и все его зависимости, включая библиотеки, файлы конфигурации, системные инструменты и т. д., в стандартизированный пакет, позволяя приложению единообразно работать где угодно.

Контейнеры — это виртуализация на уровне операционной системы. Им не нужно запускать полноценную операционную систему, что делает запуск и работу более эффективными.

Связь между образами и контейнерами

  • Образ:Статический шаблон для контейнеров, содержащий все зависимости и файлы, необходимые для запуска приложения. Образы неизменяемы.
  • Контейнер:Работающий экземпляр образа, имеющий собственную файловую систему, процессы, сеть и т. д., и он динамичен. Контейнер запускается из образа и остаётся изменяемым во время выполнения.


Клиент Docker

Клиент Docker — это инструмент командной строки, который взаимодействует с демоном Docker.

Клиент docker очень прост; мы можем напрямую ввести команду docker, чтобы увидеть все параметры команд клиента Docker.

example@example:~# docker

Вы можете использовать командуdocker command --helpЧтобы глубже понять, как использовать указанную команду Docker.

Например, если мы хотим просмотретьdocker statsподробное использование команд:

example@example:~# docker stats --help

Ниже приведены распространённые команды клиента Docker:

КомандаОсобенностиПример
docker runЗапустить новый контейнер и выполнить командуdocker run -d ubuntu
docker psПоказать список запущенных в данный момент контейнеровdocker ps
docker ps -aПоказать все контейнеры (включая остановленные контейнеры)docker ps -a
docker buildИспользуйте Dockerfile для сборки образа.docker build -t my-image .
docker imagesПоказать все образы, хранящиеся локальноdocker images
docker pullЗагрузить образ из реестра Dockerdocker pull ubuntu
docker pushОтправить образ в реестр Dockerdocker push my-image
docker execВыполнить команду в работающем контейнереdocker exec -it container_name bash
docker stopОстановить один или несколько контейнеровdocker stop container_name
docker startЗапустить остановленные контейнерыdocker start container_name
docker restartПерезапустить контейнерdocker restart container_name
docker rmУдалить один или несколько контейнеровdocker rm container_name
docker rmiУдалить один или несколько образовdocker rmi my-image
docker logsПросмотреть логи контейнераdocker logs container_name
docker inspectПолучить подробную информацию о контейнере или образеdocker inspect container_name
docker exec -itВойти в интерактивный терминал контейнераdocker exec -it container_name /bin/bash
docker network lsПоказать список всех сетей Dockerdocker network ls
docker volume lsПоказать список всех томов Dockerdocker volume ls
docker-compose upЗапустить многоконтейнерное приложение (изdocker-compose.ymlфайла)docker-compose up
docker-compose downОстановить и удалить контейнер, созданныйdocker-composeконтейнеры, сети и т. д., которые запущеныdocker-compose down
docker infoОтобразить подробную информацию о системе Dockerdocker info
docker versionОтобразить информацию о версии клиента и демона Dockerdocker version
docker statsОтображать использование ресурсов контейнерами в реальном времениdocker stats
docker loginВойти в реестр Dockerdocker login
docker logoutВыйти из реестра Dockerdocker logout

Описания общих параметров:

  • -d: Запустить контейнер в фоновом режиме, напримерdocker run -d ubuntu。
  • -it: Запустить контейнер в интерактивном терминале, напримерdocker exec -it container_name bash。
  • -t:Назначить тег образу, напримерdocker build -t my-image .。

Использование Docker

Получить образ

Если у нас нет образа ubuntu, мы можем использовать команду docker pull, чтобы загрузить образ ubuntu:

$ docker pull ubuntu

Запустить контейнер

Следующая команда запускает контейнер с использованием образа ubuntu и параметром для входа в контейнер в командном режиме:

$ docker run -it ubuntu /bin/bash

Описание параметра:

  • -iИнтерактивная работа.
  • -t: Терминал.
  • ubuntu: образ ubuntu.
  • /bin/bash: часть после имени образа — это команда. Здесь нам нужна интерактивная оболочка, поэтому мы используем /bin/bash.

Чтобы выйти из терминала, просто введитеexit:

root@ed09e4490c57:/# exit

Запуск остановленного контейнера

Команды для просмотра всех контейнеров следующие:

$ docker ps -a

Нажмите на изображение, чтобы посмотреть увеличенную версию:

Используйте docker start, чтобы запустить остановленный контейнер:

$ docker start b750bbbcfd88 

Запуск в фоновом режиме

В большинстве сценариев мы хотим, чтобы служба Docker работала в фоновом режиме. Мы можем-dуказать режим работы контейнера.

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

Нажмите на изображение, чтобы посмотреть увеличенную версию:

Примечание:добавленный-dпараметр не входит в контейнер по умолчанию; чтобы войти в контейнер, нужно использовать команду docker exec(Это будет описано ниже.)

Остановка контейнера

Команда для остановки контейнера следующая:

$ docker stop <容器 ID>

Остановленный контейнер можно перезапустить с помощью docker restart:

$ docker restart <容器 ID>

Вход в контейнер

При использовании-dПри запуске контейнера с параметром контейнер работает в фоновом режиме. Если в этот момент нужно войти в контейнер, можно использовать следующую команду для входа:

  • docker attach: Позволяет взаимодействовать со стандартным вводом (stdin), выводом (stdout) и стандартным потоком ошибок (stderr) контейнера.

  • docker exec:Рекомендуется использовать команду docker exec, потому что эта команда завершает терминал контейнера, но не останавливает контейнер.

команда attach

Пример использования команды docker attach:

$ docker attach 1e560fca3906 

Примечание:Если вы выйдете из этого контейнера, это приведёт к остановке контейнера.

команда exec

Пример использования команды docker exec:

docker exec -it 243c32535da7 /bin/bash

Примечание:Если вы выйдете из этого контейнера, контейнер не остановится, поэтому рекомендуется всем использоватьdocker exec。

Для получения дополнительных сведений о параметрах используйтеdocker exec --helpдля просмотра с помощью команды.

Экспорт и импорт контейнеров

Экспорт контейнера

Если вы хотите экспортировать локальный контейнер, можно использовать командуdocker export.

$ docker export 1e560fca3906 > ubuntu.tar

Экспортируйте снимок контейнера 1e560fca3906 в локальный файл ubuntu.tar.

Это экспортирует снимок контейнера в локальный файл.

Импорт снимка контейнера

Вы можете использовать docker import, чтобы снова импортировать файл снимка контейнера как образ. В следующем примере файл снимка ubuntu.tar импортируется в образ test/ubuntu:v1:

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1

Кроме того, вы также можете импортировать, указав URL или каталог, например:

$ docker import http://example.com/exampleimage.tgz example/imagerepo

Удаление контейнера

Чтобы удалить контейнер, используйте командуdocker rm:

$ docker rm -f 1e560fca3906

В следующем примере можно очистить все контейнеры в завершённом состоянии.

$ docker container prune

Запуск веб-приложения

Контейнеры, которые мы запускали ранее, не имели никакого особого назначения.

Далее давайте попробуем использовать Docker для запуска веб-приложения.

Мы запустим приложение Python Flask внутри контейнера Docker, чтобы запустить веб-приложение.

example@example:~# docker pull training/webapp  # 载入镜像
example@example:~# docker run -d -P training/webapp python app.py

Описание параметра:

  • -d:Запустите контейнер в фоновом режиме.

  • -P:Сопоставьте сетевые порты, используемые внутри контейнера, случайным образом с используемым нами хостом.


Просмотреть контейнер веб-приложения

Используйте docker ps, чтобы просмотреть контейнеры, которые мы запустили:

example@example:~#  docker ps
CONTAINER ID        IMAGE               COMMAND             ...        PORTS                 
d3d5e39ed9d3        training/webapp     "python app.py"     ...        0.0.0.0:32769->5000/tcp

Здесь у нас есть дополнительная информация о портах.

PORTS
0.0.0.0:32769->5000/tcp

Docker открыл порт 5000 (порт Python Flask по умолчанию) и сопоставил его с портом 32769 на хосте.

На этом этапе мы можем получить доступ к ВЕБ-приложению через браузер.

Мы также можем использовать параметр -p, чтобы задать другие порты:

example@example:~$ docker run -d -p 5000:5000 training/webapp python app.py

docker psПросмотр запущенных контейнеров

example@example:~#  docker ps
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar
d3d5e39ed9d3        training/webapp     ...        0.0.0.0:32769->5000/tcp   xenodochial_hoov

Внутренний порт 5000 контейнера сопоставлен с портом 5000 на нашем локальном хосте.


Сокращение для сетевого порта

С помощьюdocker psЭта команда позволяет просмотреть сопоставления портов контейнера.dockerТакже предоставляет другую сокращённую командуdocker port, используйтеdocker portчтобы просмотреть порт хоста, на который отображается определённый порт указанного контейнера (по ID или имени).

Созданный нами выше контейнер веб-приложения имеет IDbf08b7f2cd89с именемwizardly_chandrasekhar。

Я могу использоватьdocker port bf08b7f2cd89илиdocker port wizardly_chandrasekharдля просмотра состояния сопоставления портов контейнера.

example@example:~$ docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000
example@example:~$ docker port wizardly_chandrasekhar
5000/tcp -> 0.0.0.0:5000

Просмотр журналов веб-приложения

docker logs [ID или имя] позволяет просмотреть стандартный вывод изнутри контейнера.

example@example:~$ docker logs -f bf08b7f2cd89
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.239.1 - - [09/May/2016 16:30:37] "GET / HTTP/1.1" 200 -
192.168.239.1 - - [09/May/2016 16:30:37] "GET /favicon.ico HTTP/1.1" 404 -

-f:Пустьdocker logsподобно использованиюtail -fтак же выводит стандартный вывод изнутри контейнера.

Из вышесказанного видно, что приложение использует порт 5000 и можно просмотреть журналы доступа приложения.


Просмотр процессов контейнера веб-приложения

Мы также можем использовать docker top для просмотра процессов, выполняющихся внутри контейнера

example@example:~$ docker top wizardly_chandrasekhar
UID     PID         PPID          ...       TIME                CMD
root    23245       23228         ...       00:00:00            python app.py

Инспектирование веб-приложения

Использованиеdocker inspectЧтобы просмотреть низкоуровневую информацию Docker. Он возвращает JSON-файл, содержащий сведения о конфигурации и состоянии контейнера Docker.

example@example:~$ docker inspect wizardly_chandrasekhar
[
    {
        "Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
        "Created": "2018-09-17T01:41:26.174228707Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23245,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-09-17T01:41:26.494185806Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
......

Остановить контейнер веб-приложения

example@example:~$ docker stop wizardly_chandrasekhar   
wizardly_chandrasekhar

Перезапустить контейнер веб-приложения

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

example@example:~$ docker start wizardly_chandrasekhar
wizardly_chandrasekhar

docker ps -l выводит информацию о последнем созданном контейнере:

#  docker ps -l 
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar

Для работающих контейнеров можно использоватьdocker restartкоманду для перезапуска.


Удалить контейнер веб-приложения

Мы можем использовать команду docker rm для удаления ненужных контейнеров.

example@example:~$ docker rm wizardly_chandrasekhar  
wizardly_chandrasekhar

При удалении контейнера контейнер должен быть в остановленном состоянии, иначе будет выдана следующая ошибка.

example@example:~$ docker rm wizardly_chandrasekhar
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove
Другие расширения