10 минут до Docker в кратком руководстве по началу работы с интерфейсом пользователя
На дворе 2022 год, давайте потратим немного времени на то, чтобы изучить докер во внешнем интерфейсе, и нас не обманут
Еще не разобрались с докером, не беда, давайте смоделируем несколько сценариев и за две минуты разберемся, что это такое и когда оно нам нужно
Затем мы используем оставшиеся семь или восемь минут, чтобы использовать докер для одновременного развертывания двух проектов vue2 и vue3, да, это так быстро!
1 Что такое докер
Сценарий 1: автономный
Вы старательны и старательны в компании и быстро признаны руководителем.Сегодня он попросил вас взять на себя следующие новые проекты.Нужно установить их на собственный компьютер.
Как видите, есть несколько разных версий nodejs и mysql: окей, для меня это тривиально
Сценарий 2: несколько компьютеров
На данный момент в компании есть 3 новых стажера и новые люди.Лидер хочет, чтобы вы установили эти проекты, чтобы они могли работать на локальном компьютере.
В связи с историей компании и другими причинами, в настоящее время их можно настроить только для компьютеров с разными операционными системами: win7, win10, OSX и т. д.
Теперь вам нужно установить эти проекты на разные операционные системы нескольких компьютеров, смотрите картинку
Вы остроумны и обнаруживаете, что одна из ваших голов теперь больше двух
«Установка хлопотная и трудоемкая. Когда новичок работает над проектом, ему приходится переключать подходящую версию для разных проектов. Легко сделать ошибки, что также загрязняет среду хоста. Это также загрязняет хост Другие проекты будут делать это, и некоторые люди, возможно, уже хотят убежать в это время».
После завершения жесткой установки, видя, насколько вы сильны, руководитель просит вас развернуть эти проекты на двух небольших серверах во внутренней сети компании в качестве общедоступной среды разработки и тестирования. О, эти два сервера — Linux. готовы начать, как Baidu устанавливает node и mysql в linux? И вам нужно установить несколько версий. Что, если системы Linux на двух серверах разные?
Теперь твоя очередь нести ведро.
3 внешний вид докера
Не паникуйте, в это время выходит докер, он может помочь вам сгладить различия в установке приложений разных систем
Подождите, так почему бы не использовать виртуальную машину?
Поскольку виртуальная машина запускается медленно, потребляет много ресурсов и занимает много ресурсов, миграция/расширение на разных системах усложняется.
А докер — нет: он запускается за считанные секунды, требует меньше ресурсов, имеет «аромат» и легко воспроизводится на разных платформах.
После написания конфигурации он устанавливает на компьютер одновременно одной командой разные версии nodej, msyql, nginx и т.д., и запускается самостоятельно и независимо друг от друга, в это время не нужно переключаться обратно и далее вручную.
Вышеупомянутая проблема не решается легко?
2 основы докера
Теперь давайте начнем разбираться с основами докера.
Докер делится на несколько понятий: образ, контейнер, склад
зеркало: Это как бы системный диск или файл образа системы, который нам нужен при установке машины. Здесь он отвечает за создание контейнера докеров. Есть много официальных готовых образов: node, mysql, monogo, nginx можно скачать с пульта склад
контейнер: его можно сравнить с мини-системой, такой как минимальная система Linux, которая устанавливает только mysql5.7. Конечно, вы также можете установить mysql и node в одном контейнере, если хотите. Помните **, контейнер и контейнер, контейнер и хост изолированы друг от друга**
склад: Репозиторий похож на github.Мы можем сделать образ и затем отправить его в облачный репозиторий, или вытащить и загрузить образ из репозитория.
3 Установка
Установка докера очень проста.И win, и osx устанавливаются на графический интерфейс.Linux также имеет несколько строк команд.Теперь также поддерживается серия чипов m1 для Mac.Здесь мы сначала пропустим этапы установки,поторопитесь! Смотрите сначала!
ps: установка mysql на докер чипа m1 требует небольшой настройки
После установки запустите следующий код, чтобы просмотреть
docker -v
4 Актуальный бой: развертывание проектов vue2 и vue3
После установки докера, давайте перейдем к самому бою, потираем руки
Мы хотим, чтобы на компьютере одновременно запускались несколько версий nodejs10 и nodejs12.
ps: Приступим побыстрее, пока отложим установку разных версий mysql.
4.1 Подготовка проектов vue2 и vue3
Сначала сделайте это вместе, мы объясним позже
Теперь создайте новый файл для нашего проекта: назовите его:my-repository
Установить проект vue2+webpack
# 0 命令行进入到该文件夹的位置:
cd /你的电脑具体的文件路径/my-repository
# 1.现在安装vue-cli
npm install -g @vue/cli
# 2.查看vue-cli安装成功否
vue --version
#我这里是@vue/cli 4.5.15
# 3. 用vue-cli快速创建项目,安装选项我们如下
# > ❯ Default ([Vue 2] babel, eslint)
# > ❯ npm包管理
vue create my-app-vue2
Установить проект vue3+vite
#先安装vite最新版
npm init vite@latest
# 创建vue3项目
npm init vite@latest my-app-vue3 --template vue
//vite需要开启网络访问
//vite.config.js 开启host
export default defineConfig({
plugins: [vue()],
+ server: {
+ host: '0.0.0.0',
+ },
});
#安装完成后我们的目录是这样的
my-repository
├── my-app-vue2
│ ├── public
│ └── src
│ ├── assets
│ └── components
└── my-app-vue3
├── public
└── src
├── assets
└── components
4.2 Создание и запуск докер-контейнера
# 0 先进入我们刚才安装了vue项目的文件夹位置
cd my-repository
# 1 执行pwd可以获取当前文件夹在电脑的绝对目录
pwd
# /Users/eric/my-repository
# 2 运行创建docker容器1:承载 vue2+webpack+nodejs10
docker run -it -d --name myvue2 --privileged -p 8081:8080 -v /Users/eric/my-repository/my-app-vue2:/app/vue node:10.16.2 /bin/bash -c "cd /app/vue && node -v && npm install && npm run serve"
# 3 运行创建docker容器2:承载 vue3+vite+nodejs12
docker run -it -d --name myvue3 --privileged -p 8080:3000 -v /Users/eric/my-repository/my-app-vue3:/app/vue node:12.22.6 /bin/bash -c "cd /app/vue && node -v && npm install && npm run dev"
#运行成功后 查看容器运行情况
docker ps -a
появится после успешной операции
Мы можем видеть статус запуска контейнера, сопоставление портов, имя контейнера
Открываем браузер, заходимlocalhost:8080иlocalhost:8081можно увидеть
Если есть ошибка, см. третий пункт ниже: [Отладка](###3 Отладка): выполните следующую команду, чтобы проверить причину
docker logs -f container_id/containe_name
ком вышеdocker run xxxxx
Что такое код
Сначала этоdocker run
может использоваться для создания и запуска контейнеров одновременно
Сначала посмотрите на новую строку: когда сценарий оболочки слишком длинный, мы можем использовать «\», чтобы разделить строку команд на несколько строк.
docker run \
-it \
-d \
--name myvue2 \
--privileged \
-p 8081:8080 \
-v /Users/eric/my-repository/my-app-vue2:/app/vue \
node:10.16.2 \
/bin/bash -c "cd /app/vue2 && node -v && npm install && npm run serve"
Здесь мы используемdocker run
команда можетСкачайте образ -> создайте контейнер из образа -> запустите и запустите контейнер
разбор параметров:
параметр | описывать |
---|---|
-d | Пусть контейнер работает в фоновом режиме как процесс демона, возможно, вы использовали pm2 для демонизации процесса раньше |
-it | вот сокращения для -i и -t -я:Скажите контейнеру Docker, чтобы стандартный входной поток оставался открытым для контейнера, даже если контейнер не имеет терминального соединения. Скажите Docker, чтобы он назначил контейнеру виртуальный терминал. |
--name myvue2 | Назовите контейнер myvue2, чтобы вам не нужно было вводить длинный список идентификаторов контейнеров для доступа к контейнеру, управления им и т. д. |
--privileged | Разрешить пользователю контейнера получить полные привилегии root в контейнере |
-p 8081:8080 |
Сопоставьте порт 8080 контейнера с портом 8081 хоста. Таким образом, мы получаем доступ к локальному локальному хосту: 8081, что означает доступ к порту 8080 контейнера. Поскольку контейнеры запускаются независимо и изолированы друг от друга, порт контейнера и контейнера 8080 и порт контейнера и хоста 8080 — это не одно и то же. Хост может получить доступ к порту контейнера, только сопоставив порт здесь . |
-v /Users/eric/my-repository/my-app-vue2:/app/vue |
Смонтируйте содержимое каталога my-app-vue2 хоста (здесь в командной строке можно указать только абсолютные пути) в каталог контейнера /app/vue, Если в указанном каталоге контейнера есть файлы/папки, он будет очищен После монтирования контейнер изменяет содержимое каталога /app/vue, а также изменяет содержимое каталога хоста /Users/eric/my-repository/my-app-vue2. |
node:10.16.2 |
Вот изображение с указанием nodejs версии 10.16.2 для создания контейнера. Если версия не указана, по умолчанию будет загружена последняя версия текущего зеркала. |
/bin/bash -c "cd /app/vue2 && node -v && npm install && npm run serve" |
/bin/bash: позволяет виртуальному терминалу, назначенному контейнером, выполнять команду в режиме bash. -c ""cd /app/vue2 && node -v && npm install && npm run serve: может быть выполнена только одна команда оболочки, если требуется несколько команд, используйте &&, |
Принципиальная схема работы docker run
После успешного запуска приведенного выше кода на нашем компьютере будет два контейнера докеров, работающих независимо друг от друга.
4.3 Отладка
Часто используемые команды отладки 1
# 运行后按ctrl + c 可退出
docker logs -f contianer_name/container_id
Конечно, когда контейнер компилируется или возникает ошибка или даже выход, мы можем использовать эту команду для просмотра информации, выводимой терминалом.
🌰: после успешного запуска просмотрите в реальном времени информацию о выходе npm run serve контейнера myvue на терминале.
#查看docker container的终端输出信息
docker logs -f myvue2
Общие команды отладки 2
# 打印出容器的端口映射、目录挂载、网络等等
docker inspect myvue2
5 общих рабочих команд
Существует столбец часто используемой таблицы команд операций, который необходимо сначала добавить в избранное.
команда операции с зеркалом
# 搜索镜像
docker search [images_name:tag]
# 下载镜像(:指定版本)
docker pull [images_name:tag]
# 查看本地下载的镜像
docker images
# 自己构建镜像
# 根据dockerfile的路径或者url构建镜像
docker build [OPTIONS] PATH|URL|-
# 查看镜像的构建历史
docker history [images_name]
# 删除镜像
# 需要先删除以此镜像为基础的容器
docker rmi [images_name]
команда операции с контейнером
# 查看运行中的容器
# 可以查看容器ID、基础镜像、容器名称、运行状态、端口映射等
docker ps
# 查看所有容器:包括停止的
docker ps -a
# 查看容器的信息
# 例如端口号的映射、目录挂载
docker inspect [images_name/images_id]
# 启动和停止容器
docker start/stop [container_name/container_id]
# 重启容器
# 使用场景实例:
# 在加入新的npm包依赖需要重新编译的时候使用重启运行编译
# nginx容器的配置更新后需要重启生效
docker restart [container_name/container_id]
# 进入容器
# ps:有些容器没有bash,需要改成/bin/sh,例如mysq、mongodb的
# 退出人容器输入exit 回车键
docker exec -it [container_name/container_id] /bin/bash
# 删除容器
# 在容器停止的状态才能删
docker rm [container_name/container_id]
# 容器主机文件拷
# 将容器文件拷贝到主机
docker cp [container_id/container_name] : [文件目录] [主机目录]
# 将主机的目录拷贝到容器
docker cp [主机目录] [container_id/container_name] : [文件目录]
6 Расширенный
Если подходящего образа нет, мы обычно используем Dockerfile для создания пользовательского образа.
Вы нашли это, вышеdocker run
Можно создать и запустить только один докер-контейнер, мы можем использоватьdocker-compose
Для одновременного запуска нескольких контейнеров часто используется установка нескольких служб на одном компьютере.
Я обновлю его позже.Если вам интересно, вы также можете увидеть, что я развернул с помощью докера.Jenkins автоматизирует развертывание сред CI/CDСуществует также использование docker-compose