Понимание Docker с 0

Node.js внешний интерфейс GitHub Docker
Понимание Docker с 0

Оригинальный адрес:GitHub.com/so coder/no...

Возможно, ударный отдел ХХ должен называться так: «Поймите Докера, просто прочтите это! 》

последовательность

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

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

принцип

Самое простое и наиболее неправильно понимаемое представление о Docker состоит в том, что «Docker — это очень производительная виртуальная машина».

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

В Docker есть три основных понятия: образ, контейнер и репозиторий.

  • Изображение:Большинство программистов, склонных получать «карточку хорошего человека», должны быть правы.зеркалоКонцепция не является незнакомой. Но по сравнению с iso-образом windows образ в Docker многоуровневый и многоразовый, а не простая куча сложенных вместе файлов (аналогично разнице между исходным кодом сжатого пакета и git-репозитория).

  • Контейнер:Существование контейнера неотделимо от поддержки образа, который является носителем среды выполнения образа (по аналогии с отношениями между экземплярами и классами). Опираясь на технологию виртуализации Docker, для контейнеров создаются независимые порты, процессы, файлы и другие «пространства».Контейнер — это «контейнер», изолированный от хост-машины. Контейнеры и хосты могут взаимодействовать с портами, томами, сетями и т. д.

  • Репозиторий:Репозиторий Docker похож на репозиторий git с именем и тегом репозитория. После сборки образа локально его можно распространять через репозиторий. Обычно используемые концентраторы Docker: https://hub.docker.com/, https://cr.console.aliyun.com/ и т. д.

Связанные команды

1. Установка

Установка Docker очень удобна, и есть инструменты или скрипты для установки в один клик под macOS, ubuntu и т.д. Еще можно обратиться кОфициальное руководство по Docker.

После установки введите его в Терминалеdocker, если есть инструкция по применению, в большинстве случаев это означает, что установка прошла успешно.

2. Найдите базовое изображение

DockerHubКогда веб-сайт предоставляет много зеркал, как правило, мы находим зеркало из него в качестве базового зеркала, а затем выполняем наши последующие операции.

Здесь мы беремubuntuВозьмите базовый образ в качестве примера для настройки среды узла.

Из-за «слишком длинной ссылки» внутренний доступ к Docker Hub может быть медленным, и вы можете использовать ускорители изображений, предоставляемые многими отечественными производителями.

3. Извлеките базовое изображение

использоватьdocker pullКоманда может перетащить зеркало с соответствующего узлового веб-сайта на локальный. При этом в процессе вытягивания видно, что зеркало вытягивается по нескольким «слоям».

> docker pull ubuntu:18.04

18.04: Pulling from library/ubuntu
c448d9b1e62f: Pull complete
0277fe36251d: Pull complete
6591defe1cd9: Pull complete
2c321da2a3ae: Pull complete
08d8a7c0ac3c: Pull complete
Digest: sha256:2152a8e6c0d13634c14aef08b6cc74cbc0ad10e4293e53d2118550a52f3064d1
Status: Downloaded newer image for ubuntu:18.04

воплощать в жизньdocker imagesВы можете увидеть все местные зеркала

> docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
ubuntu                   18.04               58c12a55082a        44 hours ago        79MB

4. Создайте контейнер Docker

docker createКоманда создает контейнер через изображение и выдает идентификатор контейнера.

> docker create --name ubuntuContainer ubuntu:18.04
0da83bc6515ea1df100c32cccaddc070199b72263663437b8fe424aadccf4778

использоватьdocker startдля запуска контейнера.

> docker start ubuntuContainer

использоватьdocker psВы можете просмотреть работающий контейнер

> docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9298a27262da        ubuntu:18.04        "/bin/bash"         4 minutes ago       Up About a minute                       ubuntuContainer

использоватьdocker execвойти в контейнер.

> docker exec -it 9298
root@9298a27262da:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@9298a27262da:/# exit

использоватьdocker runМожно создать и запустить контейнер за один шаг, а затем войти в этот контейнер.

> docker run -it --name runUbuntuContainer ubuntu:18.04 /bin/bash
root@57cdd61d4383:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@57cdd61d4383:/#

# docker ps 可以查到已经成功运行了 runUbuntuContainer
> docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
57cdd61d4383        ubuntu:18.04        "/bin/bash"         9 seconds ago       Up 8 seconds                            runUbuntuContainer
9298a27262da        ubuntu:18.04        "/bin/bash"         9 minutes ago       Up 6 minutes                            ubuntuContainer

5. Установите среду Node в контейнере

После входа в контейнер все операции такие же, как и в обычной среде Устанавливаем простую нодовую среду

> apt-get update
> apt-get install wget
> wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

# 安装完之后可能当前 session 读不到 nvm 命令,可以 exit 之后再进入中终端环境
> nvm install 8.0.0
> node -v

6. Зафиксируйте контейнер для создания нового образа

Подобно тому, как Ghost устанавливает Windows, во многих случаях мы ожидаем настроить наш собственный образ, установить в нем некоторые базовые среды (такие как узел выше), а затем создать базовый образ, который мы хотим. В настоящее времяdocker commitЭто пригодилось.

> docker commit --author "rccoder" --message "curl+node" 9298 rccoder/myworkspace:v1
sha256:68e83119eefa0bfdc8e523ab4d16c8cf76770dbb08bad1e32af1c872735e6f71

# 通过 docker images 就能看到新制作的 rccoder/myworkspace 就躺在这里了
>docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
rccoder/myworkspace      v1              e0d73563fae8        20 seconds ago      196MB

Далее попробуйте наш только что созданный образ?

> docker run -it --name newWorkSpace rccoder/myworkspace:v1 /bin/bash
root@9109f6985735:/# node -v
8.0.0

Это выглядит нормально.

7. отправить образ в докер-хаб

После того, как изображение создано, как я могу поделиться им с другими?docker hubНапример.

Первый шаг — перейти в Docker Hub, чтобы зарегистрировать учетную запись, затем войти в учетную запись на терминале и нажать.

> docker login
> docker push rccoder/myworkspace:v1
The push refers to repository [docker.io/rccoder/myworkspace]
c0913fec0e19: Pushing [=>                                                 ]  2.783MB/116.7MB
bb1eed35aacf: Mounted from library/ubuntu
5fc1dce434ba: Mounted from library/ubuntu
c4f90a44515b: Mounted from library/ubuntu
a792400561d8: Mounted from library/ubuntu
6a4e481d02df: Waiting

8. Время использовать Dockerfile

Непрерывная интеграция с Docker? По сравнению с тем, о чем вы, должно быть, слышали до знакомства с Docker, вам случайно нужно откуда-то скопировать код и выполнить его (да, звучит немногоtravis-ciэто чувство).

Пришло время для Dockerfile!

Dockerfile — это скрипт, состоящий из набора команд + параметров, вы можете использовать docker build, чтобы выполнить скрипт для сборки образа и сделать некоторые вещи автоматически (аналогично тому, что в travis-ci.travis.yml).

Формат Dockerfile:

# Comment
INSTRUCTION arguments

должен начинаться сFROM BASE_IMAGEУкажите базовое изображение в начале.

Более подробные технические характеристики и инструкции см.Dockerfile reference. Здесь мы используем приведенный выше rccoder/myworkspace:v1 в качестве базового образа, а затем создаем каталог в корневом каталоге в качестве примера.

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

FROM rccoder/myworkspace:v1
RUN mkdir a

Затем выполните:

> docker build -t newfiledocker:v1 .
Sending build context to Docker daemon  3.584kB
Step 1/2 : FROM rccoder/myworkspace:v1
 ---> 68e83119eefa
Step 2/2 : RUN mkdir a
 ---> Running in 1127aff5fbd3
Removing intermediate container 1127aff5fbd3
 ---> 25a8a5418af0
Successfully built 25a8a5418af0
Successfully tagged newfiledocker:v1

# 新建基于 newfiledocker 的容器并在终端中打开,发现里面已经有 a 文件夹了。
> docker docker run -it newfiledocker:v1 /bin/bash
root@e3bd8ca19ffc:/# ls
a  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Благодаря мощности Dockerfile, Docker оставляет безграничные возможности.

сможет сделать

Сказав все это, что Docker может сделать в реальной производственной среде? Обычно используемые могут включать следующее (добро пожаловать, чтобы добавить в комментарии)

1. Переключение развертывания нескольких сред

При разработке бизнеса часто необходимо отличать среду разработки от онлайн-среды.Код и окружающая среда не повреждены и не загрязненыМиграция в онлайн-среду и сотрудничество с определенным автоматизированным процессом могут реализовать автоматическую публикацию.

2. Фронтенд облачная конструкция

потому чтоnode_modulesПроблема яичной боли: разные люди, разрабатывающие один и тот же склад, часто сталкиваются с разными людьми, использующими разныеверсия пакетаИ я не знал, что отличаюсь от других, что в итоге привело к проблемам с онлайном после релиза. Используя Docker, вы можете удаленно создавать новые контейнеры в облаке.Отсутствие загрязнения, низкая стоимостьстроить код, реализовыватьРазные люди должны использовать одну и ту же версию.

Не по теме:Почему я не использую термоусадочную пленку (замок)

3. Настройка в один клик для сложных сред

В некоторых сценариях могут быть настроены некоторые сверхсложные среды (например, студенты-первокурсники оснащены средой Java).В настоящее время Docker можно использовать для инкапсуляции конфигурации среды и непосредственного создания образов для всех, чтобы использовать их по низкой цене.

4. Модульное тестирование непрерывной интеграции

похож на travis-ci

5. Многоверсионная изоляция и изоляция файлов одного и того же приложения

Например, этот проект зависит от node6, а этот проект зависит от node 8 (просто пример, если жесткий диск достаточно большой, рекомендуется передатьnodeinstallРешено); 100 программ wordpress работают на одном сервере (можно использовать Docker, чтобы установить изоляцию для предотвращения взаимного загрязнения).

4. Экономьте деньги

Что ж, низкая стоимость безопасности перепродана (туман)

Ссылка на ссылку

Оригинальный адрес:GitHub.com/so coder/no...