Докер технологии контейнеризации — с земли в небо

Docker
Докер технологии контейнеризации — с земли в небо

0x00 запускает картинку

0x01 Технология контейнеризации

1.1 Историческая эволюция

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

1.1.1 Эпоха физических машин

В эпоху физических машин, когда наша программа разрабатывается, ее нужно развернуть на сервере, если проект небольшой, то его можно развернуть на одной машине, но развернуть проект с кластерной архитектурой затруднительно. .

Ограничения эпохи физических машин заключаются в основном в следующих моментах:

  • Развертывание очень медленноеНа каждом хосте необходимо установить операционную систему, среду, необходимую для соответствующих приложений, и различные конфигурации.
  • Высокая стоимостьЦена сервера очень высока.Говорят, что два сервера HP в нашем проекте стоят почти 100 000 юаней.
  • растрата ресурсовИногда вам нужно добавить сервер только для горизонтального масштабирования приложения, что слишком расточительно.
  • Сложно масштабировать и мигрироватьНапример, миграция репозитория кода, миграция базы данных и т. д. требует большого количества настроек.
  • В зависимости от оборудования

1.1.2 Эра виртуализации

Эпоха виртуализации имеет следующие характеристики:

  • несколько развертываний
  • пул ресурсов
  • Изоляция ресурсов
  • легко расширить
  • На виртуальной машине должна быть установлена ​​ОС

На каждой виртуальной машине должна быть установлена ​​операционная система, чтобы выполнять другие действия на виртуальной машине.

Монитор виртуальной машины (hypervisor) похож на пользователяПриложение работает на хост-ОС, такие как рабочая станция VMware, аппаратное обеспечение, предоставляемое этим продуктом виртуализации, например, мы устанавливаем на машину виртуальную машину Linux:

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

1.1.3 Эпоха контейнеризации

Виртуализация — это изоляция на уровне материальных ресурсов, поэтому контейнер можно рассматривать как изоляцию на уровне приложения.

Сценарии применения технологии контейнеризации:

  • Стандартизированный метод миграцииСреда разработки упакована для эксплуатации и обслуживания, и такую ​​же среду можно получить после расширения эксплуатации и обслуживания.
  • Единая конфигурация параметровПараметры, связанные с запуском программы, могут быть установлены при упаковке
  • Автоматическое развертываниеПроцесс восстановления изображения автоматизирован и не требует участия человека. В нашем проекте мы используем функцию CICD Gitlab для восприятия отправки кода и используем Docker для создания образов. Полная автоматизация.
  • Мониторинг кластера приложенийПредоставляет функцию мониторинга приложений для понимания текущего состояния кластера в режиме реального времени.
  • Коммуникационный мост между разработкой и эксплуатацией и обслуживаниемПоскольку стандартизированный метод развертывания среды может уменьшить проблемы, вызванные ненужными несоответствиями среды, мир становится намного чище, и программисты могут сосредоточиться на разработке!

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

2.1 Введение в Докер

Dockerпредставляет собой движок контейнера приложений с открытым исходным кодом, основанный наПерейти на языкРазработано и открыто по протоколу Apache2.0.

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

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

  • Движок контейнера приложений с открытым исходным кодом, разработанный на основе языка Go
  • Контейнер полностью использует механизм песочницы, а накладные расходы на контейнер чрезвычайно низки.
  • синоним технологии контейнеризации
  • Некоторые функции виртуализации
  • Стандартизированная упаковка приложений

2.2 Установите Docker под CentOS 7

Поскольку более 90% серверов являются системами Linux, мы устанавливаем Docker на виртуальную машину CentOS.Эти команды установки можно использовать в качестве руководств для справки.

  1. Установите базовый пакет
yum install -y yum-utils device-mapper-persistent-data lvm2

устройство-сопоставитель-постоянный и lvm2Установите пакет драйверов хранилища данных для хранилища данных

yum-utilsМонтажный комплект для упрощения установки

  1. Укажите источник установки
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum-utilsкоторый предоставилyum-config-managerУпрощенный инструмент для изменения источника установки yum

--add-repoУкажите источник установки

  1. Заранее кэшируйте информацию о пакете локально, чтобы повысить скорость поиска и установки программного обеспечения.
yum makecache fast
  1. Установите Docker Community Edition
yum -y install docker-ce
  1. запустить докер
service docker start

Выше приведены шаги установки докера, резюмированные следующим образом:

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

yum -y install docker-ce

service docker start
  1. Проверить установку Docker

docker -version

2.3 Извлечь образ докера

использоватьdocker pullВытащитьhello-worldЗеркало:

docker pull hello-world

использоватьdocker imagesПосмотрите в зеркало:

2.4 Запуск контейнера на основе образа

Идентификатор образа запуска Docker<:tag>Заказ

docker run hello-world

2.5 Настройка ускорения изображения

Терпеть не могу скорость загрузки образов с центрального склада докеров в отечественной сети.Можем ускорить через ускоритель изображений.

Очень удобно использовать сервис ускорения образов контейнеров Alibaba Cloud.

Войдите в Alibaba Cloud, найдите «Container Image Service» и найдите Image Accelerator:

2.6 Каталог установки Docker

Каталог установки Docker находится по адресуvar/lib/docker, зайди и посмотри:

cd /var/lib/docker && ll

Существуют такие каталоги, как изображения, контейнеры, тома и т. д., которые связаны с изображениями, контейнерами и т. д. Давайте рассмотрим эти важные концепции Docker.

2.7 Основные понятия

Эта диаграмма содержит важные понятия, такие как док-контейнеры, образы и хранилища.

Докер-клиент черезdocker runкоманда для запуска контейнера, Docker Server черезdocker daemonДемон проверяет, есть ли локально зеркало, и если нет, то переходит кдокер складбиблиотека черезdocker pullВытащите на локальный, затем выполнитеdocker runСоздайте контейнер.

docker daemonдемон,Управление образами и контейнерами.

2.7.1 Зеркало

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

2.7.2 Контейнеры

Это экземпляр образа, созданный Docker, а контейнеры изолированы друг от друга.

2.7.3 Склад

Репозиторий — это централизованное место для хранения изображений.

2.7.4 Объемы данных

Том данных — это набор файлов и папок на узле, которые можно совместно использовать и повторно использовать между контейнерами.

2.7.5 Сеть

Мост Docker виртуализируется хост-компьютером, а не реальным сетевым устройством, и внешняя сеть не может быть адресована. Это также означает, что контейнер не может быть доступен из внешней сети через прямой Container-IP.

0x03 Docker быстро развертывает Tomcat

  1. docker pull tomcat:8.5-jdk8-openjdk

:8.5-jdk8-openjdkУказывает тег изображения, если он не добавлен:8.5-jdk8-openjdkПоследняя вытягивается по умолчанию.

  1. docker run tomcat:8.5-jdk8-openjdk

Таким образом запускается контейнер tomcat. В настоящее время мы не можем получить к нему доступ через IP-адрес хост-машины. Нам нужно сопоставить порт контейнера и порт хост-машины.

стоп-контейнерdocker stop 3854be1d5f93(идентификатор контейнера), удалить контейнерdocker rm 3854be1d5f93, а затем начните следующим образом:

docker run -p 8090:8080 -d tomcat:8.5-jdk8-openjdk

Просто посетите еще раз.

Команда быстрого развертывания:

# 拉取镜像
docker pull 镜像名<:tags>

# 查看镜像列表
docker images

# 运行容器
docker run 镜像名<:tags>

# 查看正在运行的容器
docker ps

# 删除容器
docker rm <-f> 容器id

# 删除镜像
docker rmi <-f> 镜像名<:tags>

# 运行容器
docker run -p 8000:8080 -d 镜像名<:tags>

0x04 Внутренняя структура контейнера Docker

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

В качестве примера возьмем контейнер Tomcat, созданный выше:

Посмотреть идентификатор контейнера

docker ps -a

[root@basic ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                    PORTS                    NAMES
dd1a6b408cdf        hello-world               "/hello"            14 hours ago        Exited (0) 14 hours ago                            priceless_kapitsa
3854be1d5f93        tomcat:8.5-jdk8-openjdk   "catalina.sh run"   25 hours ago        Up 24 hours               0.0.0.0:8090->8080/tcp   awesome_solomon

Получите идентификатор контейнера tomcat как3854be1d5f93

в контейнер

docker exec [-it] 容器id 命令

  • execВыполнить команду в соответствующем контейнере
  • -itВыполнять команды в интерактивном режиме

Итак, зайдите внутрь контейнера tomcat и выполните:

docker exec -it 3854be1d5f93 /bin/bash

В интерактивном режиме войдите внутрь контейнера Tomcat и откройте терминал bash,

[root@basic ~]# docker exec -it 3854be1d5f93 /bin/bash
root@3854be1d5f93:/usr/local/tomcat#

автоматически размещается внутри контейнера/usr/local/tomcatкаталог, мы можем выполнить некоторые команды внутри контейнера.

выполнить команду скрипта

В контейнер Tomcat встроена небольшая ОС Linux, которая может выполнятьcat /proc/versionВзгляните на его версию для Linux:

root@3854be1d5f93:/usr/local/tomcat# cat /proc/version
Linux version 3.10.0-957.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 8 23:39:32 UTC 2018

Работа Tomcat зависит от среды Java, давайте посмотрим на версию Java внутри контейнера:

root@3854be1d5f93:/usr/local/tomcat# java -version
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)

0x05 Жизненный цикл контейнера

В жизненном цикле контейнера Docker в основном есть следующие состояния:

  • stopped
  • running
  • paused
  • deleted

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

Состояния жизненного цикла контейнера имеют соответствующие команды Docker.

  • docker createСоздать новый контейнер, не запуская его
  • docker runСоздайте новый контейнер и запустите
  • docker start/stop/restartЗапуск, остановка, перезапуск контейнеров
  • docker killУбить запущенные контейнеры.docker stop — изящный выход, отправьте несколько сигналов перед выходом, и внутреннее приложение докера выполнит некоторые приготовления перед выходом перед выходом;docker kill — это выход приложения напрямую.
  • docker rmудалить контейнер
  • docker pause/unpauseПриостановить или возобновить все процессы в контейнере

0x06 Dockerfile

Dockerfileявляется наиболее важным файлом, используемым для создания образа.Dockerfileфайл описания изображения:

  • Dockerfile — это файл, содержащийКоманды для объединения зеркалТекстовый документ
  • Docker автоматически генерирует образ шаг за шагом, читая инструкции в файле Dockerfile.

Стандартная команда сборки образа:

docker build -t 构建者/镜像名<:tags> Dockerfile目录

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

Создайте каталог myweb с файлом test.html в нем:

<h1>Hello,Dockerfile!<h1>

Докерфайл:

FROM xblzer/tomcat:8.5
MAINTAINER xblzer
WORKDIR /usr/local/tomcat/webapps
ADD myweb ./myweb

TIP: Здесь myweb и Dockerfile должны находиться в каталоге одного уровня.

Кроме того, этоxblzer/tomcat:8.5Базовый образ — это то, что я создал ранее. Также можно использовать официальную, но возможно, что ресурс официальной страницы (404) недоступен, это связано с тем, что директория webapps внутри зеркала пуста, но в ней есть директория webaaps.dist. скопируйте содержимое в webaaps.dist только в веб-приложениях.

Основные команды в Dockerfile:

FROM

  • ИЗ имя изображения<:>Сборка из базового образа
  • FROM scrashНе зависит ни от какого базового образа

LABEL & MAINTAINER

  • Описание изображения
  • пример:
MAINTAINER xblzer
LABEL version=1.0
LABEL description="行百里er"

WORKDIR

  • Установите рабочий каталог, который относится к рабочему каталогу внутри контейнера.Это необходимо для понимания внутренней структуры базового образа FROM.
  • попробуйте использовать абсолютные пути

Например, в только что созданном веб-изображении указанный рабочий каталог/usr/local/tomcat/webapps.

ADD & COPY

  • ADD и COPY — это команды для копирования файлов.
  • ADD также имеет функцию удаленного копирования файлов, аналогичную wget, которая используется реже.

ENV

  • Установить константы среды
  • Например:
ENV JAVA_HOME=/usr/local/java
RUN ${JAVA_HOME}/bin/java -jar test.jar

Соберите образ в соответствии с Dockerfile

Выполните в каталоге, где находится Dockerfile:

docker build -t xblzer/myweb:1.0 .

Обратите внимание, что последний ".".

[root@basic mydockerfile]# docker build -t xblzer/myweb:1.0 .
Sending build context to Docker daemon  3.584kB
Step 1/4 : FROM xblzer/tomcat:8.5
 ---> ad4eef1cdffc
Step 2/4 : MAINTAINER xblzer
 ---> Running in 00ff37cb7a66
Removing intermediate container 00ff37cb7a66
 ---> 6675a0a2b8be
Step 3/4 : WORKDIR /usr/local/tomcat/webapps
 ---> Running in c753825a9dc3
Removing intermediate container c753825a9dc3
 ---> cd5999c1d8ff
Step 4/4 : ADD myweb ./myweb
 ---> 9262ba119d14
Successfully built 9262ba119d14
Successfully tagged xblzer/myweb:1.0

После завершения сборки используйтеdocker imagesпосмотри:

[root@basic mydockerfile]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xblzer/myweb        1.0                 9262ba119d14        2 minutes ago       537MB
xblzer/tomcat       8.5                 ad4eef1cdffc        17 minutes ago      537MB
tomcat              8.5-jdk8-openjdk    5a5e790eb3eb        4 days ago          533MB
hello-world         latest              bf756fb1ae65        10 months ago       13.3kB

Образы, которые мы создаемxblzer/test-web:1.0появился в списке зеркал.

С образом, согласно традиционному методу работы Docker, естественноdocker runЗапустите контейнер:

docker run -d -p 8000:8080 xblzer/myweb:1.0

Затем посетите:http://192.168.2.110:8000/myweb/test.html

Это означает, что нет проблем с запуском контейнера из созданного нами образа!

0x07 Наслоение изображения

Давайте вернемся и посмотрим на шаги, которые я предпринял для создания myweb ранее:

Докерфайл:

FROM xblzer/tomcat:8.5
MAINTAINER xblzer
WORKDIR /usr/local/tomcat/webapps
ADD myweb ./myweb

Шаги во время сборки:

Step 1/4 : FROM xblzer/tomcat:8.5
 ---> ad4eef1cdffc
Step 2/4 : MAINTAINER xblzer
 ---> Running in 3bfecae6049d
Removing intermediate container 3bfecae6049d
 ---> 927a6dcf9639
Step 3/4 : WORKDIR /usr/local/tomcat/webapps
 ---> Running in e98ccfd0488c
Removing intermediate container e98ccfd0488c
 ---> a1dcd9b4885e
Step 4/4 : ADD myweb ./myweb
 ---> 16c0cb847216
Successfully built 16c0cb847216
Successfully tagged xblzer/myweb:1.0

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

Это временное изображение один за другим представляет собой наслоение изображения.

Давайте проверим.

Создайте Dockerfile:

FROM centos
RUN ["echo", "aaa"]
RUN ["echo", "bbb"]
RUN ["echo", "ccc"]
RUN ["echo", "ddd"]

Конструкция:

docker build -t xblzer/test-layer:1.0 .

Снова измените Dockerfile, чтобы создать образ версии 1.1:

FROM centos
RUN ["echo", "aaa"]
RUN ["echo", "not bbb!!"]
RUN ["echo", "not ccc!!!"]
RUN ["echo", "ddd"]

Конструкция:

docker build -t xblzer/test-layer:1.1 .

Как видите, шаги 1 и 2 используют предыдущий временный образ.

Мы используемdocker historyВзгляните на историю двух зеркал:

Первые два шага для версии 1.1 такие же, как первые два шага для зеркалирования версии 1.0.

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

Docker предоставляет нам большое удобство в развертывании приложений.Во ​​многих случаях приложение развертывается в контейнере Docker. Например, с помощью Docker можно развернуть как приложения, так и базы данных.

Итак, как в этом случае контейнер Docker приложения получает доступ к контейнеру Docker базы данных? Это включает в себясвязь между контейнерамивопрос.

Конечно, можно использовать виртуальный IP-адрес док-контейнера.Чтобы просмотреть IP-адрес док-контейнера, используйте следующую команду:

docker inspect 容器id

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

Решение Docker состоит в том, чтобы дать контейнеру имя (docker run --name),использоватьимя контейнераСвязь между контейнерами.

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

  • Связать односторонний доступ
  • Мостовой мост с двунаправленным доступом

Затем мы создаем два контейнера, чтобы поэкспериментировать со связью между контейнерами.

8.1 Создание контейнера

Создайте контейнер с именем web

docker run -d --name web tomcat:8.5-jdk8-openjdk

Создайте еще один контейнер с именем db

docker run -d -it --name db centos /bin/bash

а затем использоватьdocker inspect 容器idКоманда для просмотра виртуального IP-адреса двух контейнеров.

контейнер БД: 172.17.0.4

веб-контейнер: 172.17.0.3

Используйте виртуальный IP-адрес, чтобы войти в веб-контейнер и пропинговать контейнер БД:

Точно так же виртуальный IP-адрес веб-контейнера также можно пропинговать в контейнере db:

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

Как упоминалось ранее, мы обычно не используем виртуальные IP-адреса для связи, а используем имя контейнера, что требует указания, с каким контейнером осуществлять связь при создании контейнера.link.

использовать--linkСоздайте веб-контейнер и подключите его к контейнеру БД:

docker run -d --name web --link db tomcat:8.5-jdk8-openjdk

Затем войдите внутрь контейнера, прямоping dbподключить.

8.3 Мост двусторонней связи

использовать--linkМожет быть достигнута односторонняя связь между контейнерами,

Например, я не разрешил контейнеру db ссылаться на веб-контейнер, пропинговал сеть внутри контейнера db, чтобы увидеть:

Иногда нам нужно, чтобы два контейнера могли общаться друг с другом, что нам делать?

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

Docker предоставляет способ моста Bridge, так что группа Docker, привязанная к мосту, может общаться друг с другом.

8.3.1 Создание моста и привязка контейнера

1. Создайте мост

docker network create -d bridge my-bridge

2. Посмотреть мосты

docker network ls

3. Привязать контейнер к мосту

Привяжите контейнеры web и db к созданномуmy-bridgeМост:

# 先后执行
docker network connect my-bridge web
docker network connect my-bridge db

В это время вы можете пропинговать веб-контейнер, войдя в контейнер db:

При добавлении контейнера он также привязывается кmy-bridgeна мосту

docker run -d -it --name myapp centos /bin/bash
docker network connect my-bridge myapp

Войдите в контейнер myapp и подключите контейнеры web и db соответственно:

могут быть взаимосвязаны.

8.3.2 Принцип реализации моста

Всякий раз, когда создается мост, он устанавливаетвиртуальная сетевая карта,медведьшлюзэффект, поШлюз, образованный виртуальной сетевой картой, образует внутренний путь., пока есть контейнеры, привязанные к этой виртуальной сетевой карте, все они могут взаимодействовать друг с другом.

Однако виртуальная сетевая карта все-таки виртуальная, и IP-адрес тоже виртуальный.Если вы хотите общаться с внешним миром, вы также должныВыполните преобразование адресов с помощью физической сетевой карты хоста..

Пакеты данных, отправленные внутри контейнера, будут проходить трансляцию адресов через виртуальную сетевую карту и преобразовывать их в пакеты данных физической сетевой карты для связи с внешней сетью;

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

0x09 Обмен данными между контейнерами Docker

9.1 Зачем делиться данными

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

Только представьте, каждый раз, когда вы его запускаете, пропадают логи, картинки, файлы и т. д. Это неприемлемо, поэтому нужно указать директорию, реально существующую на хосте, и соответствующий путь внутри Docker-контейнера. .

Существует также сценарий, когда несколько контейнеров должны получить доступ к некоторым общим статическим страницам.Также можно поместить общие страницы в фиксированное место и позволить контейнеру монтировать каталог.

9.2 По настройке-vСмонтируйте каталог хоста

формат команды

docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名

Возьмите контейнер tomcat в качестве примера.

Внутри контейнера tomcat/usr/local/tomcat/webappsСопоставление каталога с хостом/usr/webappsкаталог, так что при доступе к страницам tomcat вы получите доступ к хосту/usr/webappsстраница ниже.

docker run -d -p 8001:8080 --name app1 -v /usr/webapps:/usr/local/tomcat/webapps xblzer/tomcat:8.5

на хосте/usr/webappsСоздать подapp-webкаталог и создайте новыйtest.html:

[root@basic webapps]# mkdir app-web
[root@basic webapps]# cd app-web/
[root@basic app-web]# vim test.html

html-контент:

<h1>111</h1>

Посетите в это время:http://192.168.2.110:8001/app-web/test.html:

Теперь давайте изменим/usr/webapps/app-web/test.html:

<h1>111</h1>
<h1>222 added</h1>

Не перезапуская докер-контейнер, зайдите еще раз:

Ниуби нет? Доступ к обновленным файлам без перезапуска контейнера Docker!

9.3 Прохождение--volumes-fromОбщая точка подключения контейнера

Другой способ смонтировать каталог — создать общий контейнер.

Создать общий контейнер

docker create --name commonpage -v /usr/webapps:/usr/local/tomcat/webapps xblzer/tomcat:8.5 /bin/true

/bin/true является заполнителем и не имеет реального значения.

Общая точка подключения контейнера

docker run -d -p 8002:8080 --volumes-from commonpage --name app2 xblzer/tomcat:8.5

Назначение общего контейнера — определить точку монтирования, а затем передать другие контейнеры.--volumes-from 共享容器名Чтобы получить тот же каталог монтирования, что и общий контейнер.

Преимущество этого в том, что если контейнеров много и директория монтирования меняется, то не нужно проходить каждый контейнер-vЧтобы изменить точку монтирования, вам нужно всего лишь изменить каталог монтирования общего контейнера.

Затем создайте контейнер app3:

docker run -d -p 8003:8080 --volumes-from commonpage --name app3 xblzer/tomcat:8.5

посетить в это времяhttp://192.168.2.110:8002/app-web/test.htmlа такжеhttp://192.168.2.110:8003/app-web/test.htmlОба могут получить доступ к странице test.html.

0x10 Docker Compose

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

  • Docker Compose — это инструмент развертывания нескольких контейнеров на одной машине, который может работать только на одном хосте.
  • Определите способ развертывания нескольких контейнеров через файл yml.
  • Docker Compose необходимо установить под Linux

способ установки:

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version

Однако хорошо известно, чтоKubernetesНа данный момент это самая популярная платформа для оркестровки контейнеров, очень мощная с точки зрения скорости внедрения в производственную среду и облачную экосистему.

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


Первый публичный аккаунтлинейный барьер, Добро пожаловать старые утюги, чтобы обратить внимание на чтение и исправление. репозиторий кодаGitHub GitHub.com/Ответственность маленького белого дракона/Java…