Использование контейнеров 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 | Загрузить образ из реестра Docker | docker pull ubuntu |
docker push | Отправить образ в реестр Docker | docker 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 | Показать список всех сетей Docker | docker network ls |
docker volume ls | Показать список всех томов Docker | docker volume ls |
docker-compose up | Запустить многоконтейнерное приложение (изdocker-compose.ymlфайла) | docker-compose up |
docker-compose down | Остановить и удалить контейнер, созданныйdocker-composeконтейнеры, сети и т. д., которые запущены | docker-compose down |
docker info | Отобразить подробную информацию о системе Docker | docker info |
docker version | Отобразить информацию о версии клиента и демона Docker | docker version |
docker stats | Отображать использование ресурсов контейнерами в реальном времени | docker stats |
docker login | Войти в реестр Docker | docker login |
docker logout | Выйти из реестра Docker | docker 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Другие расширения




