Чтобы облегчить локальный тестовый проект, облегчить открытие новой среды и облегчить развертывание, я планирую использовать Docker для локальной установки Mysql и Redis.
Создайте проект Springboot, напишите Dockerfile, упакуйте и соберите образ.
Просто используйте docker-compose, чтобы запустить службу.
Кратко опишите docker-compose и K8S.
окрестности
Система: макинтош
Двигатель докера: 19.03.8
Mysql: 5.7, каталог монтирования диска: /Users/yclxiao/Program/volume/mysql
Redis: 5.0.8, каталог монтирования диска: /Users/yclxiao/Program/volume/redis
Установите Mysql-5.7
-
Потяните официальное зеркало
docker pull mysql:5.7 -
Посмотреть библиотеку изображений
docker images -
Создайте каталог, в котором смонтирован mysql
mkdir -p /Users/yclxiao/Program/volume/mysql/data /Users/yclxiao/Program/volume/mysql/conf /Users/yclxiao/Program/volume/mysql/logs -
Создать cnf-файл
cd /Users/yclxiao/Program/volume/mysql/conf touch my.cnf -
Создайте контейнер, сопоставьте данные, журналы и файлы конфигурации с этой машиной.
docker run -p 3306:3306 --name mysql -v /Users/yclxiao/Program/volume/mysql/conf:/etc/mysql/conf.d -v /Users/yclxiao/Program/volume/mysql/logs:/logs -v /Users/yclxiao/Program/volume/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpwd -d mysql:5.7-d: запустить контейнер в фоновом режиме
-p: сопоставить порт контейнера с локальным портом
-v: смонтировать каталог хоста в каталог контейнера
-e: установить параметры
-
запустить контейнер
docker start mysqlВ чем разница между docker run xxx и docker start xxx?
-
запуск докера:
Он используется только при первом запуске, поместите образ в контейнер, а затем снова запустите контейнер, просто используйте запуск докера.
docker run эквивалентен выполнению двух команд:
- docker create: поместить образ в контейнер
- docker start: запустить контейнер и стать работающим контейнером
-
запуск докера:
запустить существующий контейнер
-
-
Используйте Navicat и другие инструменты, чтобы проверить, можно ли его подключить
Имя пользователя: корень
Пароль: rootpwd
Установите Redis-5.0.8
-
Создайте новый каталог, связанный с Redis, в каталоге монтирования хоста.
/Users/yclxiao/Program/volume/redis/conf
/Users/yclxiao/Program/volume/redis/data
-
В разделе /Users/yclxiao/Program/volume/redis/conf
touch redis.conf -
Потяните официальное зеркало, посмотрите на зеркало
docker pull redis:5.0.8 docker images -
запустить контейнер,
redis:5.0.8имя изображенияdocker run -d --name redis -p 6379:6379 -v /Users/yclxiao/Program/volume/redis/conf/redis.conf:/redis.conf -v /Users/yclxiao/Program/volume/redis/data:/data redis:5.0.8 redis-server --appendonly yes-d: позволить контейнеру работать в фоновом режиме
-p: передняя часть — это открытый порт, а задняя — служебный порт внутри контейнера.
-v: смонтировать каталог хоста в каталог /data контейнера, используйте
:--name: псевдоним для этого контейнера
--appendonly: включить сохранение данных
redis-server --appendonly yes: выполнить команду запуска redis-server в контейнере и запустить постоянную конфигурацию redis.
-
Просмотр запущенных контейнеров
docker ps -
Тест подключения инструмента RDM ОК
Общие команды докера
docker search #Поиск образов в репозитории реестра
docker pull #загрузить образ из репозитория в локальный
docker images #Список всех изображений
docker tag #Создать псевдоним для изображения
docker rmi имя образа #удалить образ
docker rmi $(docker images -q) #удалить все изображения
docker push #Отправить образ в репозиторий реестра
docker build -t .#Сборка продолжается,: .существенный
docker create #Создать контейнер, но не запускать его
docker run #Создать и запустить контейнер
docker start # Запустить контейнер в остановленном состоянии
docker ps -aq # Список всех идентификаторов контейнеров
docker ps # список запущенных контейнеров
docker ps -a #Просмотреть все процессы
docker stop идентификатор контейнера # остановить контейнер
docker rm container id #удалить контейнер
docker stop $(docker ps -aq) #остановить все контейнеры
docker rm $(docker ps -aq) #удалить все контейнеры
docker kill #Отправить сигнал контейнеру, по умолчанию SIGKILL
docker exec #Войдите в контейнер для выполнения команды
docker inspect #Углубитесь внутрь контейнера, чтобы получить всю информацию о контейнере
Написать Dockerfile
Dockerfile является основой для создания образов Docker, а также важной функцией, которая отличает Docker от других контейнеров.Именно с Dockerfile возможны автоматизация и переносимость Docker.
-
FROM, создайте новый образ из базового образа
FROM openjdk:8-jdk-alpine -
MAINTAINER, информация о сопровождающем
MAINTAINER yclxiao <yclxiao@163.com> -
ENV, установить переменные среды
ENV TESTVAR 123 -
RUN, запустить команду оболочки
RUN xxxxxx -
ДОБАВИТЬ, скопировать внешние файлы на зеркало, src может быть URL
ADD xxxxx /data/xxxxxx -
WORKDIR /path/to/workdir, установить рабочий каталог
WORKDIR /var/www -
ПОЛЬЗОВАТЕЛЬ, установите идентификатор пользователя
USER nginx -
VOLUME, установить том, установить том монтирования
VOLUME ['/data'] -
EXPOSE, какие порты открыты
EXPOSE 8080 8081 -
ENTRYPOINT ["исполняемый","парам1","парам2"] выполнить команду
ENTRYPOINT ["/usr/sbin/nginx"] -
CMD ["param1","param2"]
CMD ["start"]Команда, которая выполняется, когда docker создает и запускает контейнер, если установлен ENTRYPOINT, в качестве параметра будет использоваться CMD
Пример: использование Dockerfile для создания образа Java-приложения
FROM openjdk:8-jdk-alpine
ENV TZ=Asia/Shanghai
#如果直接docker build命令打包镜像(非maven插件的形式),则需要加上这段变量
#ENV JAR_FILE=target/blog-dbpool-main-0.0.1-SNAPSHOT.jar
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
VOLUME /tmp
#pom.xml中dockerfile插件定义的参数
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Соберите Java-проект
Создайте проект Springboot с Dockerfile, настройте подключаемый модуль Docker в pom, создайте образ и отправьте образ, а затем запустите контейнер.
-
Подготовка проекта:
-
Настройте плагин dockerfile-maven-plugin.Официально рекомендуется использовать плагин dockerfile-maven-plugin, но не рекомендуется использовать плагин docker-maven-plugin:
Обратитесь к этой статье:Spotify официально рекомендует плагин Maven для создания образов Docker
Локальная настройка maven в папке .m2 должна иметь
servers, иначе конфигурация не вступит в силу<servers> <server> <id>docker.io</id> <username>yclxiao</username> <password>xxxxxx</password> </server> </servers> -
Соберите образ и запушите репозиторий:
-
Непосредственно в каталоге dockerfile выполните команду docker:
docker build -t yclxiao/blog-dbpool-main:0.0.1-SNAPSHOT . docker push yclxiao/blog-dbpool-main:0.0.1-SNAPSHOT -
Использование плагина maven:
mvn clean package dockerfile:build mvn clean package dockerfile:push
-
-
Выполните docker-образы, вы можете увидеть этот образ на локальном складе.
Проверьте репозиторий dockerHub https://hub.docker.com/, вы можете увидеть это изображение
-
Создайте контейнер запуска:
docker run -p 8080:8080 yclxiao/blog-dbpool-main:0.0.1-SNAPSHOT [-d]
-
После того, как локальный докер запустит mysql, нажмите OK:http://localhost:8080/swagger-ui.html
Развертывание с помощью Docker-Compose
Когда контейнеров становится больше, необходим инструмент для управления контейнерами, поэтому по мере необходимости появляется docker-compose. кластеры контейнеров., вы можете использовать файл yml для настройки всех сервисов, которые нужны вашему приложению. Затем с помощью команды создайте и запустите все службы из файла конфигурации yml.
Две важные концепции:
Служба: Контейнер приложения может включать в себя несколько экземпляров контейнера, на которых работает один и тот же образ.
Проект (проект): законченная бизнес-единица, состоящая из набора связанных контейнеров приложений.
docker-compose.ymlопределяется в файле.
- В том же каталоге Dockerfile напишите docker-compose.yml, например:
version: '3.7'
# 定义服务
services:
# 指定服务名称,例如spring-boot服务
app-server:
build:
context: . # 配置需要构建Dockerfile的路径 相对于docker-compose.yml
dockerfile: Dockerfile
# 指定服务运行的端口
ports:
- "8080:8080" # 将本机8080端口映射到容器8080端口
restart: always
# 需要依赖的服务 率先构建
depends_on:
- db
- redis
#environment: # 设置环境变量
#SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/airTicket?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
#SPRING_DATASOURCE_USERNAME: root
#SPRING_DATASOURCE_PASSWORD: 123456
#SPRING_REDIS.HOST: redis
db:
# 指定服务使用的镜像
image: mysql:5.7
# 指定容器名称
container_name: mysql5.7
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpwd
volumes:
- /Users/yclxiao/Program/volume/mysql/conf:/etc/mysql/conf.d
- /Users/yclxiao/Program/volume/mysql/logs:/logs
- /Users/yclxiao/Program/volume/mysql/data:/var/lib/mysql
redis:
image: redis:5.0.8
# 指定容器名称
container_name: redis5.0.8
volumes:
- /Users/yclxiao/Program/volume/redis/conf/redis.conf:/redis.conf
- /Users/yclxiao/Program/volume/redis/data:/data
command: ["redis-server", "--protected-mode", "no", "--appendonly", "yes"]
hostname:
redis
ports:
- "6379:6379"
- Затем выполните команду, контейнер, созданный локально загруженным образом, не будет загружен и создан заново:
docker-compose build #根据docker-compose.yam构建完整镜像
docker-compose up #直接运行所有服务
docker-compose up -d #后台运行所有服务
docker-compose stop #停止所有容器
docker-compose ps #列出所有容器信息
- docker-compose build , после docker-compose выходной журнал нормальный, и доступ в порядке:http://localhost:8080/swagger-ui.html
Разница между Docker-Compose и K8S
Docker — это ядро и основа технологии контейнеров. Docker Compose — это инструмент оркестрации контейнеров с одним хостом (инструмент управления контейнерами) на основе Docker. .