Учебное пособие по Docker для фронтенд-инженеров — основы

Docker
Учебное пособие по Docker для фронтенд-инженеров — основы

Статьи по Теме

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

Установить

Docker поддерживает окна, Mac, Linux, справочник по учебникамРуководство по установке докера.

Рекомендуется использовать Docker в системах Mac и Linux.

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

быстрый в использовании

Сначала давайте испытаем Docker.

При обычной работе, если среда разработки на нашем компьютере — Windows, и однажды мы захотим что-то сделать в среде Linux, что нам делать? (При условии отсутствия облачного сервера) В настоящее время большинство людей предпочтут установить систему Ubuntu с виртуальной машиной. Однако перед установкой виртуальной машины необходимо сначала загрузить несколько G-образов, затем настроить некоторые параметры в VMware и, наконец, подождать не менее десяти минут, пока система установится. В ожидании установки системы ubuntu, по оценкам, несколько часов были потрачены впустую.

Однако с Docker вам понадобится всего несколько минут!

# 拉取ubuntu镜像
docker pull ubuntu
# 创建一个ubuntu容器并且使用终端进行交互
docker run -it --name my-ubuntu --rm ubuntu /bin/bash

После успешного создания вы войдете в систему ubuntu, и теперь сможете выполнять в ней произвольные операции.

Примечание. Хотя текущим контейнером является система ubuntu, вы можете представить ее только как упрощенную версию ubuntu, поэтому существует множество общих команд, которые необходимо установить самостоятельно.

curl -v bilibili.com

бежать напрямуюcurlКоманда подскажет, что команда не существует

# 安装curl
apt-get update
apt-get install -y curl

После завершения установки вы можете использоватьcurlЗаказ

выйти из контейнера

exit

основная концепция

  1. Изображение: аналогично изображению на виртуальной машине. Существует два типа изображений: базовые изображения и личные изображения. Основные изображения предоставляются крупными производителями, такими какubuntuзеркало,nodeЗеркало. Персональное зеркало загружено персональными разработчиками.
  2. Контейнер (контейнер): похож на легкую песочницу. Контейнер основан на зеркале для создания,ubuntuЗеркала никак не могут взаимодействовать с нами, мы хотим, чтобы среда работалаubuntu, поэтому на основеubuntuОбраз создает контейнер.
  3. Репозиторий: как и репозиторий кода, здесь находится репозиторий образов, который Docker использует для централизованного хранения файлов изображений.

Мы можем сравнить так:

# 下载源代码
git clone deepred5/app
# 启动app
npm run start
# 拉取镜像
docker pull deepred5/app
# 创建容器
docker run deepred5/app

Docker основан на архитектуре C / S: мы выполняем команду в Docker Client, последний созданный контейнер и сервер Image будут работать в

# 可以查看server和client信息
docker info

Изображение

Общие команды

# 查找镜像
docker search ubuntu

# 拉取特定tag版本的镜像(默认是latest)
docker pull ubuntu:18.0.4

# 查看下载的所有本地镜像
docker images

# 删除镜像
docker rmi ubuntu:18.0.4

построить образ

Обычно мы создаем личные изображения на основе базовых изображений. Образ собирается по одной инструкции (Dockerfile)

Давайте построимnode-pm2Зеркало, это зеркало поставляется с узлом и pm2:

Создаватьnode-pm2Каталог и создайте новыйDockerfileдокумент

mkdir node-pm2
cd node-pm2
touch Dockerfile

редактироватьDockerfile

# 基于node11基础镜像
FROM node:11

# 一些元数据,比如作者信息
LABEL maintainer="deepred5 <deepred5@gamil.com>"

# 安装pm2
RUN npm install pm2 -g --registry=https://registry.npm.taobao.org

# 暴露容器的端口
EXPOSE 80 443

основываясь на этомDockerfileСоздадим собственное зеркалоdeepred5/node-pm2

docker build -t deepred5/node-pm2:1.0 .

Обратите внимание, что в конце есть.

Проверьте наше собственное зеркало

# 可以看到deepred5/node-pm2镜像了
docker images

на основеdeepred5/node-pm2Изображение запускает контейнер

docker run -it deepred5/node-pm2:1.0 /bin/bash

Оказавшись внутри контейнера, мы запускаемpm2 -v, вы можете видеть, что pm2 был успешно установлен

загрузить изображение

Если мы хотим создать изображение локально и можно использовать другими, нам нужно загрузить изображение в репозиторий. Авторизоватьсяdockerhub, зарегистрировать аккаунт.

# 登入账户,输入用户名和密码
docker login

# 上传镜像
docker push deepred5/node-pm2:1.0

Уведомление:deepred5/node-pm2изменить на你的用户名/node-pm2, вам нужно восстановить你的用户名/node-pm2изображение перед загрузкой в ​​dockerhub

Контейнер

Мы в основном имеем дело с контейнерами все время.

# 基于ubuntu镜像创建my-ubuntu容器。如果本地没有ubuntu镜像,会先去docker pull下载
docker run -it ubuntu:latest --name my-ubuntu /bin/bash

Объяснение параметра:

-i: позволяет взаимодействовать со стандартным вводом (STDIN) внутри контейнера.

-t: укажите псевдотерминал или терминал внутри нового контейнера.

--name: Имя контейнера, по умолчанию это случайное имя.

/bin/bash: команда для выполнения сразу после запуска контейнера

# 停止容器
docker stop my-ubuntu

# 启动容器
docker start my-ubuntu

# 删除容器
docker rm my-ubuntu

# 删除所有容器
docker rm `docker ps -aq`
# 查看正在运行的容器
docker ps

# 查看所有创建过的容器(运行或者关闭)
docker ps -a

docker start my-ubuntuЗапущенный контейнер, хотя контейнер запущен, мы не можем войти в контейнер.

Как снова попасть в контейнер?

docker exec -it my-ubuntu /bin/bash

Два слоя контейнеров

  • работать в интерактивном режиме (-it)
  • демонизированный (без интерактивных сеансов, длительный, подходит для запуска приложений и служб) (-d)

Сравнить можно так:

node index.js: запустить в интерактивном режиме

pm2 start index.js: работа демона

В основном работает демонизированный контейнер

# 启动了容器,然后容器立即关闭
docker run ubuntu /bin/bash

# 启动了容器,并开启了交互式的终端,只有输入exit才退出终端,退出终端后,容器仍然在后台运行
docker run -it ubuntu /bin/bash

# 启动了容器,并且在后台一直运行,每隔1s输出hello world
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

Просмотр журналов контейнера

docker run -d --name my_container ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
# 查看后台运行的日志
docker logs my_container

# 实时监控(类似tail -f)
docker logs -f my_container

# 获取最后10行
docker logs --tail 10 my_container

# 实时查看最近的日志
docker logs --tail 0 -f my_container

# 加上时间戳
docker logs -t my_container

Ссылаться на