Docker · 6 min read · Feb 05, 2026
Управление контейнерами Linux с Docker на Ubuntu
Управление контейнерами Linux с Docker на Ubuntu
Версия: 1.0
Авторы: Сриджан Кишор
Последнее редактирование: 02 /Июл/2014
Этот гид объясняет, как установить Docker и эффективно управлять виртуальными машинами. Docker — это платформа виртуализации Linux с открытым исходным кодом для разработчиков и системных администраторов, позволяющая легко создавать, развертывать и выполнять распределенные приложения. Docker состоит из Docker Engine, легкого времени выполнения и слоя виртуализации, инструментов для упаковки и версионирования виртуальных машин, аналогичных репозиторию исходного кода, и Docker Hub, сервиса в облаке для обмена приложениями и автоматизации рабочего процесса. Docker позволяет быстро собирать приложения из компонентов и устраняет трение между средами разработки, контроля качества и производства.
1 Предварительная заметка
В моем случае у меня установлена Ubuntu 14.04, на которой я буду устанавливать Docker. На рынке программного обеспечения для виртуализации у нас есть несколько технологий полной аппаратной виртуализации, таких как KVM, Xen или Hyper-V. Но полные визуализации слишком тяжелы для виртуализации отдельных приложений на Linux. Мы можем преодолеть эту ситуацию, используя контейнеры Linux, которые являются хорошей альтернативой визуализации на уровне операционной системы. Контейнеры Linux очень полезны для создания защищенной среды разработки/тестирования в группе контейнеров. Docker предоставляет среду контейнеров Linux для этой цели.
2 Установка
Как я уже упоминал, у меня установлена Ubuntu, на которой я собираюсь установить Docker. В этой главе я покажу вам 2 варианта установки Docker, в 2a я использую версию Docker из репозитория Ubuntu, эта версия поддерживается Ubuntu в течение 5 лет полной поддержки LTS, но это не последняя версия. В 2b я буду использовать последнюю версию из репозитория PPA Ubuntu. Поскольку Docker находится в активной разработке, последняя версия Docker из 2b) скорее всего подойдет большинству пользователей. Пожалуйста, используйте либо метод 2a, либо 2b, но не оба одновременно!
2a Установка из официального репозитория Ubuntu
Чтобы установить, используйте:
sudo apt-get update
sudo apt-get install docker.ioи создайте символическую ссылку, чтобы упростить использование в командной строке.
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io2b Установка последней версии Docker
Чтобы установить последнюю версию Docker из репозитория docker.io, выполните эту команду
curl -s https://get.docker.io/ubuntu/ | sudo sh3 Подготовка окружения командной строки
Теперь я добавлю своего пользователя=srijan в группу docker
sudo usermod -a -G docker srijanИли используйте:
sudo usermod -a -G docker $USERЗдесь я выйду из текущей сессии и снова войду. Теперь я добавлю файл конфигурации Docker, чтобы система была уведомлена о его местоположении.
sudo vi /etc/default/docker.io| DOCKER="/usr/bin/docker.io" |
Теперь перезапустите службу следующим образом:
sudo service docker.io restart4 Управление контейнерами
Я собираюсь запустить контейнер с операционной системой Ubuntu. Я загружу образ Docker следующим образом:
docker pull ubuntu Примечание: pull используется для загрузки образа или репозитория из реестра Теперь я войду в оболочку bash контейнера ubuntu, используя:
docker run -i -t ubuntu /bin/bashПросто для подтверждения я проверю свой IP контейнера следующим образом:
root@fd98ee950252:/# ifconfig
eth0 Link encap:Ethernet HWaddr 5a:a6:c6:88:f2:48
inet addr:172.17.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::58a6:c6ff:fe88:f248/64 Scope:Link
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:7 errors:0 dropped:2 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:558 (558.0 B) TX bytes:648 (648.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
root@fd98ee950252:/#У меня IP 172.17.0.3 в моем контейнере. Аналогично, я могу использовать и другие контейнеры. Чтобы выйти из контейнера, просто введите:
exitАналогично, вы можете иметь контейнеры других ОС, например.
Я хочу использовать контейнер Debian, я использую код:
docker run -i -t debian /bin/bashЕсли вы хотите иметь конкретное дистрибутив, используйте:
docker run -i -t ubuntu:12.04 /bin/bashЭто создаст контейнер ubuntu12.04. Я проверю это следующим образом:
root@44b56100fd1f:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"
root@44b56100fd1f:/#4 Создание собственных образов
Существует два способа создания образа Docker:
- Через команду docker commit
- Через команду docker build с Dockerfile
Метод docker commit в настоящее время не рекомендуется, так как создание с помощью Dockerfile гораздо более гибкое и мощное, но мы продемонстрируем его для полноты картины. После этого я сосредоточусь на рекомендуемом методе создания образов Docker: написании Dockerfile и использовании команды docker build.
4.1 Использование Docker commit для создания образов
Я создам контейнер, внесу изменения в этот контейнер, как вы бы изменили код, а затем зафиксирую эти изменения в новом образе.
Давайте начнем с создания контейнера из образа ubuntu, который мы использовали ранее.
docker run -i -t ubuntu /bin/bash
root@73527b8b4261:/#Примечание: Обратите внимание, что root показывает имя хоста 73527b8b4261, это имя контейнера, созданного, и оно будет отличаться в вашем случае.Далее я установлю apache в него:
apt-get install apache2Я запустил контейнер и затем установил Apache внутри него. Теперь я собираюсь использовать этот контейнер в качестве веб-сервера, поэтому я сохраню его в текущем состоянии.
Это избавит нас от необходимости восстанавливать его с Apache каждый раз, когда я создаю новый контейнер. Для этого я выйду из контейнера, используя команду exit,
и использую команду docker commit.
exitdocker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528Примечание: здесь 73527b8b4261 — это имя моего контейнера, и я использую 8ce0ea7a1528 тег для контейнера, вы можете дать любое имя тега или использовать то же самое.
Предположим, вы забыли идентификатор последнего созданного контейнера, вы можете использовать:
docker ps -l -qЭто даст 73527b8b4261
Примечание: 73527b8b4261 — это имя вашего последнего созданного контейнера, оно будет отличаться в вашем случае.*Давайте посмотрим на наш новый образ. Это можно сделать следующим образом:
docker images srijan/apache2srijan@vboxtest:~$ docker images srijan/apache2
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
srijan/apache2 8ce0ea7a1528 741155868ac8 6 minutes ago 207.2 MB
srijan@vboxtest:~$Примечание: Здесь 8ce0ea7a1528 — это имя тега, которое я использовал во время сохранения контейнера,
Примечание: 741155868ac8 — это IMAGE ID этого контейнера
Примечание: Все эти значения будут отличаться в вашем случае, так как во время сохранения контейнера Docker генерирует случайные имена для нихТеперь я сохраню настроенный образ следующим образом:
docker commit -m="Новый пользовательский образ" --author="Сриджан Кишор" 73527b8b4261 srijan/apache2:webserver Это даст результат:
srijan@vboxtest:~$ docker commit -m="Новый пользовательский образ" --author="Сриджан Кишор" 73527b8b4261 srijan/apache2:webserver
f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fecЧтобы запустить контейнер из нашего нового образа, мы можем сделать это с помощью команды docker run.
docker run -t -i srijan/apache2:webserver /bin/bashМы можем проверить наш зафиксированный образ следующим образом:
docker inspect srijan/apache2:webserversrijan@vboxtest:~$ docker inspect srijan/apache2:webserver
[{
"Architecture": "amd64",
"Author": "Сриджан Кишор",
"Comment": "Новый пользовательский образ",
"Config": {
"AttachStderr": false,
"AttachStdin": false,
"AttachStdout": false,
"Cmd": [
"/bin/bash"
],
"CpuShares": 0,
"Cpuset": "",
"Domainname": "",
"Entrypoint": null,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"ExposedPorts": null,
"Hostname": "",
"Image": "",
"Memory": 0,
"MemorySwap": 0,
"NetworkDisabled": false,
"OnBuild": null,
"OpenStdin": false,
"PortSpecs": null,
"StdinOnce": false,
"Tty": false,
"User": "",
"Volumes": null,
"WorkingDir": ""
},
"Container": "73527b8b42614f6ecd83fb5f9822d6086988d3b68fd5e32b4afbc7cd415402fd",
"ContainerConfig": {
"AttachStderr": true,
"AttachStdin": true,
"AttachStdout": true,
"Cmd": [
"/bin/bash"
],
"CpuShares": 0,
"Cpuset": "",
"Domainname": "",
"Entrypoint": null,
"Env": [
"HOME=/",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"ExposedPorts": null,
"Hostname": "73527b8b4261",
"Image": "ubuntu",
"Memory": 0,
"MemorySwap": 0,
"NetworkDisabled": false,
"OnBuild": null,
"OpenStdin": true,
"PortSpecs": null,
"StdinOnce": true,
"Tty": true,
"User": "",
"Volumes": null,
"WorkingDir": ""
},
"Created": "2014-06-30T12:58:04.973349049Z",
"DockerVersion": "1.0.1",
"Id": "f0367362eb405c513ac002b5cf172a2c0bc6c8212eab91c613f9ee611cf92fec",
"Os": "linux",
"Parent": "ef83896b7fb99b00b9e0e6ac943826386e7edcef11a3a2f58b42011ab4a4e683",
"Size": 14463026
}
srijan@vboxtest:~$Чтобы запустить контейнер из нашего нового образа, мы можем сделать это с помощью команды docker run.
docker run -t -i srijan/apache2:webserver /bin/bashGet new posts in your inbox
No spam. Unsubscribe anytime.