Напишите руководство по основному вводу Docker в серверную часть: высокоэффективное развертывание автоматизации.

задняя часть Docker

в предыдущей статьеВводное руководство по Docker, ориентированное на серверную часть: подробное объяснение команды DockerFileВ мы подробно объяснили использование и команды скрипта сборки образа DockerFile, Появление DockerFile делает процесс создания образов Docker более интуитивным и эффективным, но это тот же вопрос, который я упоминал в большинстве своих предыдущих статей. .

Это все?

конечно, нет

Эта статья — пятая часть вводного руководства по Docker.Основы Концепции Настоящий бойИ DockerFile, мы перешли от того, что такое Docker, к использованию DockerFile для создания нашего собственного образа, шаг за шагом, я считаю, что люди, прочитавшие эти руководства, хорошо понимают Docker и могут справиться с частью реальности. но все еще есть много проблем с лучшими решениями.В этой статье я представлю артефакт автоматического развертывания докера, docker-compose, который позволяет нам использовать традиционный утомительный докер.Инструкции по эксплуатации выполняются автоматически, и можно управлять несколькими контейнерами реализовать пакетный запуск нескольких контейнеров.

Не говорите глупостей, просто смотрите на вещи.

Какие проблемы решает docker-compose?

Если вы знали об архитектуре микросервисов раньше, то, безусловно, уже слишком поздно, чтобы увидеть автоматизированное развертывание docker-compose.Позвольте мне кратко упомянуть здесь, что архитектура микросервисов состоит в том, чтобы разделить традиционную единую службу на несколько отдельных небольших служб, чтобы Чтобы масштабировать приложение по горизонтали, возьмем в качестве примера крупную платформу электронной коммерции, микросервис должен разделить предыдущее огромное отдельное приложение на несколько сервисов, таких как складская система как отдельная служба и система заказов как отдельное приложение Преимущество предоставления услуг заключается в том, что нам не нужно обновлять весь сервер, как традиционным способом, а нужно обновлять только соответствующий сервер в соответствии с давлением конкретного бизнеса.Например, система двойных 11 заказов под большим давлением, поэтому я поставил его отдельно.Сервер системы заказов может быть обновлен, и нет необходимости обновлять аппаратную конфигурацию всей системы.

Однако, поскольку существуют определенные зависимости между различными сервисами микросервиса, например, в SpringCloud, Eureka, как реестр, должна быть запущена первой, иначе последующие сервисы не смогут подключиться к реестру при их запуске, и регистрация будет в порядке, но когда микросервисы попадают в Docker, это, вероятно, следующий процесс запуска.Эксплуатационному и обслуживающему персоналу необходимо вводить множество команд последовательно, чтобы гарантировать, что каждый сервис запускается в правильном порядке:

docker run -d 服务A
docker run -d 服务B,必须在A之后启动

Если есть только два сервиса, все в порядке, если десять или восемь связаны зубами, это приемлемо, но как насчет десятков или сотен услуг? Если начнется в порядке, если кто-то не исправлен, обмен станет предложением от операции и обслуживающего персонала. Это была катастрофа, поэтому докер-составляющий вступил в точку. Сценарий, который означает, что мы можем организовать последовательность запуска каждого контейнера и записывать ее в сценарий. Инженер операции и обслуживания требуется только для запуска этого сценария каждый раз, и нет необходимости выполнять команду запуска в последовательности, чтобы начать контейнеры.

Почему Docker-Compose называют большим убийцей, потому что он действительно решает болевые точки, точки знаний, друзей, которые нужно тестировать.

установка докер-композиции:

По поводу установки docker-compose, туториалов в интернете еще много, но все без исключения три слова, уж слишком хлопотно, в этот раз все же продолжаю традицию, только самое простое, сначала убедиться, что python3 и python3 на компьютере установлены докеры

без ням?

Ответ: Не нужно на это время, лучше установка pip

Почему бы не использовать python2? Пользователи Love python2 выражают резкое осуждение

Ответ: Для установки я использовал pip2, но не могу установить, а вот pip3 сразу подойдет, поэтому рекомендую pip3.

Примечание: Для тех, кто не знает, как установить python3, забудьте, я кстати напишу. Также убедитесь, что на вашем сервере установлен докер.

Откройте терминал Linux и введите следующую команду:

##安装python3
yum install python3

#pip方式安装docker-compose,pip会自动寻找和你主机上docker版本相匹配的docker-compose版本
pip3 install docker-compose 

Чтобы убедиться, что установка прошла успешно, введите в терминале:

docker-compose version

Если версия отображается, это означает, что docker-compose был успешно выполнен на нашей машине. Кстати, у меня версия 1.24.1.

docker-compose бой:

Прежде всего, создать новую папку, или нет, чтобы вы не могли некоторое время найти, куда вы положили файл yml.Кстати, формат скрипта docker-compose - это формат файла yaml.Друзья, которые не понимают можно спуститься и наверстать, файл по умолчанию Имя docker-compose.yml или docker-compose.yaml

Создайте новый файл docker-compose.yml во вновь созданной папке и введите следующее содержимое Здесь мы все еще используем tomcat в качестве примера:

mytomcat:
    image: tomcat
    ports:
       - "8086:8080"

Затем мы входим в текущий каталог (помните, что это должен быть каталог, в котором находится файл docker-compose.yml, по умолчанию docker-compose ищет из текущего каталога):

docker-compose up ##根据yml文件启动容器

Затем на экране появляется много вывода журнала tomcat.Если ctrl+c завершает работу, закрывается весь контейнер.Это связано с тем, что на переднем плане запускается команда docker-compose up по умолчанию, и вывод журнала в контейнере будет выводиться на переднем плане Аналогично docker run -it

Если вы хотите, чтобы контейнер запускался из фона, просто добавьте после него -d, как показано ниже:

docker-compose up -d

Если запуск прошел успешно, он отобразит

[root@iZbp1d7upppth01hp demo]# docker-compose up -d
Starting demo_mytomcat_1 ... done

В этот момент, если мы снова запустим docker ps, мы обнаружим, что наш tomcat запустился нормально, и его имя — demo_mytomcat_1.Соответствующая папка, имя контейнера и номер соответственно, если вы запустите его снова, имя нового контейнера tomcat станет demo_mytomcat_2

Подробное объяснение скрипта сборки docker-compose:

Теперь, когда контейнер успешно запущен, давайте подробнее рассмотрим формат, которому должен следовать файл docker-compose.yml.

Сначала первый слой:

  • mytomcat: мы объявляем имя контейнера для сборки, файл yaml может определять несколько контейнеров.

После:

  • image: Мы создаем источник изображения, вот зеркало Tomcat, если вам нужно указать версию, можно записать Tomcat: 8 формат

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

    mytomcat:
        bulid: . #如果是 . docker-compose 便会在当前目录找DockerFile 文件,执行构建镜像然后启动,镜像名字是  当前目录_mytomcat
        ports:
           - "8086:8080"
    
  • ports:Эквивалентно параметру -p запуска docker, используемому для сопоставления портов. Вы можете перечислить порты без кавычек, но в случае 56:56 YAML будет анализировать его как шестидесятеричное число с основанием 60, поэтому настоятельно рекомендуется писать в кавычках.

Просто так? Ушел? Нет, мы также можем выполнять такие операции, как установка переменных среды, томов контейнеров, ссылок, команд и т. д. в скрипте yml.

  • environment: эквивалентно параметру -e команды запуска docker, используемой для установки переменных среды.

  • volumes: Эквивалентно параметру -v команды docker rum, используемой для настройки тома данных, использование выглядит следующим образом:

    mytomcat:
        image: tomcat
        ports:
           - "8086:8080"
        volumes: 
           - ./data:/data #把当前目录下的data文件夹挂载到容器内的data文件夹中
    
  • **links:** эквивалентен параметру --link в команде запуска docker, который используется для связывания двух контейнеров. Links поддерживает связывание нескольких контейнеров. Используется следующим образом:

    mytomcat:
        image: tomcat
        ports:
           - "8086:8080"
        links:
           -redis #链接到redis容器
           -mysql #链接到mysql容器,如果只需要链接一个容器,删掉一个就行了
        volumes: 
           - ./data:/data #把当前目录下的data文件夹挂载到容器内的data文件夹中
    
  • command:Используйте команду, чтобы переопределить команду по умолчанию, выполняемую после запуска контейнера.

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

Подождите, конечно, команд, поддерживаемых docker-compose, определенно больше, чем эти, но вышеперечисленные команды — это те, которые мы часто используем без исключения.Что касается других, таких как журналы, я не буду перечислять их здесь по одному. для поиска в Интернете.

Как упоминалось ранее, скрипт yml может определять несколько контейнеров одновременно. Если вам нужно определить несколько контейнеров, вы можете просто написать это в другой строке.Обязательно обратите внимание на формат отступа самого файла YAML.

mytomcat01:
    image: tomcat
    ports:
       - "8086:8080"
       
mytomcat02:
    image: tomcat
    ports:
       - "8087:8080"

Конечно, у некоторых людей все еще может возникнуть вопрос, должен ли файл yml называться docker-compose.yml?Если я хочу использовать другое имя, такое какxswl.ymlЧто поделать, конечно можно, достаточно добавить опцию -f и указать путь к yml файлу.

docker-compose -f xswl.yml up -d

команда docker-compose:

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

  • up:Запускает все контейнеры, определенные в файле компоновки, и объединяет их сообщения журнала, обычно с параметром -d.
  • ps:Получите информацию о состоянии контейнера, управляемого Compose.
  • бегать:Запустите контейнер и разрешите однократную команду, связанные контейнеры будут запущены одновременно.
  • булид:Восстановите образ, созданный DockerFile. Если образ не существует, команда up не будет выполнять команду для создания существующего образа. Команда build часто используется, когда образ необходимо обновить.
  • logs: объединяет сообщения журнала, созданные контейнерами, управляемыми Compose, и выводит их в цвете.
  • stop:Остановите контейнер.
  • rm:Чтобы удалить остановленные контейнеры, не забудьте добавить -v, чтобы удалить все тома данных, управляемые Docker.

Если я вдруг не хочу использовать программное обеспечение Docker-Compose, я могу выполнить

docker-compose stop #停止docker-compose

Если я вдруг захочу использовать его снова, я могу выполнить:

docker-compose start 或者 docker-compose up #重启相同的容器

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

Начнем техническое резюме:

В этой статье мы используем docker-compose для эффективного и автоматизированного развертывания docker-контейнеров и в то же время даем краткое объяснение соответствующих общих команд. Учебники обязательно будут использоваться. Будет все больше и больше docker-compose, и я надеюсь, что вы внимательно изучите эту статью, потому что она слишком медленная для запуска по одному, и поскольку я использую студенческий сервер, Я вообще не могу запустить все контейнеры Niu X. Up, нет возможности продемонстрировать это. В следующей статье я пошагово расскажу вам, как построить лог-центр с помощью ELK.

Наконец, я очень благодарен друзьям, которые прочитали эту статью. Я очень рад, что могу вам помочь. Если у вас есть какие-либо вопросы или критические замечания, пожалуйста, оставьте сообщение внизу этой статьи. ответ .

Все учебные заметки Хань Шу находятся в открытом доступе на github, не забудьте нажатьstarах ах ах ах ах

Тысячи рек и гор - это всегда любовь, можешь подарить мне звезду?

Заметки о разработке Hanshu

Добро пожаловать лайк, следуйте за мной,ешь привет фрукты(смешной)