Docker

Виртуальные машины и среды исполнения

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 23 июл 2017, 15:01

Теперь, прежде чем двигаться дальше, нужно научиться убирать за собой то, что намусорил...
Но для начала нужно запустить docker-сервис, демон, который после перезагрузки Linux у нас по-прежнему мёртвый:

Код: Выделить всё

[olej@xenix ~]$ sudo service docker.service start
Redirecting to /bin/systemctl start  docker.service.service
И велеть ему автоматом стартовать при загрузке системы:

Код: Выделить всё

[olej@xenix ~]$ sudo systemctl enable docker.service
[sudo] пароль для olej: 
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
Теперь смотрим плоды того, что начудили за вчера:

Код: Выделить всё

[olej@xenix ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
e8d86a0fd344        fedora:25           "/usr/bin/ping 8.8.8."   18 hours ago        Created                                       berserk_goldwasser
e4dabc20ead5        fedora:25           "/usr/bin/ping 8.8.8."   18 hours ago        Created                                       berserk_colden
06afa4ad6a0f        fedora:25           "/usr/bin/dnf install"   18 hours ago        Created                                       serene_agnesi
70ed7262f0f5        fedora:25           "/usr/bin/dnf"           18 hours ago        Exited (1) 18 hours ago                       boring_lichterman
ebce80930fd9        fedora:25           "ping 8.8.8.8"           18 hours ago        Created                                       gloomy_stallman
792410deaf56        fedora:25           "ping 8.8.8.8"           18 hours ago        Created                                       backstabbing_pasteur
220fab492cce        hello-world         "/hello"                 19 hours ago        Exited (0) 19 hours ago                       prickly_wozniak
Это очень важный вывод, потому что он нам даёт имена контейнеров (последняя колонка).
Эти все контейнеры не выполняющиеся (not running), но они существуют:

Код: Выделить всё

[olej@xenix ~]$ sudo docker exec -ti berserk_goldwasser /bin/bash
Error response from daemon: Container e8d86a0fd344200f2d5dad0c08a6211cda92228f1fe2d827978b5d3134303d24 is not running

[olej@xenix ~]$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Кроме того у нас подгружены образы (из которых мы создаём контейнеры):

Код: Выделить всё

[olej@xenix ~]$ sudo docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/fedora        25                  28fc58a59d50        2 days ago          230.9 MB
docker.io/hello-world   latest              1815c82652c0        5 weeks ago         1.84 kB
Ближайшая задача: удалять не нужные уже контейнеры и удалять ненужны образы.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 23 июл 2017, 15:04

Olej писал(а):удалять не нужные уже контейнеры

Код: Выделить всё

[olej@xenix ~]$ docker rm --help

Usage:	docker rm [OPTIONS] CONTAINER [CONTAINER...]
...

Код: Выделить всё

[olej@xenix ~]$ sudo docker rm berserk_goldwasser
berserk_goldwasser
[olej@xenix ~]$ sudo docker rm berserk_colden
berserk_colden
В итоге (сравните с тем, что было в предыдущем сообщении):

Код: Выделить всё

[olej@xenix ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
06afa4ad6a0f        fedora:25           "/usr/bin/dnf install"   18 hours ago        Created                                       serene_agnesi
70ed7262f0f5        fedora:25           "/usr/bin/dnf"           18 hours ago        Exited (1) 18 hours ago                       boring_lichterman
ebce80930fd9        fedora:25           "ping 8.8.8.8"           18 hours ago        Created                                       gloomy_stallman
792410deaf56        fedora:25           "ping 8.8.8.8"           18 hours ago        Created                                       backstabbing_pasteur
220fab492cce        hello-world         "/hello"                 19 hours ago        Exited (0) 19 hours ago                       prickly_wozniak

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 23 июл 2017, 15:08

Olej писал(а):удалять ненужны образы.

Код: Выделить всё

[olej@xenix ~]$ docker rmi --help

Usage:	docker rmi [OPTIONS] IMAGE [IMAGE...]
...

Код: Выделить всё

[olej@xenix ~]$ sudo docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 220fab492cce is using its referenced image 1815c82652c0
Не тут-то было! :-o
Не удаляется образ из которого существует созданный контейнер.
Удаляю контейнер:

Код: Выделить всё

[olej@xenix ~]$ sudo docker rm prickly_wozniak
prickly_wozniak
Вот теперь:

Код: Выделить всё

[olej@xenix ~]$ sudo docker rmi hello-world
Untagged: hello-world:latest
Untagged: docker.io/hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f
Deleted: sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57
Deleted: sha256:45761469c965421a92a69cc50e92c01e0cfa94fe026cdd1233445ea00e96289a
Сравните этот результат с тем, что показывался ранее:

Код: Выделить всё

[olej@xenix ~]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/fedora    25                  28fc58a59d50        2 days ago          230.9 MB

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 23 июл 2017, 15:21

Olej писал(а):Теперь, прежде чем двигаться дальше, нужно научиться убирать за собой то, что намусорил...
Вот теперь мы можем сколько угодно экспериментировать и двигаться дальше, потому что весь мусор потом можем убрать за собой!
Следующие важнейшие действия (пара) - это: экспорт и импорт контейнера (т.е. как его в сжатом виде сериализовать, перенести на другой компьютер, сервер, и там его восстановить).
очень хорошо и очень кратко это описано здесь: Дамп и импорт контейнеров Docker.
1.
Создаем образ контейнера

Код: Выделить всё

[root@host ~]# docker commit e198aac7112d export/server1:tag1
Где
e198aac7112d — это ID контейнера, образ которого мы создаем (мы узнали его из первой команды выше)
export/server1:tag1 — назначение, которое состоит из условного имени пользователя (владельца) export, имени образа server1 и тэга tag1. Вы можете указывать свои значения.
2.
Сохраняем образы

Код: Выделить всё

[root@host ~]# docker save export/server1 > export_server1.tar.gz
Этим самым мы получаем сжатые копии контейнеров, которые можно позже развернуть на сервере или перенести на другой.
3.
Импорт или восстановление из образа

Код: Выделить всё

[root@host ~]# docker load < export_server1.tar.gz

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 23 июл 2017, 15:43

Olej писал(а): Следующие важнейшие действия (пара) - это: экспорт и импорт контейнера (т.е. как его в сжатом виде сериализовать, перенести на другой компьютер, сервер, и там его восстановить).
Поскольку это самые востребованные действия, которые являются смыслом Docker, то по ним есть отдельные соответствующие man-ы ... и их даже стоит зацитировать (они мне ещё сильно понадобятся перед глазами ;-) ):

Код: Выделить всё

[olej@xenix ~]$ man docker-export

DOCKER(1)                                                               JUNE 2014                                                              DOCKER(1)

NAME
       docker-export - Export the contents of a container's filesystem as a tar archive

SYNOPSIS
       docker export [--help] [-o|--output[=""]] CONTAINER

DESCRIPTION
       Export  the contents of a container's filesystem using the full or shortened container ID or container name. The output is exported to STDOUT and
       can be redirected to a tar file.

       Stream to a file instead of STDOUT by using -o.

OPTIONS
       --help
         Print usage statement

       -o, --output=""
         Write to a file, instead of STDOUT

EXAMPLES
       Export the contents of the container called angry_bell to a tar file called angry_bell.tar:

              # docker export angry_bell > angry_bell.tar
              # docker export --output=angry_bell-latest.tar angry_bell
              # ls -sh angry_bell.tar
              321M angry_bell.tar
              # ls -sh angry_bell-latest.tar
              321M angry_bell-latest.tar

See also
       docker-import(1) to create an empty filesystem image and import the contents of the tarball into it, then optionally tag it.

HISTORY
       April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal  work.   June  2014,
       updated by Sven Dowideit ⟨SvenDowideit@home.org.au⟩ January 2015, updated by Joseph Kern (josephakern at gmail dot com)

Docker Community                                                   Docker User Manuals                                                         DOCKER(1)

Код: Выделить всё

[olej@xenix ~]$ man docker-import

DOCKER(1)                                                               JUNE 2014                                                              DOCKER(1)

NAME
       docker-import - Create an empty filesystem image and import the contents of the tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then
       optionally tag it.

SYNOPSIS
       docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] [--help] file|URL|-[REPOSITORY[:TAG]]

OPTIONS
       -c, --change=[]
          Apply specified Dockerfile instructions while importing the image
          Supported Dockerfile instructions: CMD|ENTRYPOINT|ENV|EXPOSE|ONBUILD|USER|VOLUME|WORKDIR

       --help
         Print usage statement

       -m, --message=""
          Set commit message for imported image

DESCRIPTION
       Create a new filesystem image from the contents of a tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then optionally tag it.

EXAMPLES
Import from a remote location
              # docker import http://example.com/exampleimage.tgz example/imagerepo

Import from a local file
       Import to docker via pipe and stdin:

              # cat exampleimage.tgz | docker import - example/imagelocal

       Import with a commit message.

              # cat exampleimage.tgz | docker import --message "New image imported from tarball" - exampleimagelocal:new

       Import to a Docker image from a local file.

              # docker import /path/to/exampleimage.tgz

Import from a local file and tag
       Import to docker via pipe and stdin:

              # cat exampleimageV2.tgz | docker import - example/imagelocal:V-2.0

Import from a local directory
              # tar -c . | docker import - exampleimagedir

Apply specified Dockerfile instructions while importing the image
       This example sets the docker image ENV variable DEBUG to true by default.

              # tar -c . | docker import -c="ENV DEBUG true" - exampleimagedir

See also
       docker-export(1) to export the contents of a filesystem as a tar archive to STDOUT.

HISTORY
       April 2014, Originally compiled by William Henry (whenry at redhat dot com) based on docker.com source material and internal  work.   June  2014,
       updated by Sven Dowideit ⟨SvenDowideit@home.org.au⟩

Docker Community                                                   Docker User Manuals                                                         DOCKER(1)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 28 июл 2017, 09:54

Olej писал(а): N.B. Любой запуск docker без прав root, с любой самой безобидной командой, запросом информации и т.п. приведёт к выводу:

Код: Выделить всё

[olej@xenix ~]$ docker images
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Что может сильно привести в замешательство и ввести в недоумение! ;-)
Docker. Управление образами и контейнерами
may 2016
Права на запуск docker
Чтобы запускать Docker контейнеры под своим пользователем (без sudo), нужно добавиться в соответствующую группу:

Код: Выделить всё

sudo usermod -aG docker YOU_USER
Но всё нужно проверять!
P.S. Никому нельзя верить ... как страшно жить! ;-)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 28 июл 2017, 10:07

Olej писал(а):Но всё нужно проверять!
P.S. Никому нельзя верить ... как страшно жить! ;-)

Код: Выделить всё

[olej@xenix ~]$ sudo usermod -aG docker olej
[sudo] пароль для olej:
usermod: группа «docker» не существует
Ладно... :-(

Код: Выделить всё

[olej@xenix ~]$ sudo groupadd docker
[olej@xenix ~]$ sudo usermod -aG docker olej
dk.png
Пробуем:

Код: Выделить всё

[olej@xenix ~]$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

[olej@xenix ~]$ sudo docker ps
[sudo] пароль для olej: 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Получается херня ... или я что-то не так делаю... :cry:
Это буду уточнять.

В документации Использование командной строки Docker тоже про это сказано:
В зависимости от конфигурации вашей Docker системы, вам может потребоваться добавлять перед каждой командой docker команду sudo. Для того, чтобы избежать необходимости использовать sudo с командами docker, ваш системный администратор может создать Unix группу docker и добавить в нее нужных пользователей.
Но это как-то не сработало...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 28 июл 2017, 10:19

Поиск образов по регистру Docker:

Код: Выделить всё

[olej@xenix ~]$ sudo docker search mint
INDEX       NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/vcatechnology/linux-mint             A Linux Mint image that is updated daily        5                    [OK]
docker.io   docker.io/vcatechnology/base-linux-mint        Base images for Linux Mint                      4                    
docker.io   docker.io/hobertony/mint-rootfs                                                                1                    
docker.io   docker.io/mintpayments/mint                    Automated Build repo for web app used Docker    1                    [OK]
docker.io   docker.io/cdbishop89/docker-mint18-ci          Linux Mint with additional packages             0                    [OK]
docker.io   docker.io/cdbishop89/linux-mint-17.3                                                           0                    
docker.io   docker.io/cdbishop89/linux-mint-18             Linux Mint 18 Docker file created from the...   0                    
docker.io   docker.io/fabiohbarbosa/linux-mint             Docker Linux Mint                               0                    [OK]
docker.io   docker.io/hobertony/mint-base                                                                  0                    
docker.io   docker.io/iltommi/docker-neutrino-mint         neutrino for mint                               0                    [OK]
docker.io   docker.io/minio/mint                           Collection of tests to detect overall corr...   0                    [OK]
docker.io   docker.io/mint/docker-whale                    docker doc test                                 0                    
docker.io   docker.io/mint/sinatra                                                                         0                    
docker.io   docker.io/nitisht/mint                         Mint repo                                       0                    [OK]
docker.io   docker.io/qcifengineering/mint                 Mint                                            0                    [OK]
docker.io   docker.io/slawekm/openregister-mint                                                            0                    
docker.io   docker.io/srid/mint-exporter                                                                   0                    [OK]
docker.io   docker.io/vcatechnology/linux-mint-ci          A Linux Mint image that is used in the VCA...   0                    [OK]
docker.io   docker.io/vcatechnology/linux-mint-toolchain   Installs packages required to work with th...   0                    [OK]
docker.io   docker.io/wwadge/mint-java                                                                     0                    
docker.io   docker.io/wwadge/mint-keycloak                                                                 0                    
docker.io   docker.io/wwadge/mint-os                                                                       0                    
docker.io   docker.io/wwadge/mint-postgresql                                                               0                    
docker.io   docker.io/wwadge/mint-rabbitmq                                                                 0                    
docker.io   docker.io/y4m4/mint                                                                            0             
Загружу образ ... на вскидку :lol:

Код: Выделить всё

[olej@xenix ~]$ sudo docker pull docker.io/cdbishop89/docker-mint18-ci
Using default tag: latest
Trying to pull repository docker.io/cdbishop89/docker-mint18-ci ... 
sha256:7d095d26499c61651933a720d3273074132676a4ac11b1f26fd65ba631e932b6: Pulling from docker.io/cdbishop89/docker-mint18-ci
e65b64dc71a5: Pull complete 
16b24993c5ce: Pull complete 
574db0e48835: Pull complete 
78eb733f7633: Pull complete 
Digest: sha256:7d095d26499c61651933a720d3273074132676a4ac11b1f26fd65ba631e932b6
Status: Downloaded newer image for docker.io/cdbishop89/docker-mint18-ci:latest
Ну ни фига себе :-o ... подтянул:

Код: Выделить всё

[olej@xenix ~]$ sudo docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
qkd/proxy_server                        latest              c29047e43bf8        3 months ago        558.5 MB
qkd/base                                latest              52872f1783db        3 months ago        1.161 GB
docker.io/cdbishop89/docker-mint18-ci   latest              d5ff8e8ae673        10 months ago       4.67 GB
Запуск контейнера из этого образа:

Код: Выделить всё

[olej@xenix ~]$ sudo docker run --rm -ti docker-mint18-ci /bin/bash root
[sudo] пароль для olej: 
Unable to find image 'docker-mint18-ci:latest' locally
Trying to pull repository docker.io/library/docker-mint18-ci ... 
/usr/bin/docker-current: unauthorized: authentication required.
See '/usr/bin/docker-current run --help'.
... оказалось, что это совершенно бессмысленное действие:
Требует логин!
1. Где его взять? Это значит, что нужно идти искать WEB страницу на сайте Docker, содержащую этот образ? Тогда команда search абсолютно бессмысленна!
2. Имея данные аутентификации, как их записать в команде run?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 28 июл 2017, 12:26

Olej писал(а): Требует логин!
1. Где его взять? Это значит, что нужно идти искать WEB страницу на сайте Docker, содержащую этот образ? Тогда команда search абсолютно бессмысленна!
2. Имея данные аутентификации, как их записать в команде run?
Ну ... как-то так ;-) :

Код: Выделить всё

[olej@xenix ~]$ sudo docker run --rm -ti -u root docker.io/cdbishop89/docker-mint18-ci /bin/bash
c899bace9df5 / # ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link 
       valid_lft forever preferred_lft forever
c899bace9df5 / # lsb_release -a
No LSB modules are available.
Distributor ID:	LinuxMint
Description:	Linux Mint 18 Sarah
Release:	18
Codename:	sarah

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Docker

Непрочитанное сообщение Olej » 28 июл 2017, 13:51

Olej писал(а): Ну ... как-то так ;-) :

Код: Выделить всё

[olej@xenix ~]$ sudo docker run --rm -ti -u root docker.io/cdbishop89/docker-mint18-ci /bin/bash
...
Теперь тот же образ я могу запустить в другом контейнере (аналогичном):

Код: Выделить всё

[olej@xenix ~]$ sudo docker run --rm -ti -u root docker.io/cdbishop89/docker-mint18-ci /bin/bash
ab2c6c3131f2 / # ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
23: eth0@if24: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:3/64 scope link 
       valid_lft forever preferred_lft forever
ab2c6c3131f2 / # ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.094 ms
64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.091 ms
^C
--- 172.17.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2041ms
rtt min/avg/max/mdev = 0.091/0.112/0.151/0.027 ms
ab2c6c3131f2 / # cat /etc/hostname
ab2c6c3131f2
Важно то, что 2 контейнера, запущенные из одного образа стартуют с IP в одной подсети, видят друг друга.
Если импортируются разные образы, они устанавливаются в разные подсети, и не видят друг друга (без специальных усилий по пробросу трафика между).

Ответить

Вернуться в «Виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей