Docker. Создаем контейнеры. Основные команды.
Содержание
Пора более детально разобраться что же это такое docker container и docker image. В предыдущей статье Docker. Начало. был небольшой экскурс в эти понятия, теперь же давайте будем творить это все своими руками и разбираться уже на примерах.
Версия докера
Что бы узнать больше деталей об установленном докере, а так же, заодно, убедиться что вы удачно установили docker – выполните команду:
docker version
В ответ вы увидите блок с данными об установленной версии докера и масса других данных. Выглядеть это должно примерно таким образом:
Client: Docker Engine - Community Version: 19.03.5 API version: 1.40 Go version: go1.12.12 Git commit: 633a0ea Built: Wed Nov 13 07:22:34 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.5 API version: 1.40 (minimum version 1.12) Go version: go1.12.12 Git commit: 633a0ea Built: Wed Nov 13 07:29:19 2019 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0
Если ответ в консоли и близко не похож на данный пример – вам нужно сделать все возможное что бы это исправить. Скорее всего у вас просто не установлен docker. Вам нужно зайти на сайт докера и установить его. Эта процедура не должна оказаться сложной, потому не будем ее описывать тут. Пока что не будем.
Будем надеяться, что процесс установки прошел успешно, и перейдем к повествованию.
Docker Image
Много задач в программировании возникают опять и снова. Для того что бы не изобретать свой велосипед – существуют готовые решения. Для создания контейнера с ubuntu, php, nginx и другой ерундой – существуют готовые образы, которые вы можете сразу использовать. Хранятся они на https://hub.docker.com. Зайдите на этот сайт немедленно и просмотрите что там есть в наличии. А дальше продолжим наше обучение docker.
Зашли? Посмотрели? Молодцы!
Теперь давайте попробуем что-то использовать с этого хаба. Да. Я не шучу.
Есть тестовый образ docker/whalesay. Для этого найдите поле поиска на докер-хабе и вставьте это название. В итоге вы должны оказаться на этой страницу образа.
Сомневаюсь, что этот image когда-либо пригодится вам в жизни и выручит в критичный момент, подставит плечо и разрешит поплакаться в жилетку – но он неплох для того что бы начать обучение с него.
На странице вы видите описание этого образа. Так же там написано как его использовать. Чуть ниже описан Dockerfile. Про него чуть позже. Вкратце – это образ для данного примера. В двух словах: в нем мы видим первую строчку – FROM ubuntu – это значит что образ у нас строится на основе ОС ubuntu. Далее идут какие-то команды. То есть мы запускаем эти команды на донной ОС.
Давайте создадим уже наш контейнер. Для этого выполните в консоли следующую команду
docker run docker/whalesay cowsay boo
В итоге в консоли вы должны увидеть такой рисунок
_____ < boo > ----- \ \ \ ## . ## ## ## == ## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\______/
Давайте разберёмся что вот это вот произошло только что.
Мы выполнили команду docker run – первая часть нашей строки. Данная команда запускает контейнер из образа. Сразу за ней указали имя образа docker/whalesay, который собираемся запустить. После него мы выполняем команду cowsay boo. Последнее слово вы можете изменить на любое другое и посмотреть что произойдет. Или же, например, выполните команду с параметром и посмотрите что получится
docker run docker/whalesay cowsay -f koala
Когда мы указали имя образа – докер пошел на докераб и поискал данное название. Затем он стянул образ на вашу машину и запустил. Стягивание (pull) образа происходит один раз, дальше он берется с вашей машины.
Таким образом мы запустили контейнер созданный по образу и подобию Dockerfile. Перейдем теперь к обзору базовых команд, включая данную.
Docker. Основные команды.
Список запущеных контейнеров
Понятно, что контейнеров может быть запущено больше одного. Для того, что бы просмотреть список запущенных вами контейнеров выполните следующую команду
docker ps
Если вы только начали знакомиться с докером – скорее всего у вас этот список будет пуст. “Мы же запускали контейнер???”, – скажете вы. Но дело в том, что вы его запустили, он выполнился и сразу же вышел. Он не работает сейчас. Он свое отработал. Не расстраивайтесь.
Получить список всех контейнеров очень просто, для этого нужно добавить один параметр в конец данной команды
docker ps -a
Теперь вы должны видеть запущенные контейнеры из нашего прошлого примера. Нашли их?
Рассмотрим, собственно, несколько значений. Здесь есть такие поля, как CONTAINER ID – уникальный id контейнера, IMAGE – образ который используется. Вы должны видеть docker/whalesay в этом списке. Так же здесь можно узнать когда контейнер был создан и его статус, как долго он работает. Или когда был остановлен. Так же имена контейнеров. Их можно назначить самому при запуске или же докер сам придумает уникальные читабельные названия каждому из них.
Остановка контейнера
Некоторые контейнеры вам захочется остановить. До этого нам это и в голову не приходило, так как контейнеры сами же останавливались сразу после запуска. Но не все же контейнеры такие. Для того что бы остановить контейнер нужно выполнить команду
docker stop {containerName}
Вместо {containerName} нужно написать id контейнера либо же его имя, которые можно получить в предыдущей команде что мы рассмотрели.
Сейчас мы все попробуем.
Давайте запустим какой-то контейнер. Например контейнер с nginx. Для этого выполним команду
docker run -d nginx
Теперь наш nginx запущен. Параметр -d означает что мы хотим запустить контейнер в фоновом режиме. Мы далее более подробно рассмотрим команду запуска контейнера. Сейчас вам остается только принять и запустить то что я предложил.
Теперь посмотрите список запущенных контейнеров, команду для этого вы уже знаете.
docker ps
Вы должны увидеть запущенный контейнер с nginx. Теперь он запущен и вы можете с ним работать. Давайте его остановим, что бы он не чувствовал себя таким могущественным и независимым. В списке запущенных контейнеров найдите его id или имя, думаю с эти проблем не будет. Теперь выполните команду остановки контейнера, предварительно подставив нужный id или name. В моем случае команда выглядит так:
docker stop 3b229be74de2
Был контейнер и нет контейнера. Вот так вот мы его остановили в одну строку. Выполните команду для вывода списка запущенных контейнеров – и вы там его не увидите. Выполните команду для списка всех контейнеров – там он будет показываться остановленным.
Удаление контейнера
Иногда остановки контейнера вам может показаться недостаточно. В этом случае вы можете удалить контейнер. Для этого достаточно простой понятной команды
docker rm {containerName}
Здесь, как и в прошлом примере, {containerName} – это уникальный id или же имя контейнера. Вы можете прописать несколько контейнеров через пробел что бы удалить больше одного. Думаю это не будет проблемой? Но будте осторожны! Вы наткнетесь на ошибку если будете удалять запущенный контейнер. Потому для начала не помешает его остановить предыдущей командой. Если хочется удалить запущенный контейнер – многое вам скажут – перехочется. Я. же просто укажу пальцем на вот эту команду:
docker rm --force {containerName}
Волшебное слово force порой творит чудеса. Но не переусердствуйте с ним.
Очень неплохая команда, что бы удалить все остановленные контейнеры
docker rm $(docker ps -a -q)
Здесь, в скобках, немного знакомая вам команда, которая вернет id всех контейнеров и передаст их в команду docker rm. В итоге будут удалены все остановленные контейнеры, а те что запущены – будут проигнорированы.
Список доступных образов
docker images
Здесь все понятно. Команда выводит спинок всех образов.
Это образы, которые вы стянули на свою машину. Здесь вы найдете информацию о репозитории, размере образа, его id, когда он создан и тэге. Пока что этой информации будет достаточно для данной команды.
Удаление образов
Подобно удалению контейнеров мы можем удалять и образы. Команда очень похожа. Давайте глянем на нее.
docker rmi {image}
Также вместо {image} вы должны ввести id либо же репозиторий. Попробуйте удалить какой-то из образов.
Получилось?
Пойдем тогда дальше.
Скачать образ
Помните как мы запускали контейнер? Тогда мы использовали команду docker run. Дело в том, что когда на нашей машине не оказывалось нужного образа – докер искал и скачивал его с хаба. Вы это могли проследить если читали сообщения в консоли при запуске.
Однако, иногда у нас может возникнуть непреодолимое желание загрузить образ, при этом не запускать его. Для этого используется команда
docker pull {image}
Соответственно вместо {image} вы пишите нужный образ.
Попробуйте спулить golang, для примера
docker pull golang
Как видите, ничего страшного не произошло.
Запуск контейнера
Давайте теперь вернемся и рассмотрим команду для запуска контейнера.
Как мы помним, она выглядит следующим образом
docker run {image}
Рассмотрим пару нюансов, которые нам могут пригодиться
Для того что бы запустить контейнер в фоновом режиме (что бы команда не висела в консоле), можно добавить один маленький параметр
docker run -d nginx
Попробуйте запустить с ним и без него. Разница налицо. Параметр -d – это сокращение от слова Detached. Думаю, с остановкой и удалением данного контейнера не должно возникнуть проблем, так как мы эти операции уже проводили с вами.
Давайте придадим нашему контейнеру блеска – назовем его по имени, что бы быстро его найти. Да и вообще, так мы проявим больше уважения.
docker run -d --name=nazovi_menia nginx
Теперь вы можете использовать это имя вместо id или дефолтного. Очень удобно ведь.
Здесь мы просмотрели базовое обращение с основными командами. На самом деле, у всех команд очень много опций – для этого откройте описание команды в официальной документации с детальным объяснением.
Какие команды вам нужно знать? Все. Это одни из базовых, которые будут использоваться регулярно.