Понимание концепций вокруг изображений и контейнеров Docker имеет решающее значение для всех, начинающихся в облачных местах. Независимо от того, если вы находитесь в разработке, DevOps или управление программами (или любая другая техническая роль:). Как только вы поймете основы Docker, вам будет намного легче понять такие вещи, как Kubernetes, сервисные сетки и практически любой другой облачный инструмент. Вы можете думать об этом руководстве как о первом практическом руководстве по облачным родным.
Что такое Docker?
Контейнеры Docker были сделаны популярной компанией под названием Docker. Как концепция, контейнеры не новы. Контейнеры существовали в Linux более 10 лет. Это был докер, который сделал их более популярными.
Идея контейнеров состоит в том, чтобы разделить операционную систему в некотором смысле, чтобы вы могли надежно запускать несколько приложений. Функции Linux, которые сделали возможными, являются Пространства имен и CGROUPS. Короче говоря, с помощью пространств имен вы можете нарезать различные компоненты операционной системы и создавать изолированное рабочее пространство. CGROUPS позволяет мелкозернистый контроль над ресурсами. Например. Это предотвращает использование всего контейнера для использования всех ресурсов.
В чем разница между виртуальными машинами (VMS) и контейнерами?
Вы можете эмулировать определенную аппаратную систему, используя кусок программного обеспечения, который работает на физических компьютерах (гипервизор). A Гипервизор используется для создания и запуска виртуальных машин. Он находится между компьютерным оборудованием и виртуальной машиной. Каждая виртуальная машина запускает свою гостевую операционную систему и имеет свои двоичные файлы, приложения и т. Д. Виртуальные изображения, как правило, огромны с точки зрения размера и имеют большой след памяти.
С другой стороны, контейнеры работают непосредственно в верхней части операционной системы хоста. Они делятся операционной системой, а ядро, а аппаратное обеспечение не виртуализированный.
Контейнеры более легкие по сравнению с виртуальными машинами. Они не требуют гипервизора, который приводит к более быстрому времени запуска. Время запуска контейнера обычно измеряется за считанные секунды или меньше, где запуск виртуальной машины измеряется за считанные минуты.
Контейнеры, изображения и как их создать?
Прежде чем вы сможете «запустить» или «создать» контейнер, вам нужно его создать. Как и в случае с виртуальными машинами — для запуска виртуальной машины, вы должны создать изображение ISO виртуальной машины.
A Docker Image это шаблон только для чтения, который содержит инструкции о том, как создать или запустить контейнер. Изображение Docker создается из Dockerfile это выглядит так:
FROM ubuntu:18.04 WORKDIR /app COPY hello.sh /app RUN chmod +x hello.sh RUN apt-get update RUN apt-get install curl -y CMD ["./hello.sh"]
В большинстве случаев ваши изображения будут основаны на существующих изображениях Docker. В приведенном выше Dockerfile мы основываем изображение с существующего изображения, называемого Ubuntu: 18.04, которое представляет Ubuntu 18.04.
Остальные инструкции в Dockerfile делают следующие:
- Установка рабочего каталога (обратите внимание, что это рабочий каталог внутри изображения, а не на вашем хост -компьютере)
- Копирование
Привет .sh
Файл с хоста компьютера в/приложение
папка внутри изображения - Запуск пары команд
- Использование CMD для установки команды по умолчанию для контейнера — то есть это то, что мы хотим выполнить, когда запускаем контейнер
Используя Dockerfile, как приведенный выше, мы можем создать изображение Docker. Изображение Docker — это коллекция слоев (одна команда в слое на изображении). Слои сложены один на другой, и все они только чтения, за исключением самого верхнего, писательского слоя.
Вы можете думать о изображениях Docker как о шаблонах и контейнерах как о экземплярах этих шаблонов. Когда вы запускаете контейнер, вы создаете экземпляр изображения Docker с записью подлежащего документу. Любые изменения, которые внесены в бегущий контейнер и внесены на писательский слой. Например, если вы запускаете приложение внутри контейнера, который записывает в файл, этот файл хранится на написанном уровне. Здесь нужно запомнить, что все, что вы вносите в писательский слой, когда ваш контейнер работает, будет потеряно после остановки контейнера.
Такие функции, как тома можно использовать для хранения данных за пределами работающего контейнера. При запуске контейнера вы можете указать и установить эти объемы для использования внутри контейнера. В случае остановки контейнера данные останутся, поскольку он не является частью контейнера.
Наименование изображений
Все изображения Docker ссылаются их именами. Имя изображения состоит из 3 частей: имя репозитория, имя изображения и тег изображения. Тег изображения (или версия) может быть опущен, однако, любое изображение без тега получает тег по умолчанию, называемый Последний
Анкет Это всегда хорошая практика, чтобы всегда использовать теги изображений и никогда Полагаться и не использовать Последний
ярлык.
Вы можете хранить изображения Docker на своем компьютере. Если вы хотите поделиться ими и сделать их доступными для других, вам придется загрузить (или push ) изображения на Docker Registry.
Позже в статье мы будем использовать изображение под названием Альпийский: 3.10.3
Анкет Обратите внимание, как имя изображения состоит только из двух частей. Это потому, что это официальное изображение в центре Docker. Есть коллекция официальных изображений, которые все называются подобными — без репозитория. Вы можете Узнайте больше на официальных изображениях здесь Анкет
Docker Registry
Реестр Docker — это место, где вы можете загружать и хранить изображения Docker. Каждый облачный провайдер также предлагает реестр Docker или изображений в качестве управляемого сервиса. Вы также можете запустить и провести свой собственный реестр или использовать бесплатный реестр, такой как Docker Hub Анкет Реестры могут быть публичный или частный. Общественный реестр позволяет кому -либо вытащить или загружать изображение, в то время как для частного реестра вам необходимо аутентифицировать.
Общие сценарии
С помощью основных понятий давайте посмотрим на пару общих сценариев, с которыми вы столкнетесь при работе с Docker.
Построить и толкать
Строительница Docker относится к акту принятия Dockerfile, A построить контекст (Папка с вашим кодом или файлами, которые вы хотите включить в изображение) и Имя изображения, и использование Docker CLI для сборка картинка. Результатом этого действия является изображение Docker.
После того, как у вас будет встроенное изображение (или существующее изображение), вы можете push изображение в реестре Docker. Нажатие — это просто загрузка изображения.
Используя Docker CLI, команда для создания изображения будет выглядеть так:
docker build -t myrepository/imagename:0.1.0 .
-t
Флаг используется для предоставления имени изображения и Анкет
В конце концов, как вы предоставляете контекст сборки. DOT просто означает, что мы хотим, чтобы текущая папка была контекстом сборки. Тем не менее, ваш контекст сборки может быть другой папкой.
Какой смысл в контексте сборки?
Давайте возьмем следующую инструкцию из Dockerfile выше:
COPY hello.sh /app
Эта инструкция говорит Docker CLI, чтобы скопировать Привет .sh
Файл с хоста на /приложение
Папка внутри изображения. Но как Docker CLI узнает, где этот файл? Ну, вот где контекст сборки вступает в игру, и он говорит Docker искать Привет .sh
Файл в контексте сборки.
Чтобы подтолкнуть изображение в реестр, вам нужно убедиться, что вы сначала вошли в свой реестр, а затем вы можете запустить Docker Push MyRepository/ImageName: 0.1.0
Тянуть и бежать
Когда изображение находится в реестре, вы можете использовать тянуть Команда загрузить изображение из реестра. Вы предоставляете название изображения, которое вы хотите вытащить, и Docker CLI идет в реестр и загружает изображение на вашу локальную машину.
Команда, чтобы вытащить изображение с помощью Docker CLI, похожа на команду push:
docker pull myrepository/imagename:0.1.0
Наконец, вы можете запустить изображение Docker или создать из него контейнер. Обратите внимание, что вам не нужно строить изображение, нажмите его и тянуть, чтобы запустить. Если вы не хотите выдвигать изображение в реестр, вам не нужно. Вы все еще можете использовать команду Run для запуска изображения.
Второе примечание: если вы хотите запустить изображение, вам также не нужно его тянуть. Если вы попытаетесь запустить изображение, которое не существует на вашем компьютере (то есть вы еще не вытащили его), Docker CLI достаточно умна, чтобы сначала вытянуть изображение, а затем запустить его.
Команда Docker Run имеет множество вариантов, которые вы можете пройти, чтобы управлять тем, как выполняется контейнер, если он обнажает какие-либо порты на хосту, приносят любые объемы, вы также можете пройти в переменных среды больше.
Пример команды Docker Run может выглядеть так:
docker run --name mycontainername -p 5000:8080 myrepository/imagename:0.1.0
Обратите внимание, что в вышеупомянутой команде мы называем контейнер (MyContainerName), однако это не требуется. Если вы не предоставите имя, Docker придумает для вас умное, случайное имя: Интересная_tharp
, Strange_hypatia
В Practicle_morse
, и так далее. \ Docker использует список ученых и известных хакеров, чтобы придумать имена контейнеров. Вы можете проверить список, который они используют Здесь Анкет Обратите внимание, что ваш контейнер никогда не будет назван Boring_wozniak
Как Стив Возняк не скучен:)
Docker на практике
С базовой терминологией и концепциями, давайте испастям руки и попробуем Docker! В рамках этого раздела вы установите CLI Docker, создадите Docker Hub Учетная запись (если у вас его еще нет), и попробуйте разные команды Docker CLI.
Установка Docker Desktop
Docker Desktop для Mac и Windows — это коллекция инструментов, которые облегчают работу с Docker. Он содержит двигатель Docker, клиент CLI и кучу других инструментов.
- Если вы на Mac, Скачать Docker Desktop для Mac отсюда
- Если вы в Windows, Скачать Docker Desktop для Windows отсюда
- Если вы на Linux (Ubuntu), Следуйте инструкциям здесь
Создание учетной записи Hub Docker
Вам понадобится учетная запись Docker Hub, чтобы выдвинуть изображения в реестр публичных докеров. Вы можете Зарегистрируйтесь и создайте свою учетную запись Docker Hub на https://hub.docker.com Анкет
После того, как вы вписаетесь, вы можете создать разные Репозитории — Имя репозитория — это значение, которое предшествует имени изображения Docker. Например, один из моих репозиториев называется Учитесь .cloudnative. Полное имя для изображения под названием Привет-Web с тегом 0.1.0 будет LearnCloudnative/Hello-Web: 0.1.0.
Когда вы завершили установку Docker, откройте терминал и запустите версия Docker
Команда:
$ 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:21:11 2020 OS/Arch: darwin/amd64 Experimental: true 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: true containerd: Version: v1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
Вывод команды должен быть похож на вывод выше.
Dockerfile и другие файлы
Создайте пустую папку где -то на вашем компьютере и файл с именем Dockerfile
со следующим содержимым:
FROM alpine:3.10.3 WORKDIR /app COPY hello.sh /app RUN chmod +x hello.sh RUN apk update RUN apk add curl CMD ["./hello.sh"]
Этот DockerFile копирует файл с именем Привет .sh
На изображение делает его исполняемым файлом, а затем запускает обновление APK и APK добавить Curl и, наконец, устанавливает hello.sh в качестве команды для выполнения, когда контейнер запускается.
Что такое APK? APK — это инструмент, используемый для управляемого программного обеспечения на Alpine.
Создать Привет .sh
файл в той же папке, что и DockerFile:
#!/bin/sh echo "Hello Docker!"
С помощью этой настройки мы можем начать изучать слои Docker.
Слои Docker
В этом разделе вы построите свое первое изображение Docker, используете Docker CLI, чтобы осмотреть слои.
Мы собираемся начать с создания изображения Docker под названием Docker-Layers
Анкет Вы можете запустить следующую команду из той же папки, которую находится ваш DockerFile (и Hello.sh File) в:
docker build -t docker-layers:0.1.0 .
На выводе команды вы увидите, как контекст сборки отправляется в Docker Daemon, изображение получается, а затем выполняется каждая инструкция из DockerFile. Последняя строка в выводе должна сказать, что ваше изображение (Docker-слои: 0,1,0) было построено и помечено.
Я не упомянул тегирование изображения Раньше — вы можете думать об этом как о переименовании изображения или создании нового изображения, которое ссылается на старое. Вы можете пометить изображение MyimageName: 0,1,0 например, как Что -то из: 2.0.0 запустив Docker Tag
командование Команда создает другое изображение с новым именем, которое ссылается на исходное изображение. Обратите внимание, что Docker не создает еще одну копию изображения.
Вы можете запустить Docker Images Чтобы получить список изображений, которые находятся на вашей машине.
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker-layers 0.1.0 6a5b8912d27f 5 minutes ago 8.31MB alpine 3.10.3 965ea09ff2eb 6 months ago 5.55MB
Если вы не установили и не использовали Docker раньше, на вашей машине будет два изображения. Docker-Layers Изображение, которое вы только что построили, и альпийский Изображение, которое используется в качестве базового изображения в Dockerfile.
Давайте также попробуем запустить контейнер, чтобы получить «Hello Docker!» выход:
$ docker run docker-layers:0.1.0 Hello Docker!
Докер использует слои и различия между слоями при создании изображения. Это приводит к более быстрым последующим сборкам. Если вы снова создадите изображение, вы заметите, что время, необходимое для завершения команды, значительно меньше, чем в первый раз. (Да, за исключением времени, которое потребовалось для загрузки изображения с первой попытки, последующие сборки все еще быстрее).
На моей машине вторая сборка Docker заняла меньше секунды:
$ time docker build -t docker-layers:0.1.0 . real 0m0.501s user 0m0.088s sys 0m0.061s
Давайте посмотрим на слои, созданные для изображения:
$ docker history docker-layers:0.1.0 IMAGE CREATED CREATED BY SIZE COMMENT 6a5b8912d27f 4 minutes ago /bin/sh -c #(nop) CMD ["./hello.sh"] 0B 3030475d0a23 4 minutes ago /bin/sh -c apk add curl 1.34MB 81cd9a8738f0 4 minutes ago /bin/sh -c apk update 1.42MB e68bc418551f 4 minutes ago /bin/sh -c chmod +x hello.sh 30B 14d207dc283c 4 minutes ago /bin/sh -c #(nop) COPY file:c2c91b54b63f7c0e… 30B 4628741a4e97 4 minutes ago /bin/sh -c #(nop) WORKDIR /app 0B 965ea09ff2eb 6 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B6 months ago /bin/sh -c #(nop) ADD file:fe1f09249227e2da2… 5.55MB
Обратите внимание, что для APK добавить Curl и обновление APK командование Мы можем сделать это более эффективным, объединив две команды в одну команду внутри Dockerfile.
Откройте Dockerfile и объедините две линии, подобные этим:
FROM alpine:3.10.3 WORKDIR /app COPY hello.sh /app RUN chmod +x hello.sh RUN apk update && apk add curl CMD ["./hello.sh"]
Давайте снова восстановим изображение и проверим слои:
$ docker build -t docker-layers:0.1.0 . ... $ docker history docker-layers:0.1.0 IMAGE CREATED CREATED BY SIZE COMMENT 8470cb0b2e17 19 seconds ago /bin/sh -c #(nop) CMD ["./hello.sh"] 0B ed2a17906a01 19 seconds ago /bin/sh -c apk update && apk add curl 2.76MB ...
На этот раз у нас есть один слой с командами APK. Затем мы добавим еще один файл в изображение, чтобы увидеть, как оно влияет на слои.
Создайте файл с названием hello.txt с помощью простого сообщения:
echo "Hello!" >> hello.txt
Далее, давайте также обновим DockerFile, чтобы включить этот файл в изображение:
FROM alpine:3.10.3 WORKDIR /app COPY hello.sh /app RUN chmod +x hello.sh COPY hello.txt /app RUN apk update && apk add curl CMD ["./hello.sh"]
Я копирую новый файл до Запуск apk командование Если вы снова восстановите изображение ( Docker Build -t Docker -Layers
) Вы заметите, что apk Команды были выполнены снова и не использовались повторно. Причиной этого является то, как слои сложен. Новый слой — это разница между предыдущим, и так как мы добавили команду копирования, прежде чем запустить апк Мы невидили предыдущий кеш.
Хорошей новостью является то, что мы можем сделать это лучше. Если мы перенесем apk Команда сразу после строки с инструкцией Наш второй слой на изображении будет apk слой. Давайте посмотрим на это на практике.
Переместить Запустить APK Update && apk добавить Curl
командование прямо под первой строкой в DockerFile:
FROM alpine:3.10.3 RUN apk update && apk add curl WORKDIR /app COPY hello.sh /app RUN chmod +x hello.sh COPY hello.txt /app CMD ["./hello.sh"]
Нам нужно снова восстановить изображение, чтобы создать слои. Если вы осмотрите слои, вы заметите apk Команда сейчас ближе к нижней части стека. Давайте докажем, что команда не выполнит снова, если мы добавим другой файл и перестроим изображение.
Создать bye.txt
файл:
echo "Bye!" >> bye.txt
Добавьте команду копирования в нижнюю часть Dockerfile:
FROM alpine:3.10.3 RUN apk update && apk add curl WORKDIR /app COPY hello.sh /app RUN chmod +x hello.sh COPY hello.txt /app COPY bye.txt /app CMD ["./hello.sh"]
Если вы восстановите изображение на этот раз, вы заметите, что оно значительно быстрее. Причина в том, что Docker повторно использует слой, и он больше не заработал команды APK.
Понимание того, как работают слои, важно, поскольку вы можете значительно увеличить скорость строительства вашего докера.
Нажатие и помечение изображений Docker
Вам нужно войти в реестр, чтобы натолкнуть изображения Docker, в противном случае команда push потерпит неудачу. Вы можете войти в реестр через рабочий стол Docker или использовать Docker Login команда из терминала.
После того, как вы вошли в систему, вы почти готовы натолкнуть изображение. В предыдущем разделе мы назвали изображение как Docker -Layers: 0.1.0 — без использования имени репозитория. Чтобы подтолкнуть реестр, требуется имя репозитория. Имя репозитория — это имя, которое вы использовали, когда зарегистрировались в концентраторе Docker.
Мы могли бы снова восстановить изображение и дать полное имя с репозиторием, однако быстрее использовать тег Команда и предоставьте новое имя для изображения. Заменить [your-repository] с именем вашего репозитория:
docker tag docker-layers:0.1.0 [your-repository]/docker-layers:0.1.0
Если команда преуспела, вы не увидите никакого вывода. Обратите внимание, что мы могли бы использовать команду TAG, чтобы обновить другие части имени изображения.
Теперь вы можете пойти дальше и подтолкнуть изображение в реестр, работая:
docker push [your-repository]/docker-layers:0.1.0
Docker выдвигает изображение в реестр, и любой может его вытащить или загрузить!
Вытягивание изображений Docker и запуска контейнеров
Вытягивание или загрузка изображения из реестра может быть сделано с помощью тянуть командование Давай потянум альпийский Изображение, например:
$ docker pull alpine Using default tag: latest latest: Pulling from library/alpine cbdbe7a5bc2a: Pull complete Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54 Status: Downloaded newer image for alpine:latest docker.io/library/alpine:latest
Поскольку мы не предоставили определенную версию для изображения, Docker вытащил изображение с : Последний ярлык.
Вы также можете использовать запустить командование напрямую, и Docker вытащит для нас изображение:
docker run alpine
Запуск изображения с помощью вышеупомянутой команды запустит контейнер, но оно выйдет сразу. Вместо этого мы можем сделать приглашение на оболочку в контейнер, чтобы сохранить контейнер в живых. Нам нужно предоставить -i и -t флаги, чтобы сделать контейнер интерактивным и распределить псевдо. Наконец, нам также необходимо предоставить команду, которую мы хотим запустить, когда контейнер запускается. Поскольку мы хотим оболочку, мы можем запустить оболочку — /bin/sh. \ Давайте попробуем запустить команду, которая дает нам оболочку внутри альпийского контейнера:
docker run -it alpine /bin/sh
Вы заметите, что подсказка изменилась, и если вы запустите команду ENV, вы увидите переменные среды из контейнера, а не на вашем хост -машине.
$ docker run -it alpine /bin/sh / # env HOSTNAME=32a19aa0c35f SHLVL=1 HOME=/root TERM=xterm PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ / #
Чтобы выйти из контейнера, вы можете ввести выход. Каждый работающий контейнер также получает идентификатор — вы можете проверить этот идентификатор, открыв отдельное окно терминала и запустив Docker PS
Команда:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 32a19aa0c35f alpine "/bin/sh" 2 minutes ago Up 2 minutes sharp_sanderson
Далее вы можете убить контейнер этим идентификатором: Docker Kill 32A19AA0C35F
Анкет Когда контейнер умирает, вы увидите, что подсказка в другом окне терминала исчезает.
Картирование портов
Еще одна довольно распространенная задача — запуск контейнера локально и отображение контейнера в порт на локальной машине. Например, вы можете запустить службу внутри контейнера, но для доступа к этой службе вам нужно будет сопоставить контейнерный порт на порт вашего хоста машины, чтобы вы могли получить к нему доступ.
Давайте использовать простое приложение Node.js, которое доступно в LearnCloudnative/Helloworld: 0.1.0
изображение.
Если вы просто запустите изображение, вы не сможете получить доступ к приложению, работающему внутри него, так как порт, который приложение прислушивается в контейнере, не отображается на вашем компьютере.
Чтобы отобразить контейнерный порт с портом хоста, вы можете использовать -p
Флаг при запуске контейнера, как это:
docker run -p 8080:3000 learncloudnative/helloworld:0.1.0
Как только изображение будет загружено, вы увидите сообщение «Прослушивание на порту 3000». Это сообщение из приложения, работающего внутри контейнера, который прослушивает на порту 3000. С флагом -p мы сопоставляем контейнерный порт 3000 с хостом портом 8080.
Если вы откроете свой браузер и перейдите к http://localhost: 8080 Вы получите «Hello World!» страница интернета. Вы также заметите любые журналы, которые контейнер пишет на выводе терминала. Чтобы прекратить запуск контейнера, вы можете нажать Ctrl+c. Иногда отображение портов также называется «разоблачением» порта или «публикацией» его. DockerFile может иметь инструкцию под названием Разоблачить
Анкет Комбинация ссылки на «разоблачение портов» и инструкцию «разоблачить» может сбить с толку. Цель Разоблачить
Инструкция состоит в том, чтобы документировать, какой порт является приложением, работающим внутри контейнера, прослушивающегося. Например, Dockerfile для Helloworld
Изображение должно иметь Разоблачить 3000
Инструкция, так как это порт, на котором приложение слушает.
Итак, даже если у вас есть Разоблачить
Инструкция в вашем DockerFile, вам все еще нужно использовать -p
флаг. Вы можете использовать другой флаг ( -p
), и в этом случае Docker отображает порт из Разоблачить
инструкция к случайному порту на хосте.
В этом случае команда запуска выглядит так:
docker run -P learncloudnative/helloworld:0.1.0
Обратите внимание на отсутствие фактических номеров портов. Контейнер начинается так же, как и раньше, но теперь, если вы перечислите все работающие контейнеры, вы заметите случайный порт на хосте ( 32768
) отображается на порт контейнера ( 3000
):
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 94cfd042df18 learncloudnative/helloworld:0.1.0 "npm start" 9 seconds ago Up 8 seconds 0.0.0.0:32768->3000/tcp hardcore_northcutt
Вывод
В этой статье я попытался объяснить, что такое Docker и чем он отличается от виртуальных машин, а также некоторых общих концепций и терминологии, с которыми вы столкнетесь при работе или чтении о Docker. Я надеюсь, что учебное пособие в конце помогло проиллюстрировать некоторые концепции на практике.
Есть много других функций Docker, и эта статья просто царапает поверхность, но это должно дать вам достаточно информации, чтобы вы начали. В одном из предстоящих постов я объясню, как использовать тома Docker и Docker Compose.
Если вы заинтересованы, чтобы погрузиться глубже и увидеть более практические примеры, вам следует проверить Руководство по шлюзам, которые я написал Анкет Это руководство объясняет основы, которые вы должны знать о шлюзах и прокси, и показывает, как запустить прокси, используя Docker Compose в практическом разделе.
Как вам это руководство понравилось? Я хотел бы услышать ваши отзывы — оставьте комментарий ниже или Обратитесь в Twitter или Электронная почта !
Оригинал: «https://dev.to/peterj/beginners-guide-to-docker-4pkk»