Начало работы с Docker

Содержание
Введение
Проверить версию + info
Без sudo
run: Запуск контейнера
ps -a: Список всех контейнеров и сетей
images
pull: Скачать образ
Скачать определённую версию образа
Репозиторий образов hub.docker.com
Включение, выключение и удаление контейнеров
logs
system prune: удалить всё
Держать контейнер активным
Похожие статьи

Введение

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации.

Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux -систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.

Изначально использовал возможности LXC, с 2015 года применял собственную библиотеку, абстрагирующую виртуализационные возможности ядра Linux — libcontainer.

С появлением Open Container Initiative начался переход от монолитной к модульной архитектуре.

Разрабатывается и поддерживается одноимённой компанией-стартапом, распространяется в двух редакциях — общественной (Community Edition) по лицензии Apache 2.0 и для организаций (Enterprise Edition) по проприетарной лицензии. Написан на языке Go .

Инструкция по работе с Docker от Beget.com

Проверить версию

docker version

Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:23:10 2020 OS/Arch: windows/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:29:16 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683

docker info

Client: Debug Mode: false Server: Containers: 1 Running: 1 Paused: 0 Stopped: 0 Images: 18 Server Version: 19.03.8 Storage Driver: overlay2 Backing Filesystem: <unknown> Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 4.19.76-linuxkit Operating System: Docker Desktop OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 1.945GiB Name: docker-desktop ID: FBED:2SXW:VNQJ:PHNT:WYBQ:UICB:BJIW:4IMX:TCRW:3TJT:75VR:LISO Docker Root Dir: /var/lib/docker Debug Mode: true File Descriptors: 56 Goroutines: 68 System Time: 2020-07-14T19:48:22.671351094Z EventsListeners: 4 Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false Product License: Community Engine

Без sudo

Чтобы не писать sudo каждый раз выполните следующие команды

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

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

Запуск контейнеров в Docker осуществляется командой run

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

docker run hello-world

Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/

Сперва Docker искал образ hello-world на моём компьютере, когда не нашёл - скачал с репозитория и запустил.

Чтобы получить список всех контейнеров выполните docker ps -a.

-a выводит также незапущенные в данный момент контейнеры

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 85375f0f0e5e hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago elated_meninsky 33efc448ad6c docker101tutorial "/docker-entrypoint.…" 9 hours ago Up 9 hours 0.0.0.0:80->80/tcp docker-tutorial

Документация

Чтобы получить список всех сетей

docker network ls

NETWORK ID NAME DRIVER SCOPE edc9e216b1c9 bridge bridge local d2a6e70e6f02 host host local 2fe64119957a jenkins_nginx_mkdocs_jenkins bridge local 74bc210e5fd6 jenkins_nginx_mkdocs_net3 bridge local 56d1516faeda none null local

Подключить контейнер к сети

docker network connect [OPTIONS] NETWORK CONTAINER

docker images

Список образов верхнего уровня, их теги, размеры и репозитории можно получить выполнив

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE andreyolegovichru/docker101tutorial latest dd2e76a16950 9 hours ago 26.8MB docker101tutorial latest dd2e76a16950 9 hours ago 26.8MB <none> <none> f5578f194936 9 hours ago 123MB <none> <none> 409d2b2d3c0b 9 hours ago 110MB <none> <none> c26bbf7dc236 9 hours ago 224MB python alpine fbfb63e3c6bb 17 hours ago 80.3MB nginx alpine ecd67fe340f9 4 days ago 21.6MB node 12-alpine 057fa4cc38c2 2 weeks ago 89.3MB hello-world latest bf756fb1ae65 6 months ago 13.3kB

Документация

Pull: скачивание образов

С помощью команды pull можно скачивать образы не запуская их.

Скачать образ с Ubuntu

docker pull ubuntu

Using default tag: latest latest: Pulling from library/ubuntu 692c352adcf2: Pull complete 97058a342707: Pull complete 2821b8e766f4: Pull complete 4e643cc37772: Pull complete Digest: sha256:55cd38b70425947db71112eb5dddfa3aa3e3ce307754a3df2269069d2278ce47 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest

Проверить обновились ли образы

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE andreyolegovichru/docker101tutorial latest dd2e76a16950 19 hours ago 26.8MB docker101tutorial latest dd2e76a16950 19 hours ago 26.8MB <none> <none> f5578f194936 19 hours ago 123MB <none> <none> 409d2b2d3c0b 19 hours ago 110MB <none> <none> c26bbf7dc236 19 hours ago 224MB python alpine fbfb63e3c6bb 27 hours ago 80.3MB nginx alpine ecd67fe340f9 4 days ago 21.6MB ubuntu latest adafef2e596e 8 days ago 73.9MB node 12-alpine 057fa4cc38c2 2 weeks ago 89.3MB hello-world latest bf756fb1ae65 6 months ago 13.3kB

Если Вам нужен не последний образ а какая-то определённая версия - укажите её после двоеточия.

Например, если нужна Ubuntu 14.04

docker pull ubuntu:14.04

Удалить образ можно командой rmi

docker rmi ubuntu:14.04

Можно удалять не по имени, а с помощью IMAGE ID, например, если я хочу удалить образ hello-world IMAGE ID которого bf756fb1ae65

docker rmi bf756fb1ae65

Репозиторий образов hub.docker.com

Изучить список доступных образов можно на сайте hub.docker.com

Нужно нажать на кнопку Explore в верхнем меню hub.docker.com/search

Установка Docker в Windows 10 изображение с сайта www.eth1.ru

Список выглядит следующим оригинальным образом:

Установка Docker в Windows 10 изображение с сайта www.eth1.ru

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

У официальных образов названия указаны просто: debian , python , php и так далее. Это называется «Top Level Image»

Если источник не подтверждён, например, если я сделаю какой-то образ, например приложение для сайта TopBicycle.ru то имя будет выглядеть так: andreyolegovich/topbicycle-ru

То есть сперва имя автора, затем имя образа. Не все компании верифицируют образы. Например, софт для нагрузочного тестирования Yandex Tank выложен как direvius/yandex-tank

Изображение баннера

Включение, выключение и удаление контейнеров

Например когда контейнер находится в состоянии Exited - его можно запустить командой start.

В целом все команды интуитивно понятны.

docker start имя_контейнера
docker stop имя_контейнера
docker restart имя_контейнера
docker rm имя_контейнера

Можно удалить по id или только по его начальным символам

Выйти из контейнера можно нажав одновременно

CTRL + P + Q

logs

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

docker logs имя_контейнера
docker log id_контейнера

Очистить всё

Чтобы удалить все образы, остановленные контейнеры, докер сети и даже кэш выполните

docker system prune

WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cache Are you sure you want to continue? [y/N]

y

Держать контейнер активным

Если ваш контейнер успешно запускается и сразу же закрывается можно добавить в Dockerfile следующую команду

CMD tail -f /dev/null

В docker-compose.yml это выглядит как

command: tail -F /dev/null

Это похоже на костыль, поэтому как только мне попадётся на глаза нормальный способ - добавлю его сюда.

Похожие статьи
Основы
Переключить engine (Linux ↔ Windows)
Видеоуроки

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: