Начало работы с Docker и Docker Compose: раскрытие возможностей развертывания вашего приложения
Начало работы с Docker и Docker Compose: раскрытие возможностей развертывания вашего приложения

Привет всем! Сегодня я хотел бы познакомить вас с мощным и интересным навыком: использовать Docker и Docker Compose, чтобы раскрыть потенциал развертывания ваших приложений! Независимо от того, являетесь ли вы разработчиком или системным администратором, овладение этим навыком принесет огромную пользу вашей работе.

Краткое содержание этой статьи следующее:

1. Установка Docker в один клик

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

Язык кода:javascript
копировать
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl enable docker
sudo systemctl start docker
docker version
if [ $? -eq 0  ];then
echo "docker successful  installation!"
fi

# Добавить домашнее зеркало
touch /etc/docker/daemon.json
echo "{
  \"registry-mirrors\": [
    \"http://hub-mirror.c.163.com\"
  ]
}" > /etc/docker/daemon.json

sudo systemctl daemon-reload
sudo systemctl restart docker

2. Синтаксис Докера

Синтаксис Docker очень прост для понимания: для определения контейнеров и управления ими используются краткие команды и ключевые слова. Ниже приведены некоторые часто используемые элементы синтаксиса Docker:

  • изображение : Зеркало есть Docker Основная концепция заключается в том, что это легкое и независимое исполняемое программное обеспечение. Вы можете думать об образе как о шаблоне, содержащем полную рабочую среду, включая приложения, библиотеки и зависимости. Вы можете использовать docker pull Заказот Docker Hub Или приобретите зеркало с других зеркальных складов, также можно использовать docker build Заказпрошел Dockerfile строить Пользовательское изображение。
  • контейнер : Контейнер — это работающий экземпляр, созданный на основе образа. Вы можете использовать docker run Заказ на создание и запуск контейнера или его использование. docker startdocker stopdocker restart Заказ на запуск, остановку и перезапуск контейнера соответственно. Контейнеры легкие и используют ядро ​​операционной системы хоста, поэтому можно более эффективно использовать несколько контейнеров.
  • Dockerfile :Dockerfile это текстовый файл, который определяет, как построить Docker Зеркало. Он содержит ряд инструкций и элементов конфигурации, таких как базовый образ, запуск заказа, копирование файла и установка переменных среды путем записи. Dockerfile позволяет создавать образы, содержащие пользовательские конфигурации и приложения.
  • сопоставление портов :использовать -p Например, параметры могут сопоставить порт внутри контейнера с портом на хосте.,-p 8080:80 в контейнере 80 Порт, сопоставленный с хостом 8080 порт, чтобы вы могли получить доступ к хосту через 8080 Порт для доступа к сервисам контейнера.
  • Объем данных (объем) : Том данных — это специальный каталог, используемый для постоянного хранения данных. Тома данных могут совместно использоваться и повторно использоваться между контейнерами, что делает данные постоянными и не подверженными влиянию состояния контейнера. Вы можете использовать -v параметры для создания томов данных и управления ими.

3. Часто используемые команды Docker

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

  • docker pull IMAGE_NAME:от Docker Hub Скачать вобозначениеимязеркало.Например:docker pull nginx
  • docker run [OPTIONS] IMAGE [COMMAND] [ARG...]:Создайте и запустите контейнер на основе указанного образа.。OPTIONS Может включать в себя картографирование портов, Монтаж тома данных、переменные средынастраиватьждать.Например:docker run -d -p 8080:80 nginx,Это будет работать в фоновом режиме как контейнер NGINX и сопоставление порта хоста 8080 с портом контейнера 80.
  • docker ps [OPTIONS]:Список запущенных в данный момент контейнеров。OPTIONS может включать в себяусловия фильтра、формат отображенияждать.Например:docker ps -a,Это покажет все контейнеры (включая остановленные).
  • docker stop CONTAINER [CONTAINER...]:останови одинили Запуск нескольких контейнеров。Например:docker stop my_container
  • docker build [OPTIONS] PATH:в соответствии собозначениеиз Dockerfile Создайте образ. ПАРАМЕТРЫ может включать в себя镜像имя、Этикетка、Создать контекстждать.Например:docker build -t my_image:latest .,Это будет использоваться в текущем каталоге Dockerfile Создайте файл с именем my_image зеркало.
  • docker rm CONTAINER [CONTAINER...]:удалить одинилинесколько контейнеров。Например:docker rm my_container
  • docker exec <container> <command>:Выполнить указанное в контейнере Заказ。Например:docker exec -it my_container bash

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

4. Используйте Dockerfile для настройки изображения.

Dockerfile — это текстовый файл, описывающий, как создать новый образ из базового образа (например, Ubuntu или Alpine), включая установку зависимостей, копирование файлов, настройку переменных среды, предоставление портов и т. д. Использование Dockerfile позволяет разработчикам четко записывать конфигурацию и зависимости приложения и гарантировать, что приложение работает согласованно в различных средах.

Простой пример Dockerfile выглядит следующим образом:

Язык кода:javascript
копировать
# на основе Java Сборка образа
FROM openjdk:8u212-jre

# Параметры конфигурации
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms128m -Xmx256m -Dfile.encoding=UTF-8"

# Установить часовой пояс
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Установить рабочий каталог
WORKDIR /app

# копировать jar Включено в изображение
COPY target/my-app.jar /app/my-app.jar

# открытый порт
EXPOSE 8080

# Настроить запуск Заказ
CMD  java $JAVA_OPTS -jar /app/my-app.jar  --server.port=8080

Давайте кратко представим синтаксис приведенного выше примера Dockerfile:

  • FROM : Укажите базовый образ, основанный на открытом исходном коде Java 8 JRE Зеркало.
  • ENV : Здесь устанавливаются переменные среды. Часовой пояс и JVM. Параметры и т. д.
  • RUN : выполнить заказ,используется здесь Установить часовой пояс。
  • WORKDIR : Установите рабочий каталог, который эквивалентен cd Заказ и последующие заказы выполняются в этом каталоге.
  • COPY : скопировать файл на зеркало, здесь копировать компилируется Java jar Сумка.
  • EXPOSE : Объявите открытый порт, вот он 8080。
  • CMD : Старт Заказ, здесь настраивается запуск Java Программа Заказ.

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

Язык кода:javascript
копировать
docker build -t my-app .

в -t В параметрах указывается имя и метка изображения (по умолчанию latest),. Представляет текущий каталог для поиска Dockerfile документ.

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

Язык кода:javascript
копировать
docker run -p 8080:8080 my-app

в -p Параметры определяют внутреннее и внешнее содержимое контейнера.порткартографированиесвязь,my-appэто название изображения。

Таким образом, наша служба Java может работать в контейнере и доступна через порт 8080 хоста.

5. Установка Docker Compose в один клик

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

Язык кода:javascript
копировать
sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version //The following appears,your docker-compose is installation success.

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

6. Используйте Docker Compose для упрощения развертывания приложений.

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

В реальной разработке приложение обычно не работает само по себе, а должно взаимодействовать с другими службами (такими как базы данных, кэши, очереди сообщений и т. д.). Эти услуги также доступны Docker бежать,Но если для каждой услуги нужен отдельныйиспользоватьdocker runЗаказначать,Тогда это будет очень громоздко и подвержено ошибкам. Чтобы решить эту проблему,Можетиспользовать docker-compose Для определения и запуска зависимостей и сотрудничества между несколькими контейнерами.

docker-compose это инструмент, который позволяет разработчикам использовать YAML документ(Обычно называетсяdocker-compose.yml)описатьнесколько контейнеров之间из Конфигурация,Включает зеркальное отображение、порт、переменные среды、Монтировать том、сетьждать.использовать docker-compose Это позволяет разработчикам запускать или останавливать все связанные контейнеры одновременно и легко управлять связью между контейнерами.

простой docker-compose.yml Примеры следующие:

Язык кода:javascript
копировать
version: '3'
services:
  waynboot-mobile-api:
    image: ibm-semeru-runtimes:open-17-jdk
    container_name: mobile
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/logs:/home/logs
      - /opt/waynboot-mall/upload:/opt/waynboot-mall/upload
      - ./jars/waynboot-mobile-api.jar:/home/app/waynboot-mobile-api.jar
    restart: always
    command: java -Xms512m -Xmx512m -Duser.timezone=GMT+8 -Dfile.encoding=utf-8 -jar /home/app/waynboot-mobile-api.jar
    ports:
      - "82:82"
    environment:
      - TZ=Asia/Shanghai
      - LOG_PATH_PREFIX=/home/logs
      - UPLOAD_DIR=/opt/waynboot-mall/upload
    network_mode: "host"
    # Зависит от redisиmysql, зависимые службы будут запущены до запуска этой службы
    depends_on:
      - redis
      - mysql
      - rabbitmq
      - elasticsearch

При написании файлов Docker Compose приведено более подробное объяснение синтаксиса и параметров конфигурации:

  • версия:Docker Compose Версия файла, используемая для указания того, какую версию использовать грамматику. Общие номера версий включают '1'、'2'、'2.1'、'3' Разные версии поддерживают разные функции играмматики.
  • услуги:Это Docker Compose Основная часть файла используется для определения конфигурации каждой службы. Каждый сервис представляет собой независимый контейнер.
    • image:Указатьиспользоватьназвание изображения。Может Это публичный имидж(Например nginxmysqlждать),также Может是本地строитьиз私иметь Зеркало.Если указано build,Тогда сначала будет построено зеркало.
    • build:Используется для указания того, что необходимо для создания образа. Dockerfile путь. может быть относительно Docker Compose относительный путь к файлу или содержит Git URL полный путь.
      • context:Создать контекстпуть,Представляет время сборки Docker найдет Dockerfile Местоположение файла.
      • dockerfile:обозначениеиспользоватьиз Dockerfile имя файла. По умолчанию Dockerfile
    • ports:Определить контейнеримежду хостамипорткартографированиесвязь。Можетодинокпорт,также Можетэто диапазон。Формат: [Хозяинпорт]:[контейнерпорт]。Например,ports: - "8080:80" означает в контейнере 80 Порт, сопоставленный с хостом 8080 порт.
    • volumes:Определить контейнеримежду хостамидокумент卷绑定связь。Формат: [путь к хосту]:[путь к контейнеру],Вы можете указать доступ только для чтения и записи. Например,volumes: - "./data:/app/data:ro" Указывает, что главный компьютер будет ./data Каталог монтируется в контейнер /app/data путь и доступен в режиме только для чтения.
    • environment:настраиватьконтейнерсерединапеременные среды.Можетэто пара ключ-значениеилисписок。Например,environment: - MYSQL_ROOT_PASSWORD=mysecretpassword Настройте файл с именем MYSQL_ROOT_PASSWORD Значение mysecretpassword переменные среды.
    • depends_on:обозначение服务之间из依赖связь。Например,depends_on: - db Указывает, что служба зависит от службы с именем db Служба будет запущена первой при запуске db Служить.
    • command:Определить контейнер При запускеосуществлятьиз Заказ。Например,command: bundle exec rails server Указывает выполнение при запуске контейнера bundle exec rails server Заказ。
  • сети:используется для определениясеть Конфигурация。
    • driver:обозначениесетьиспользоватьводитель。общийводительиметь bridgeoverlaymacvlan ждать.
    • driver_opts:используется дляобозначение特定驱动程序из Параметры。Например,driver_opts: myoption: value Пользовательские параметры могут быть установлены.
  • Объемы данных (объемы):используется для созданияи Управляйте объемами данных。
    • external:обозначение Является ли том данных внешним томом данных,Это означает, что том данных создается и управляется извне.
  • Заказ(command):Определить контейнер При запускеосуществлятьиз Заказ。
  • ссылки:Определить связи между службами,Позволяет одному сервису обращаться к другому Служить по имени.

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

7. Часто используемые команды Docker Compose

При использовании Docker Compose для управления контейнерными приложениями вот некоторые часто используемые команды Docker Compose, давайте их рассмотрим:

  • Запустить приложение (вверх):использовать docker-compose up Заказможно начать Docker Compose документсередина全部应用程序。Должен Заказ Образ будет проверен и построен(если необходимо),然后启动相关изконтейнер。up Заказ часто сопровождается -d Параметры,Используется для запуска приложений в фоновом режиме.,Вместо отображения вывода журнала в строке Заказ.
Язык кода:javascript
копировать
$ docker-compose up -d
  • Остановить приложение (вниз):использовать docker-compose down Заказ может и остановится up Заказ所启动изконтейнер,И удалите сеть и удалите связанные контейнеры.,Это очистит все ресурсы приложения. Например:
Язык кода:javascript
копировать
$ docker-compose down
  • остановить службу:использовать docker-compose stop Заказ может остановить уже работающий контейнер, не удаляя его. проходить docker-compose start Эти контейнеры можно запустить снова. Например:
Язык кода:javascript
копировать
$ docker-compose stop [options] [SERVICE...]
  • Просмотр статуса услуги (пс):использовать docker-compose ps Заказ Может查看当前正在运行изконтейнерсостояние。它将显示出每个服务изконтейнеримя、состояние、порткартографированиеждатьинформация。Например:
Язык кода:javascript
копировать
$ docker-compose ps
  • Сборка образа (сборка):Если код вашего приложенияили Dockerfile Были внесены изменения для использования docker-compose build Заказ Перестроить Зеркало. Это приведет к повторному выполнению шагов сборки и созданию обновленного зеркала. Например:
Язык кода:javascript
копировать
$ docker-compose build
  • Просмотр журналов (логов):использовать docker-compose logs Заказ может просматривать выходные данные журналов всех контейнеров в стеке службы. По умолчанию отображаются журналы всех контейнеров в реальном времени, вы можете использовать -f Параметры для отслеживания журналов. Например:
Язык кода:javascript
копировать
$ docker-compose logs -f

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

8. Резюме

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

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

Я участвую в пятом выпуске специального учебного лагеря Tencent Technology Creation 2024 с эссе, получившими награды. Приходите и разделите приз со мной!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose