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.io

2b Установка последней версии Docker

Чтобы установить последнюю версию Docker из репозитория docker.io, выполните эту команду

curl -s https://get.docker.io/ubuntu/ | sudo sh

3 Подготовка окружения командной строки

Теперь я добавлю своего пользователя=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 restart

4 Управление контейнерами

Я собираюсь запустить контейнер с операционной системой 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.

exit
docker commit 73527b8b4261 srijan/apache2 8ce0ea7a1528

Примечание: здесь 73527b8b4261 — это имя моего контейнера, и я использую 8ce0ea7a1528 тег для контейнера, вы можете дать любое имя тега или использовать то же самое.

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

docker ps -l -q

Это даст 73527b8b4261

Примечание: 73527b8b4261 — это имя вашего последнего созданного контейнера, оно будет отличаться в вашем случае.*

Давайте посмотрим на наш новый образ. Это можно сделать следующим образом:

docker images srijan/apache2
srijan@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:webserver
srijan@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/bash
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.