Учебное пособие по Docker для начинающих, ориентированное на серверную часть: Actual Combat

Docker

предисловие

В предыдущих двух статьях мыУчебное пособие по Docker для начинающих: основыпрошедший

  1. Что такое Докер?
  2. Почему Докер?
  3. Какие проблемы конкретно решает Docker?

Эти три вопроса помогут вам лучше понять Docker, а затем во второй статьеТри элемента Docker: образы, контейнеры и репозитории.Я объяснил три основных понятия в докере. Изучив эти две статьи, что вы думаете о Docker? На этот вопрос есть свой ответ, поэтому после понимания этих концепций мы будем использовать Docker через настоящую командную строку и сможем выполнять некоторые основные операции.

Ничего лишнего, сразу переходим к коду:

Установка докера:

Прежде чем использовать Docker, нам нужно сначала установить Docker.Здесь я перечислю только самый простой способ установки.Если вам нужны другие способы установки, вы можете обратиться к официальной документации - Quick Start.Выше есть более подробные руководства по установке.

Установка докера (ням):

#在终端输入yum命令,安装docker及相关依赖
yum install docker

#启动docker 服务:centos 7+
systemctl start docker 

#启动docker 服务:centos 6+
service docker restart

Убедитесь, что Docker успешно установлен:

#从docker官方仓库拉取docker hello-world镜像
docker pull hello-world

#运行hello-world镜像
docker run hello-world

Если появляется сообщение Hello from Docker!, это означает, что наш Docker был установлен правильно.

Примечание:

Поскольку официальный источник образа докера находится за границей, многие отечественные студенты, которые изучают докер на низкоуровневых виртуальных машинах, особенно медленно загружают образы.Фактическая скорость измерения сервера Alibaba Cloud в порядке.Например, студенты, которые загружают медленно, могут попробовать Чтобы заменить внутреннее хранилище Alibaba Cloud или зеркальный склад Netease Cloud, студенты, которые в нем нуждаются, могут искать соответствующие учебные пособия в Интернете.

Операция с образом Docker:

Docker идеально интегрирован с Linux, поэтому стиль командной строки Docker относительно близок к стилю Linux, и начать работу с ним относительно легко.Для начала давайте поговорим о командах, связанных с зеркалированием:

#搜索镜像:
docker search 镜像名
#例:docker search centos 搜索centos相关的镜像。

#拉取镜像到本地服务器 默认TAG是lastet即最新版本
docker pull 镜像名:TAG

#例:docker pull mysql or docker pull mysql:5.6 拉取最新版本或者5.6版本的mysql镜像

#查看所有镜像:
docker images 

##查看顶层镜像
docker image ls

#查看中间层镜像
docker image ls -a

#在之前的基础篇中有说到,docker的镜像是分层来存储的,为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像,这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导致上层镜像因为依赖丢失而出错。实际上,这些镜像也没必要删除,因为之前说过,相同的层只会存一遍,而这些镜像是别的镜像的依赖,因此并不会因为它们被列出来而多存了一份,无论如何你也会需要它们。只要删除那些依赖它们的镜像后,这些依赖的中间层镜像也会被连带删除。

#列出部分镜像,如果不指定的话,TAG部分可以省略
docker image ls ubuntu:18.04

#删除镜像
docker image rm 镜像ID

#批量删除镜像:
docker image rm $(docker image ls -q redis) 

Выполните команду docker images, как показано на следующем рисунке:

список содержитИмя репозитория, метка, идентификатор изображения, время созданияа такжезанятое пространство.

Операции с контейнером Docker

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

docker run [选项] [镜像名或者IMAGEID]
例:
docker run -it centos 
-it 交互式终端运行

#比如很多比如mysql镜像,我们需要这个容器在后台运行,并不是十分需要进入容器终端,这个时候我们只需要将-it 替换成 -d 即可启动守护式容器:
docker run -d centos 

Выполнив вышеуказанную команду, мы автоматически войдем в контейнер в интерактивном режиме, как показано на рисунке:

Можно обнаружить, что мы фактически ввели bin/bash внутри контейнера centos, где мы можем ввести соответствующие команды для работы с нашим контейнером. Если вы просто хотите создать контейнер и не торопитесь, вы можете использоватьcreateЗаказ:

#创建一个容器但是不立即启动
docker creat 镜像名或者镜像ID

#例:docker create centos

#docker容器默认命名规则是科学家+他的发现,如果我们需要自定义自己的别名,比如说centos容器叫mycentos,我们需要加入--name选项
docker run -it --name [别名] [镜像名]

#例:docker run -it --name mycentos centos

Когда у нас есть некоторые приложения, такие как tomcat, которые должны использовать определенный порт для предоставления услуг снаружи, мы можем использовать-pПараметр настраивает сопоставление портов между хостом и контейнером на примере tomcat:

docker run -it -p 8899:8080 tomcat
-p 配置端口映射

Таким образом, когда мы посещаем ip:8899, мы обнаружим, что домашняя страница tomcat появляется в браузере, а порт в это время правильно сопоставлен с портом 8080 в контейнере.

Конечно, для выхода из интерактивного терминала Docker также предоставляет нам два способа на выбор:

#退出交互式命令环境:这种是比较优雅的退出,退出后容器仍然在运行
Ctrl+P+Q

exit 
#不太优雅的方式,退出之后容器也会停止

Если после выхода я пожалею об этом, и вдруг захочется снова что-то изменить в терминале контейнера, и повторно войти в интерактивный терминал контейнера, Docker предоставляет следующие два метода:

docker attach  [别名或IMAGEID] 

##推荐第二种
docker exec -it centos bash
##docker exec :在运行的容器中执行命令

В дополнение к вышеперечисленному контейнеры Docker также поддерживают такие операции, как запуск, перезапуск и удаление:

#停止容器: 温柔式,正常关机
docker stop [别名或IMAGEID]
#例 
docker stop mycentos

#强制停止容器: 拔插头
docker kill [别名或IMAGEID] 

#启动容器:
docker start  [别名或IMAGEID] 
#重启容器:
docker restart  [别名或IMAGEID] 
#删除容器,只能删除停止的容器
docker rm [别名或IMAGEID] 

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

#查看正在运行的容器
docker ps

#查看所有容器,包括已经停止的容器
docker ps -a

Получить информацию о выходе контейнера:

docker logs container 

Объем данных контейнера:

В некоторых случаях нам необходимо выполнить резервное копирование данных в контейнере на наш хост в режиме реального времени.Также в Docker он поддерживает создание общего каталога между контейнером и хостом, и его очень просто использовать, просто добавьте а-vвариант на нем.

#例,执行过之后,我们在宿主机目录中创建一个新文件,容器内目录也会相应的出现这个文件,所以就可以把mysql数据存放的目录通过这种方式和宿主机共享,达到实时备份数据的目的。
docker run -it -v /宿主机目录:/容器内目录 centos /bin/bash
 
#如果需要给容器内目录设定权限,则只需要加上 ro 即可,read -only 的缩写
docker run -it -v /宿主机目录:/容器内目录:ro /bin/bash
ro 只读,这样我们宿主机在共享目录里面创建的文件在容器内是只读的
 
#查看容器是否挂载成功:
docker inspect 容器ID

Создайте образ Docker:

Используйте команду фиксации для создания образа:

Много раз мы неизбежно будем изменять контейнер, например, изменять файлы конфигурации tomcat, mysql и т. д., но если вы настроите идентичный контейнер tomcat, вам нужно будет повторно изменить файл конфигурации.команда фиксацииПереупакуйте текущий контейнер в образ. Если вы сейчас измените порт в контейнере tomcat на 8081, то мы используем фиксацию для упаковки контейнера в образ. После того, как мы запустим этот новый образ, мы обнаружим, что порт по умолчанию для tomcat в изображение 8081.

Мы настроили изменения и хотели сохранить их как зеркала. Помните, когда мы запускаем контейнер (если мы не используем тома), любые изменения файлов, которые мы делаем, будут записаны на уровне хранилища контейнера. Docker предоставляет команду docker commit, которая может сохранить уровень хранения контейнера в виде образа. Другими словами, на основе исходного изображения слой хранения контейнера накладывается для формирования нового изображения. Когда мы в будущем запустим этот новый образ, у нас будут последние изменения файлов исходного контейнера.

docker commit [选项] <容器 ID 或容器名> [<仓库名>[:<标签>]]

#例:
docker commit \
--author "Tao Wang <twang2218@gmail.com>" \
--message "修改了默认网页" \
webserver \
nginx:v2

##其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。这点和 git 版本控制相似,不过这里这些信息可以省略留空。

Используйте DockerFile для настройки образа:

Несмотря на то, что Docker предоставляет коммиты для создания образов, он все равно кажется немного громоздким. Если мы сможем записать каждый слой команд модификации, установки, построения и работы в сценарий и использовать этот сценарий для построения и настройки образа, то ранее упомянутые проблемы, которые невозможно повторить, проблема прозрачности построения изображения и том Проблемы будут решены. Этот скрипт является Dockerfile. Dockerfile — это текстовый файл, который содержит инструкции (Instruction), каждая инструкция создает слой, поэтому содержание каждой инструкции должно описывать, как должен быть построен слой.

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

Так как наше предыдущее зеркало Centos сохраняет только основные функции Centos, а многие часто используемые программы — нет, мы планируем сделать простое зеркало Centos, которое будет иметь редактор vim и инструменты net-tools на исходной основе.

Сначала создайте новый файл DockerFile и напишите следующее содержимое:

from centos  //继承至centos
ENV mypath /tmp  //设置环境变量
WORKDIR $mypath //指定工作目录

RUN yum -y install vim //执行yum命令安装vim
RUN yum -y install net-tools //执行yum命令安装net-tools

EXPOSE 80 //对外默认暴露的端口是80
CMD /bin/bash //CMD 容器启动命令,在运行容器的时候会自动执行这行命令,比如当我们 docker run -it centos 的时候,就会直接进入bash

Затем скомпилируйте образ:

然后编译该镜像
docker build -f ./DockerFile -t mycentos:1.3.
-t 新镜像名字:版本
-f 文件 -d 文件夹

После того, как мы выполним команду docker images, появится новый созданный нами образ, mycentos:1.3 , запустите образ, и вы обнаружите, что vim и net-tools можно использовать в обычном режиме.

Наконец, сделали.

Начнем техническое резюме:

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

Наконец, соответствующие заметки были одновременно открыты для Github (приветственная звезда):GitHub.com/Хан Шуайкан…