Привет всем! Сегодня я хотел бы познакомить вас с мощным и интересным навыком: использовать Docker и Docker Compose, чтобы раскрыть потенциал развертывания ваших приложений! Независимо от того, являетесь ли вы разработчиком или системным администратором, овладение этим навыком принесет огромную пользу вашей работе.
Краткое содержание этой статьи следующее:
Здесь я хотел бы поделиться с вами своим сценарием установки Docker в один клик, который можно использовать напрямую в большинстве систем на базе ядра Linux.
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
Синтаксис Docker очень прост для понимания: для определения контейнеров и управления ими используются краткие команды и ключевые слова. Ниже приведены некоторые часто используемые элементы синтаксиса Docker:
docker pull
Заказот Docker Hub Или приобретите зеркало с других зеркальных складов, также можно использовать docker build
Заказпрошел Dockerfile строить Пользовательское изображение。
docker run
Заказ на создание и запуск контейнера или его использование. docker start
、docker stop
、docker restart
Заказ на запуск, остановку и перезапуск контейнера соответственно. Контейнеры легкие и используют ядро операционной системы хоста, поэтому можно более эффективно использовать несколько контейнеров.
-p
Например, параметры могут сопоставить порт внутри контейнера с портом на хосте.,-p 8080:80
в контейнере 80 Порт, сопоставленный с хостом 8080 порт, чтобы вы могли получить доступ к хосту через 8080 Порт для доступа к сервисам контейнера.
-v
параметры для создания томов данных и управления ими.
Вот некоторые часто используемые команды 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 предоставляет множество других полезных команд и опций, которые позволяют более гибко управлять контейнерами и изображениями.
Dockerfile — это текстовый файл, описывающий, как создать новый образ из базового образа (например, Ubuntu или Alpine), включая установку зависимостей, копирование файлов, настройку переменных среды, предоставление портов и т. д. Использование Dockerfile позволяет разработчикам четко записывать конфигурацию и зависимости приложения и гарантировать, что приложение работает согласованно в различных средах.
Простой пример Dockerfile выглядит следующим образом:
# на основе 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 для создания образа, мы можем использовать следующую команду:
docker build -t my-app .
в -t
В параметрах указывается имя и метка изображения (по умолчанию latest),.
Представляет текущий каталог для поиска Dockerfile документ.
Чтобы запустить созданный образ, используйте следующую команду:
docker run -p 8080:8080 my-app
в -p
Параметры определяют внутреннее и внешнее содержимое контейнера.порткартографированиесвязь,my-app
это название изображения。
Таким образом, наша служба Java может работать в контейнере и доступна через порт 8080 хоста.
Здесь я продолжу делиться своими Docker Compose
Сценарий установки в один клик, каждый может использовать его напрямую.
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
документ.
Кроме Docker команду, мы также можем использовать Docker Compose
для упрощения управления и развертывания нескольких контейнеров.
В реальной разработке приложение обычно не работает само по себе, а должно взаимодействовать с другими службами (такими как базы данных, кэши, очереди сообщений и т. д.). Эти услуги также доступны Docker бежать,Но если для каждой услуги нужен отдельныйиспользоватьdocker run
Заказначать,Тогда это будет очень громоздко и подвержено ошибкам. Чтобы решить эту проблему,Можетиспользовать docker-compose
Для определения и запуска зависимостей и сотрудничества между несколькими контейнерами.
docker-compose
это инструмент, который позволяет разработчикам использовать YAML документ(Обычно называетсяdocker-compose.yml
)описатьнесколько контейнеров之间из Конфигурация,Включает зеркальное отображение、порт、переменные среды、Монтировать том、сетьждать.использовать docker-compose
Это позволяет разработчикам запускать или останавливать все связанные контейнеры одновременно и легко управлять связью между контейнерами.
простой docker-compose.yml
Примеры следующие:
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 приведено более подробное объяснение синтаксиса и параметров конфигурации:
nginx
、mysql
ждать),также Может是本地строитьиз私иметь Зеркало.Если указано build
,Тогда сначала будет построено зеркало.Dockerfile
。
[Хозяинпорт]:[контейнерпорт]
。Например,ports: - "8080:80"
означает в контейнере 80 Порт, сопоставленный с хостом 8080 порт.
[путь к хосту]:[путь к контейнеру]
,Вы можете указать доступ только для чтения и записи. Например,volumes: - "./data:/app/data:ro"
Указывает, что главный компьютер будет ./data
Каталог монтируется в контейнер /app/data
путь и доступен в режиме только для чтения.
environment: - MYSQL_ROOT_PASSWORD=mysecretpassword
Настройте файл с именем MYSQL_ROOT_PASSWORD
Значение mysecretpassword
переменные среды.
depends_on: - db
Указывает, что служба зависит от службы с именем db
Служба будет запущена первой при запуске db
Служить.
command: bundle exec rails server
Указывает выполнение при запуске контейнера bundle exec rails server
Заказ。
bridge
、overlay
、macvlan
ждать.
driver_opts: myoption: value
Пользовательские параметры могут быть установлены.
Важно отметить, что отступы и форматирование очень важны при написании файлов Docker Compose. Используйте правильные отступы и обеспечьте правильный синтаксис для успешной сборки и запуска службы.
При использовании Docker Compose для управления контейнерными приложениями вот некоторые часто используемые команды Docker Compose, давайте их рассмотрим:
docker-compose up
Заказможно начать Docker Compose документсередина全部应用程序。Должен Заказ Образ будет проверен и построен(если необходимо),然后启动相关изконтейнер。up
Заказ часто сопровождается -d
Параметры,Используется для запуска приложений в фоновом режиме.,Вместо отображения вывода журнала в строке Заказ.$ docker-compose up -d
docker-compose down
Заказ может и остановится up Заказ所启动изконтейнер,И удалите сеть и удалите связанные контейнеры.,Это очистит все ресурсы приложения. Например:$ docker-compose down
docker-compose stop
Заказ может остановить уже работающий контейнер, не удаляя его. проходить docker-compose start
Эти контейнеры можно запустить снова. Например:$ docker-compose stop [options] [SERVICE...]
docker-compose ps
Заказ Может查看当前正在运行изконтейнерсостояние。它将显示出每个服务изконтейнеримя、состояние、порткартографированиеждатьинформация。Например:$ docker-compose ps
docker-compose build
Заказ Перестроить Зеркало. Это приведет к повторному выполнению шагов сборки и созданию обновленного зеркала. Например:$ docker-compose build
docker-compose logs
Заказ может просматривать выходные данные журналов всех контейнеров в стеке службы. По умолчанию отображаются журналы всех контейнеров в реальном времени, вы можете использовать -f
Параметры для отслеживания журналов. Например:$ docker-compose logs -f
Вот некоторые часто используемые команды Docker Compose, которые могут помочь вам управлять контейнерными приложениями и работать с ними. В то же время Docker Compose также предоставляет другие команды и параметры, такие как перезапуск служб, расширение служб, просмотр конфигураций и т. д., которые можно использовать в соответствии с потребностями.
В этой статье мы узнали об основном синтаксисе Docker и некоторых распространенных командах. Простота, гибкость и эффективность Docker делают его предпочтительным инструментом для развертывания приложений. С помощью Docker Compose мы можем еще больше упростить и организовать управление несколькими контейнерами и достичь более высокого уровня развертывания.
Независимо от того, разрабатываете ли вы новые приложения или переносите существующие, Docker и Docker Compose будут вашей правой рукой. Начните исследовать безграничные возможности Docker и раскройте возможности развертывания своих приложений!