Образ
Пояснения в оформлении кода:
(комментарий, пояснение в коде)
var_1 | var_2 - использовать var_1 или var_2
(abstract) - абстрактное название параметра
Образ — виртуальный, изолированный процессор. Можно привести аналогию с ВМ.
Загрузить образ:
$ docker run ubuntu:latest|version
Просмотр загруженных образов:
$ docker images -------------------- REPOSITORY TAG IMAGE ID CREATED SIZE test/appimage latest 45e13e6dba75 7 minutes ago 88.9MB v00rpm-dr.corp.tander.ru/dockerhub/phpdockerio-php73-fpm latest 1f7a0deac497 6 days ago 151MB v00rpm-dr.corp.tander.ru/dockerhub/node latest 760e12e87878 8 days ago 934MB v00rpm-dr.corp.tander.ru/dockerhub/mysql 8.0 d435eee2caa5 11 days ago 456MB
Выполнить команду в образе:
$ docker run -it(interactive mode) ubuntu (id image) /bin/bash/(execute commands) --------- ## run shell with root
Контейнер
Контейнер — экземпляр образа. Контейнер создается автоматически при запуске образа. Контейнер можно сохранить в образ.
Просмотр доступных контейнеров контейнеров:
Создать контейнер:
$ docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
Просмотр лога контейнера
$ docker logs (name_container)
Просмотр команд выполненных в контейнере
$docker diff (name_container)
Получить полную информацию о контейнере (ip, ports, names and tc)
Создать контейнер:
$ docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
Просмотр лога контейнера
$ docker logs (name_container)
Просмотр команд выполненных в контейнере
$docker inspect (name_container)
$ docker ps -a (а -просмотр всех контейнеров, без а - просмотр активных контейнеров) ----------------------------------------- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5050a5c05446 test/appimage "/bin/bash" 21 minutes ago Exited (0) 14 minutes ago priceless_hertz e04f404191e2 94e814e2efa8 "/bin/bash" 31 minutes ago Exited (0) 22 minutes ago eloquent_montalcini .......
Задать имя контейнеру
$ docker run (image | id_image) --name (name container| id_container) -h (name host - opcional) (list commands)
Удалить контейнер
$ docker rm//remove all stoped containers $ docker rm -v $(docker ps -aq -f status=exited)
Запустить контейнер
$docker start (name container | id_container)
Подключиться к рабочему контейнеру
$ docker attach (name container | id_container)
Сохранить контейнер в образ:
$ docker commit (name | id_container) (path_to_save_images (ex: test/appImage))
Связать два контейнера между собой
docker run --rm -it --link myredis:newredis redis /bin/bash # -rm - автоматически удалить контейнеры после выхода #--link - связать контейнеры myredis и newredis # root@a1c4abf81f:/data# redis-cli -h redis -p 6379 # redis:6379> PING (get, set, put e.t.c) # PONG
Dockerfile
Dockerfile – это обычный текстовый файл, содержащий набор операций, которые могут быть использованы для создания Docker-образа.
Создать docker образ на основе dokerfile:
(находясь в каталоге с dockerfile) $docker build -t (path_to_save_images (ex: test/appImageFromDockerfile))
Публикация образа на dockerhub
$ docker push (name_local_repositories)/(name_image) - (Имя локального репозитория должно совпадать с именем удаленного репозитория)
Основные команды dockerfile
FROM (name|id image:vearsion) (- загрузка образа либо из локального репозитория, либо с docker hub) RUN apt-get update && apt-get install python3 && (other bash commands) - (выплонить bash - команду) ENTRYPOINT ["/path/to/bin/file | file.sh"] (выполняемый файл, который будет обрабатывать аргументы переданные в docker run [image] [args]) COPY file /path/to/copy (копирует файл из файловой системы хоста в файловую систему образа, 1 arg - определяет файл хоста. 2 arg -целевой путь )
Лимит команд в Dockerfile 127 (для дефолтной файловой системы AUFS)
Связь с внешним миром
Для связи с контейнером по сетевым порта, используется аргумент -p или -P. Данный аргумент перенаправляет порты с хоста в контейнер.
docker run -d (в фоне) -p 8000:80 (перенаправить с 8000 порта хоста на 80 порт в контейнер) nginx curl localhost:8000
При использовании аргумента -P, Docker должен выбрать свободный порт для перенаправления с хоста в контейнер.
ID = $(docker run -d -P nginx) docker port $ID 80 0.0.0.0:32771 $curl localhost:32771
Соединение между контейнерами
Соединения инициализируются с помощью аргумента —link CONTAINER:ALIAS в команде docker run, где CONTAINER – имя контейнера-адресата (link container)1, а ALIAS – локальное имя, используемое внутри управляющего контейнера для обращения к контейнеру-адресату.
docker run -d --name myredis redis c9148dee046a6fefac48806cd8ec0ce85492b71f25e97aae9a1a75027b1c8423 $ docker run --link myredis:redis debian env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=f015d58d53b5 REDIS_PORT=tcp://172.17.0.22:6379 REDIS_PORT_6379_TCP=tcp://172.17.0.22:6379 .....
Работа с томами (общими каталогами)
Тома (volumes) Docker – это каталоги1, которые не являются частью файловой системы UnionFS конкретного контейнера, а представляют собой обычные каталоги в файловой системе хоста, но могут быть смонтированы как отдельные файловые системы (bind mounting) внутри контейнера.
$ docker run -it --name container-test -h CONTAINER -v /data debian /bin/bash root@CONTAINER:/# ls /data root@CONTAINER:/#
Здесь каталог /data внутри контейнера станет томом. Любые файлы, которые данный образ сохранил в каталоге /data, копируются на этот том. Мы можем проверить место расположения данного тома в файловой системе хоста, выполнив команду docker inspect на хосте из новой командной оболочки:
$ docker inspect -f {{.Mounts}} container-test [{5cad... /mnt/sda1/var/lib/docker/volumes/5cad.../_data /data local true}]
Указание тома в Dockerfile
FROM debian:wheezy VOLUME /data
Назначение прав на том (обязательно до объявления тома)
FROM debian:wheezy RUN useradd foo RUN mkdir /data && touch /data/x RUN chown -R foo:foo /data VOLUME /data
Третий способ состоит в расширении аргумента -v команды docker run с явным указанием связываемого каталога хоста в формате -v HOST_DIR:CONTAINER_DIR. Этот способ нельзя использовать в Dockerfile (так как он нарушает принцип переносимости и создает угрозу безопасности). Например:
$ docker run -v /home/adrian/data:/data debian ls /data
Монтировать том из другого контейнера
$ docker run -it -h NEWCONTAINER --volumes-from container-test debian /bin/bash root@NEWCONTAINER:/# ls /data test-file root@NEWCONTAINER:/#
Манипуляция образами
Сохранение образа из указанного контейнера
$docker commit id_conteinner name_images
Сохранение образа в tar архив:
$docker save -o img.tar name|id_image
Загрузка образа из архива
$docker load -i img.tar
Загрузка образа из репозитория
$docker pull
Загрузить образ в репозиторий
$docker push
Сохранить/Загрузить содержимое файловой системы контейнера
$ docker import / export $ID
Docker tag — связывает имя репозитория и тег с заданным образом
docker tag faa2b75ce09a newname $ docker tag newname:latest amouat/newname $ docker tag newname:latest amouat/newname:newtag $ docker tag newname:latest myregistry.com:5000/newname:newtag