Начните работать с Docker, и вы почувствуете, что снова можете это делать!

Java
Начните работать с Docker, и вы почувствуете, что снова можете это делать!

Привет всем, я Сяо Цай, Сяо Цай, который хочет быть Цай Буцаем в интернет-индустрии. Она может быть мягкой или жесткой, как она мягкая, а белая проституция жесткая!Черт~ Не забудьте поставить мне тройку после прочтения!

Эта статья в основном знакомитDocker 的基本使用

При необходимости вы можете обратиться к

Если это поможет, не забудьтеподобно

Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!

Введение в Докер

Docker — это движок контейнера приложений с открытым исходным кодом, основанный наПерейти на языкИ следуйте протоколу Apache2.0 с открытым исходным кодом. Docker позволяет разработчикам упаковывать свои приложения и зависимости в легкий портативный контейнер, который затем можно распространять на любой популярный Linux-компьютер, а также можно виртуализировать. Контейнер полностью использует механизм песочницы, и не будет никакого интерфейса между собой (аналогично приложениям iPhone), и что более важно, накладные расходы на производительность контейнера крайне низки.

Сценарии приложений Docker

  • WebАвтоматизированная упаковка и публикация приложений

  • Автоматизированное тестирование и непрерывная интеграция, выпуск

  • Развертывание и настройка баз данных или других фоновых приложений в сервисной среде.

  • Создайте свою собственную среду PaaS, скомпилировав или расширив существующую платформу OpenShift или Cloud Foundry с нуля.

Преимущества Докера

  • Доставляйте приложения быстро и последовательно
  • Реактивное развертывание и масштабирование
  • Запускайте больше рабочих нагрузок на том же оборудовании

Три ядра Docker

  • Изображение

Это основа для создания контейнеров, похожих на снэпшоты виртуальных машин.

  • контейнер

Работающий экземпляр, созданный из образа, который можно запускать, останавливать и удалять. Каждый контейнер изолирован друг от друга и невидим друг для друга, что обеспечивает безопасность платформы.

  • склад

Центральное место для хранения изображений

Картинка вышеDockerЛОГОТИП также интерпретируетDockerКонцепция чего-либо.

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

Докер архитектура

  • Client

Dockerклиент. многоDockerпользователь сDockerосновной способ взаимодействия,DockerКлиенты могут взаимодействовать с несколькими демонами.

  • Docker Daemon

Dockerдемон. ответственный за прослушиваниеDocker APIзапрашивать и управлятьDockerТакие объекты, как образы, контейнеры, сети и тома. Демоны также могут общаться с другими демонами для управленияDockerСлужить.

  • Registry

Dockerхранилище реестраDockerзеркало.Docker Hubявляется общедоступным реестром, который может использовать каждый.

ВМ против контейнера

характеристика VM контейнер
уровень изоляции Уровень ОС уровень процесса
Карантинная политика Hypervisor CGroups
системный ресурс 5~15% 0~5%
Время начала минутный уровень секунды
зеркало хранения GB~TB KB~MB
размер кластера сотни Тысячи
Стратегия высокой доступности Резервное копирование, аварийное восстановление, миграция упругость, нагрузка, динамика
  • контейнер:Это абстракция прикладного уровня, используемая для объединения кода и зависимых ресурсов.Несколько контейнеров могут работать на одном компьютере, разделяя ядро ​​операционной системы, но каждый из них работает как независимый процесс в пользовательском пространстве. По сравнению с виртуальными машинами контейнеры занимают меньше места (размер образов контейнеров обычно составляет всего несколько десятков мегабайт) и могут быть запущены в одно мгновение.
  • Виртуальная машина: это абстракция физического аппаратного уровня, используемая для превращения одного сервера в несколько серверов. Гипервизор позволяет запускать несколько виртуальных машин на одной машине. Каждая виртуальная машина содержит полный набор операционной системы, одно или несколько приложений, необходимые бинарные файлы и библиотечные ресурсы, поэтому занимает много места.

Начало работы с Докером

1. Работа с зеркалом

1. Список зеркал

Заявление: docker images

  • REPOSITORY: Представляет источник репозитория изображения.

  • TAG: этикетка зеркала

  • IMAGE ID: идентификатор изображения

  • CREATED: время создания изображения

  • SIZE: Размер изображения

2. Найдите зеркало

Заявление: docker search ${image_name}

  • NAME: имя источника зеркального репозитория.
  • DESCRIPTION: описание зеркала
  • starts: оценка пользователей, отражающая популярность изображения.
  • OFFICIAL: выпущен ли докер официально
  • auto commit: автоматическая сборка, указывающая, что образ созданDocker HubСоздано автоматизированным процессом сборки

3. Потяните изображение

Заявление: docker pull ${image_name}:${image_version}

4. Удалить зеркало

  • Удалить сингл:

    docker rmi ${image_name} (or ${id})

  • Удалить несколько:

    docker rmi ${image_name}/${id} ${image_name}/${id} ...

  • удалить все:

    docker rmi `docker images -q`

5. Просмотр метаданных изображения

docker inspect ${image_name}

docker inspect -f ='{{.NetworkSettings.IPAddress}}' ${image_name}

  • -f: доступный-formatзаменять

2. Контейнерная операция

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

docker run [option] --name=${name} image command [args...]

вариант вариант:

  • -i: интерактивный контейнер
  • -t:терминал, терминал
  • -d: запустить в фоновом режиме и распечатать контейнерid

Пример:

docker run -i -t -d --name=centOS1 centos /bin/bash

=

docker run -itd --name=centOS1 centos /bin/bash

Примечание:Имя созданного контейнера не может повторяться

2. Войдите в контейнер

Способ 1:

docker attach ${name}/${id}

  • Пример:

docker attach centOS1

Примечание:использовать в контейнереexitПри выходе из контейнераконтейнер остановится

Способ 2:

docker exec -it ${name}/${id} /bin/bash

  • Пример:

docker exec -it centOS1 /bin/bash Примечание:использовать в контейнереexitПри выходе из контейнераКонтейнер не останавливается

3. Просмотр контейнера

  • Просмотр запущенных контейнеров

docker ps

  • Просмотр истории запущенных контейнеров

docker ps -a

  • Просмотр последнего запущенного контейнера

docker ps -l

4. Остановите контейнер

docker stop ${name}/${id}

5. Запустите контейнер

docker start ${name}/${id}

6. Удалите контейнер

  • удалить контейнер

docker rm ${name}/${id}

  • удалить несколько контейнеров

docker rm ${name1}/${id1} ${name2}/${id2} ...

  • удалить несколько контейнеров

docker rm ` docker ps -a -q`

7. Просмотр метаданных контейнера

docker inspect ${name}

docker inspect -f ='{{.NetworkSettings.IPAddress}}' ${name}

  • -f: доступный-formatзаменять

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

docker logs ${name}/${id}

9. Копирование файлов

docker cp 需要拷贝的文件或目录 容器名称:容器目录

Пример: docker cp 1.txt c2:/root

10. Установка каталога

Монтирование каталога заключается в сопоставлении каталога хоста с усилиями в контейнере, поэтому, когда мы изменим содержимое каталога монтирования хоста, каталог в соответствующем каталоге монтирования в контейнере также изменится.

Заявление:использовать-vустанавливатьdocker run ‐id ‐‐name=centOS1 ‐v /opt/:/usr/local centos

Если разрешений недостаточно, мы должны использовать:

docker run ‐id ‐‐privileged=true ‐‐name=c4 ‐v /opt/:/usr/local/myhtml centos

3. Зеркальное производство

Мы можем не толькоDocker HubПотяните изображение, чтобы создать контейнер, мы также можем настроить его вручную.dockerСуществует два способа создания образа системы:

  • использоватьdocker commitЗаказ
  • использоватьdocker buildСотрудничатьDockerfileдокумент

1. docker commit

1)сделать зеркало

использоватьdocker commitПеред созданием образа нам нужен работающий контейнер:

  • шаг 1

Нам нужно сначала вытащить одинcentOSВ качестве нашего базового изображения:docker pull centos

  • Шаг 2

Запустите образ, который вы только что вытащили:docker run -it --name=centOS1 centos:latest

  • Шаг 3

Устанавливаем среду в контейнер:

  1. tomcat

загрузитьtomcatПакет установки:

docker cp apache‐tomcat‐8.5.54.tar.gz centOS1:/root/

Установитьtomcat:

tar ‐zxvf apache‐tomcat‐8.5.54.tar.gz ‐C /usr/local/

редактироватьtomcatвниз/bin/setclsspath.shфайл, добавьте следующее:

export JAVA_HOME=/usr/local/jdk1.8.0_161
export JRE_HOME=/usr/local/jdk1.8.0_161/jre
  1. JDK

загрузитьJDKПакет установки:

docker cp jdk‐8u161‐linux‐x64.tar.gz centOS1:/root/

УстановитьJDK:

tar ‐zxvf jdk‐8u161‐linux‐x64.tar.gz ‐C /usr/local/

Отредактируйте файл **/etc/profile** и добавьте следующее:

JAVA_HOME=/usr/local/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH
  • Шаг 4

Зафиксируйте наш работающий контейнер как новый образ

docker commit centOS1 cbucImage

2)Сопоставление портов
  • шаг 1

Запустите контейнер:docker run ‐itd ‐‐name=t1 ‐p 8888:8080 cbucImage /bin/bash

  • Шаг 2

Запустите кота:docker exec t1 /usr/local/apache‐tomcat‐7.0.47/bin/startup.sh

Таким образом, мы можем пройтиhttp://ip:portзаходите на страницу

3)Упаковка изображения

образ пакета:

docker save ‐o /mnt/myImage.tar cbucImage

Использовать зеркалирование на других серверах:

docker load -i myImage.tar

4)контейнерная упаковка

Упаковочный контейнер:

docker export ‐o /mnt/mycentos.tar centOS1

Импортируйте контейнер:

docker import mycentos.tar centOS2:latest

2. docker builder

Dockerfileиспользовать основныеDSLсинтаксис для создания образа Docker, а затем использоватьdocker builderкоманда, основанная наDockerfileИнструкции по созданию нового образа

1)Синтаксис DSL
Ключевые слова объяснять
FROM базовое изображение
MAINTAINER информация о сопровождающем
RUN установить программное обеспечение
ADD файл COPY, который будет автоматически распакован
WORKEDIR cd изменить рабочий каталог
VOLUME монтирование каталога
EXPOSE Внутренний сервисный порт
CMD Выполните команду в Dockerfile
ENV Установить переменные среды

Разобрать:

  • 1. FROM

указанная основаimage. должны быть указаны и должны бытьDockerfileперед другими инструкциями. Последующие инструкции зависят отimage.FROMБазовый образ, указанный командой, может находиться в официальном удаленном репозитории или в локальном репозитории. Команда FROM сообщаетdockerНа каком образе (дистрибутива) основан образ, который мы создаем. если в том жеDockerfileПри создании нескольких изображений вFROMинструкция.

Формат:

FROM <image>илиFROM <image>:<tag>

  • 2. MAINTAINER

Указывает информацию о создателе изображения. дляimageИнформация о производителе записывается вimageсередина. когда мыimageвоплощать в жизньdocker inspectкоманды, в выходных данных есть соответствующее поле для записи этой информации.

Формат:

MAINTAINER <name>

  • 3. RUN

Установите программное обеспечение для использования. Может запускать любой базовый образПоддерживаемые команды. в качестве основногоimageвыбранныйubuntu, так мягко Часть управления файлами может использоваться толькоubuntuКоманда.

Формат:

RUN <command>

  • 4. CMD

настраиватьcontainerДействие, выполняемое при запуске. Действием может быть выполнение пользовательского сценария или выполнение системной команды. Эта инструкция может существовать в файле только один раз, если их несколько, будет выполнена только последняя.

Формат:

CMD command param1 param2

  • 5. ENTRYPOINT

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

Формат: ENTRYPOINT command param1 param2

Сцена 1:

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

Пример: только в этот разENTRYPOINTбудет выполнять

CMD ls -l
ENTRYPOINT ls ‐l

Сценарий 2:

а такжеCMDдирективы используются вместе для указанияENTRYPOINTпараметры по умолчанию, тоCMDДиректива — это не полная исполняемая команда, а только часть параметра.ENTRYPOINTИнструкции можно использовать толькоJSONМетод указывает команду выполнения, но не параметры.

пример:

CMD ["‐l"]
ENTRYPOINT ["/usr/bin/ls"]
  • 6. USER

настраиватьcontainerПользователь контейнера, по умолчаниюrootПользователь

Формат:

# 指定memcached的运行用户
ENTRYPOINT ["memcached"]
USER daemon
或者
ENTRYPOINT ["memcached", "‐u", "daemon"]
  • 7. EXPOSE

Указывает порт, который контейнер должен сопоставить с хост-компьютером. Когда вам нужно получить доступ к контейнеру, вам не нужно использовать контейнерIPВместо этого используйте адрес хост-машиныIPадрес и сопоставленный порт. Для завершения всей операции требуется два шага, сначала в Dockerfile используйтеEXPOSEУстановите порт контейнера, который необходимо сопоставить, а затем укажите его при запуске контейнера.-Испуганныйвариант плюсEXPOSEставь такой портEXPOSEУстановленный номер порта будет случайным образом сопоставлен с номером порта на хост-компьютере. Вы также можете указать порт, который необходимо сопоставить с хост-компьютером.В этом случае убедитесь, что номер порта на хост-компьютере не используется.EXPOSEКоманда может задавать несколько номеров портов одновременно, и когда соответствующий контейнер запущен, ее можно использовать несколько раз.-Испуганныйопции.

Формат:

EXPOSE <port> [<port>...]
# 映射一个端口
EXPOSE port1
# 相应的运行容器使用的命令
docker run ‐p port1 image
# 映射多个端口
EXPOSE port1 port2 port3
# 相应的运行容器使用的命令
docker run ‐p port1 ‐p port2 ‐p port3 image
# 还可以指定需要映射到宿主机器上的某个端口号
docker run ‐p host_port1:port1 ‐p host_port2:port2 ‐p host_port3:port3 image
  • 8. ENV

Используется для установки переменных среды. После настройки последующиеRUNможно использовать команды,containerПосле запуска можно пройтиdocker inspectЧтобы просмотреть эту переменную среды, также можноdocker run --env ключ=значениеПри установке или изменении переменных среды.

Формат:

ENV <key> <value>
# 假如你安装了JAVA程序,需要设置JAVA_HOME,那么可以在Dockerfile中这样写:
ENV JAVA_HOME /path/java/jdk
  • 9. ADD

отsrcскопировать файл вcontainerизdestдорожка. В основном используется для добавления файлов с хоста в образ.

Формат:

# <src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url; <dest> 是container中的绝对路径
ADD <src> <dest>
  • 10. VOLUMN

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

Формат:

VOLUME ["<mountpoint>"]
# 例:VOLUME ["/tmp/data"]

пройти через этоDockerfileгенерироватьimageконтейнер,/tmp/dataДанные в каталоге все еще существуют после закрытия контейнера.

  • 11. WORKDIR

Переключение каталогов, вы можете переключаться несколько раз (эквивалентноcdкоманда), даПУСК, CMD, ТОЧКА ВХОДАэффективный.

Формат:

WORKDIR /path/to/workdir
# 在/p1, /p2下执行vim a.txt
WORKDIR /p1 WORKDIR p2 RUN vim a.txt
  • 12. ONBUILD

Выполнить в подзеркале

Формат:

# 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行
ONBUILD <Dockerfile关键字>
2)Создать образ

мы редактировалиDockerfileфайл, вDockerfileВведите команду в директорию, где она находится:

docker build ‐t cbucImage:v1.0.0 ‐‐rm=true .

Примечание:

  • -онУказывает, что вы решили указать имя пользователя, имя репозитория и тег для создания образа.

  • ‐‐rm=trueУказывает, что временный контейнер, созданный в процессе создания образа, удален.

  • Последнее в команде сборки выше.Не пропустите символ, это означает использование текущего каталогаDockerfileпостроить образ

3. Запустите образ

После того, как мы создали образ, мы можем запустить его с помощью следующей команды:

docker run ‐itd ‐‐name centos1 ‐p 8888:80 cbucImage /bin/bash

Войдите в контейнер с помощью следующей команды:

docker exec -it centos1 /bin/bash

[END]

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

看完不赞,都是坏蛋

Если вы будете усердно работать сегодня, завтра вы сможете сказать на одну вещь меньше, чтобы попросить о помощи!

Я Сяо Цай, человек, который учится у вас. 💋

Официальный аккаунт WeChat открыт,Хорошая еда, студенты, которые не обратили внимания, не забудьте обратить внимание!