
ознакомиться
Установка Docker CE
https://docs.docker.com/install/linux/docker-ce/debian/
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" $ sudo apt-get update $ sudo apt-get install docker-ce
или
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo usermod -aG docker your-user
Установить определенную версию Docker CE
Перечислите версии, доступные в вашем репо:
$ apt-cache madison docker-ce
$ sudo apt-get install docker-ce=
в ubuntu (в том числе и i386):
apt install docker.io
Удалить Docker CE
$ sudo apt-get purge docker-ce
Удалить все изображения, контейнеры и тома:
$ sudo rm -rf /var/lib/docker
https://download.docker.com/linux/static/stable/x86_64/
Docker на i386-ом компьютере
https://launchpad.net/ubuntu/+source/docker.io
https://hub.docker.com/r/i386/
ошибка при запуске
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/json: dial unix /var/run/docker.sock: connect: permission denied
sudo usermod -a -G docker $USER
https://docs.docker.com/edge/engine/reference/commandline/docker/
docker login
docker logout
docker images
docker ps -a
docker rm fc473085632f
docker search centos_cython
docker pull centos_cython
docker inspect uzverss/centos_cython
docker save uzverss/centos_cython > centos_cython.tgz
docker load -i centos_cython.tgz
docker run -d uzverss/centos_cython /bin/bash
docker export fc473085632ff24cf45e31359c518c0b4795ae71a502dafea1bc3ede773b550c | docker import - uzverss/centos_cython1
docker commit №_контейнера имя_образа
docker commit bf43ee2f2b19 centos7_yii2
docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name
docker run --rm -it uzverss/centos_cython /bin/bash
создание образа из контейнера
docker run --name centos_bash -it uzverss/centos_cython /bin/bash
docker export centos_bash -o centos_bash_tmp.tar
docker import centos_bash_tmp.tar centos_bash_tmp
docker save centos_bash_tmp -o centos_bash.tar
gzip centos_bash.tar
docker load -i centos_bash.tar.gz
docker run --name centos_bash2 -d uzverss/centos_cython /bin/bash
docker export centos_bash2 | docker import - centos_bash3
docker save centos_bash3 -o centos_bash3.tar
gzip centos_bash3.tar
docker load -i centos_bash3.tar.gz
docker images
docker rmi uzverss/centos_cython1
docker images -a
docker rmi Image1 Image2
docker push uzverss/centos_cython
docker history uzverss/centos_cython
docker search centos_python3
docker search centos_cython
docker ps -a
docker run -it uzverss/centos_cython /bin/bash
docker start fc473085632f
docker attach fc473085632f
docker stop fc473085632f
docker rm fc473085632f
docker run --name centos_bash -it uzverss/centos_cython /bin/bash
docker export centos_bash -o centos_bash.tar
docker save opkg -o centos_bash.tar
gzip centos_bash.tar
docker run --name haproxy-bash -v /mnt:/mnt -it -p 5000:5000 haproxy bash
docker run -d -t -p 5000:5000 haproxy haproxy_start
docker start centos_bash
docker stop centos_bash
docker attach centos_bash
docker rm centos_bash
docker rm $(docker ps -a -q -f status=exited) удалит все контейнеры кроме задействованных
docker rmi $(docker images -q) удалит все кроме имеющих запущенные контейнеры
docker rmi $(docker images -a -q) Чтобы удалить все образы, добавьте флаг –q
docker rm $(docker ps -a -q) — Удалить все существующие контейнеры
Чтобы удалить все образы, добавьте флаг –q
«-f» опция для того чтобы принудительно удалить docker образы
Как удалить образы, контейнеры и тома Docker
docker images -f dangling=true
docker images purge
docker system prune # очистит любые висящие (не связанные с контейнером) ресурсы - изображения, контейнеры, тома и сети
docker system prune -a # удалить все остановленные контейнеры и все неиспользуемые изображения (не только свисающие изображения)
создать минимальный chroot и из него — образ:
$ sudo tar -C каталог-с-chroot-ом -c . | docker import - название-образ
подробнее см сборка образов под свои нужды
монтировать каталоги хоста внутрь контейнера
docker run -v /каталог_на_компе:/каталог_в контейнере -v /каталог_на_компе:/каталог_в контейнере образ_докера
Копирование внутрь контейнера
docker cp some_files.conf docker_container:/home/docker/
сеть в контейнере
Сети Docker изнутри: как Docker использует iptables и интерфейсы Linux
команда docker network create --driver bridge --subnet 192.168.100.0/24 --ip-range 192.168.100.0/24 my-bridge-network создает еще одну bridge-сеть с именем “my-bridge-network” и подсетью 192.168.100.0/24
docker network ls
brctl show docker0
docker exec №_контейнера ping ya.ru
docker run -d -p 80:8080 uzverss/centos_yii
Чтобы открыть несколько портов, просто укажите несколько аргументов -p:
docker run -p host_port1:container_port1 -p host_port2:container_port2
docker run -it -p 7100-7120:7100-7120/tcp
проверка блокировки по портам
php -S 0.0.0.0:8080 (или внутренний ip контейнера напр 172.17.0.2:0.0.0.0)
localhost:0.0.0.0 работать не будет, как и 127.0.0.1:8080
напр docker run -d -p 127.0.0.2:8080:8080 uzverss/centos_yii
php -S 127.0.0.2:8080 сработает
если что то блокирует проброс то прямой проброс (host=контейнер)
docker run --net=host -it centos1_yii2 bash
docker0 может быть настроен флагами --net в четырёх режимах:
--net default
--net=none
--net=container:$container2
--net=host
Режим --net default
В данном режиме мост по умолчанию применяется мостом для соединения контейнеров друг с другом.
Режим --net=none
В этом режиме созданные контейнеры полностью изолированы и не могут соединяться с сетевой средой.
Режим --net=container:$container2
При помощи данного флага данный контейнер создаёт в пространстве имён сети совместный ресурс с контейнером, именуемым $container2.
Режим --net=host
При данном режиме контейнер создаёт совместные ресурсы своего сетевого пространства имён с хостом.
узнать ip адрес, на котором работает web-сервер, нужно выполнить команду:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' имя_контейнера
http://onreader.mdl.ru/LearningDockerNetworking/content/Ch01.html#010201
Docker: как развернуть фуллстек-приложение и не поседеть
https://www.shellhacks.com/ru/docker-cp-command-copy-file-to-from-container/
Скопировать файл с хоста в контейнер:
$ docker cp foo.txt 72ca2488b353:/foo.txt
Скопировать файл с Docker-контейнера на хост:
$ docker cp 72ca2488b353:/foo.txt foo.txt
На всякий случай проверьте корректность синтаксиса настроек в Nginx:
$ docker container exec
Отправьте Nginx внутри Docker-контейнера сигнал reload:
$ docker container exec
https://www.8host.com/blog/udalenie-obrazov-kontejnerov-i-tomov-docker/
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -a -q)
Удаление недействительных образов
docker rmi $(docker images -q -f dangling=true)
Удаление томов
docker volume ls
docker volume rm том1 том2 том3
docker volume ls -f dangling=true
docker volume rm $(docker volume ls -f dangling=true -q)
Удаление тома вместе с контейнером
docker rm -v имя_контейнера
https://isavel.pro/?p=71
Копирование внутрь контейнера
docker cp some_files.conf docker_container:/home/docker/
Зайти в уже запущенный контейнер (точнее выполнить команду внутри контейнера)
docker exec -it name_of_container /bin/bash
http://qaru.site/questions/14756/how-to-copy-docker-images-from-one-host-to-another-without-via-repository
export будет извлекать весь контейнер: как моментальный снимок обычной виртуальной машины
save будет извлекать изображение: для виртуальной машины или физического сервера это будет образ .ISO установки или диска
Для сглаженного экспорта файловой системы контейнера используйте;
docker export CONTAINER_ID > my_container.tar
Используйте cat my_container.tar | docker import - для импорта указанного изображения.
https://ivan.bessarabov.ru/blog/docker-commands
docker run --detach --publish 8000:80 --name sample bessarabov/sample_nginx
Скачать все теги образа ubuntu
docker pull --all-tags ubuntu
# Выяснить на каком ip адресе работает виртуальная машина с докером
$ boot2docker ip
The VM's Host only interface IP address is: 192.168.59.103
# Строка для добавления в .bash_profile, которая выставляет правильные
# переменные окружения
eval $(boot2docker shellinit 2> /dev/null)
https://habrahabr.ru/post/310460/
docker run -d -P --name static-site prakhar1989/static-site
docker port static-site
создать файл Dockerfile затем
docker build -t prakhar1989/catnip .
docker run -p 8888:5000 prakhar1989/catnip
https://habrahabr.ru/post/234829/
docker start stupefied_lovelace
docker attach stupefied_lovelace
docker run --name city -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"
docker cp <путь к данным на хосте> <имя контейнера>:<путь>
docker run -v /tmp:/root -t -i <имя образа>
docker commit <id контейнера="контейнера"> <имя образа>
docker load < /tmp/transfer.tar
docker run -i -t -p 80:80 -p 443:443 --name nginx ubuntu:trusty
docker commit nginx trukhinyuri/nginx
docker push trukhinyuri/nginx
Docker: retag образа
Bash – скрипт удаления образов с Docker Swarm нод
запуск графических приложений в Docker
https://github.com/Kagami/kagome/
Docker: запуск графических приложений в контейнерах
ssh -X -R 64713:localhost:4713 <user>@<hostname>
сборка с браузером и крысой
https://github.com/ConSol/docker-headless-vnc-container
docker pull amanral/ubuntu-firefox
Осилил запуск GUI-приложений в Docker
в /etc/ssh/sshd_config есть строчка X11Forwarding yes
sudo docker run --dns 8.8.8.8 -p 127.0.0.1:222:22 -d -i -t baseimage-ssh /sbin/my_init
ssh -p 222 root@localhost
apt-get update
apt-get install x11-apps xauth
apt-get install chromium-browser
apt-get install fonts-dejavu fonts-dejavu-core fonts-dejavu-extra
заведем нового пользователя:
adduser afiskon
usermod -G sudo afiskon
Под рутом говорим:
xauth list
Появится одна или несколько строчек вроде таких:
089a234b1567/unix:10 MIT-MAGIC-COOKIE-1 0489a12c89a67b567ef012cd...
Переключаемся на юзера:
su afiskon
Для каждой ранее уведенной строчечки говорим:
xauth add (строчечка)
В дальнейшем так далать не понадобится, все сохраняется в файлики.
В гостевой системе:
sudo apt-get install libpulse0 pulseaudio
В хост-системе:
sudo apt-get install paprefs
Запускаем paprefs, во вкладке Network Server ставим галочку Enable network access to local sound devices, а также Don’t require authentication. Затем:
sudo service pulseaudio restart
В netstat -tuwpan должны увидеть, что процесс pulseaudio слушает порт 4713. Вам Если после выполнения приведенной выше команды ничего не изменилось, попробуйте:
pulseaudio -k
pulseaudio --start
пробрасываем порт на гостевую систему:
ssh -X -p 222 -R3333:localhost:4713 root@localhost
В гостевой системе говорим:
PULSE_SERVER="tcp:localhost:3333" chromium-browser --no-sandbox
объяснение проброса звука по SSH
pax11publish или xprop -root PULSE_SERVER
~/.config/pulse/cookie
https://registry.hub.docker.com/r/tomparys/skype
https://blog.jessfraz.com/post/docker-containers-on-the-desktop/
https://github.com/jessfraz/dockerfiles
https://hub.docker.com/u/jess/
Мониторинг
cat /sys/fs/cgroup/cpuacct/docker/CONTAINER_ID/cpuacct.stat
docker stats CONTAINER_ID
Доступ к API
echo -e "GET /containers/[CONTAINER_ID]/stats HTTP/1.0\r\n" | nc -U /var/run/docker.sock
часть stdout/stderr информации Docker выводит в файл журнала. В Ubuntu это /var/lib/docker.log
https://github.com/bcicen/ctop/blob/master/README.md
ctop -a
https://xakep.ru/2015/06/04/docker-faq/
указать максимальный объем памяти, который будет доступен контейнеру:
sudo docker run -d -m 256m ubuntu-nginx /usr/sbin/nginx
sudo docker run -it -v /var/run/docker.sock:/var/run/docker.sock\
nathanleclaire/devbox
узнать ip адрес, на котором работает web-сервер, нужно выполнить команду:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' имя_контейнера
DockerUI
sudo docker run -d -p 9000:9000 --privileged \
-v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui
http://IP-dockerd:9000
sudo docker run -d -p 9000:9000 --privileged \
dockerui/dockerui -e http://127.0.0.1:2375
Shipyard
sudo docker run -it -p 8080:8080 -d --name shipyard \
--link shipyard-rethinkdb:rethinkdb shipyard/shipyard
https://askubuntu.com/questions/1028522/how-can-i-install-pdftk-in-ubuntu-18-04-and-later
http://satan-web.com/questions/206/kak-ustanovit-pdftk-v-ubuntu-18-04-bionic
https://letsclearitup.com.ua/docker/
Проверить сколько места на жестком диске занимает Docker:
docker system df
очистка неиспользуемых данных
docker system prune
поиска образов в реестрах
docker search образ
Для запуска контейнера и выполнения внутри него команды используется:
docker container run -it itscaro/debian-ssh /bin/bash
docker run -it itscaro/debian-ssh bash
Подключиться к уже запущенному контейнеру и запустить shell:
docker container exec -it [CONTAINER ID] /bin/bash
docker exec -it [CONTAINER ID] bash
Список запущенных процессов внутри контейнера смотрим так:
docker top [CONTAINER ID]
docker container top [CONTAINER ID]
Просмотреть логи контейнера можно так:
docker logs [CONTAINER ID]
docker container logs [CONTAINER ID]
docker container logs -f [CONTAINER ID]
Для остановки контейнера используется команда stop, например:
docker stop [CONTAINER ID]
docker container stop [CONTAINER ID]
Для остановки всех запущенных контейнеров используйте такую команду:
docker container stop $(docker container ls -q)
Удалить остановленный контейнер можно так:
docker rm [CONTAINER ID]
Удалить все остановленные контейнеры можно командой:
docker container prune
Просмотреть историю образа, который использует контейнер:
docker image history --no-trunc=true $(docker container inspect -f '{{.Image}}' [CONTAINER ID])
Просмотреть изменения файловой системы контейнера по сравнению с оригинальным образом:
docker container diff [CONTAINER ID]
Выполнить резервное копирование каталога с данными из контейнера в хост-машину:
docker container run --rm --volumes-from [SOURCE_CONTAINER]:ro -v $(pwd):/backup alpine \
tar cvf /backup/backup_$(date +%Y-%m-%d_%H-%M).tar /data
Восстановить данные из резервной копии на хост-машине внутрь контейнера:
docker container run --rm --volumes-from [TARGET_CONTAINER]:ro -v $(pwd):/backup alpine \
tar xvf /backup/backup.tar
Вывод имени хранилища (volume), которое использует контейнер:
docker container inspect -f '{{ range .Mounts }}{{ .Name }} {{ end }}' [CONTAINER ID]
Вывод имени хранилища (volume), которое использует контейнер и точек монтирования:
docker container inspect -f '{{ range .Mounts }}{{ .Name }}:{{ .Destination }} {{ end }}' [CONTAINER ID]
Получить IP-адрес контейнера:
docker container inspect -f '{{ .NetworkSettings.IPAddress }}' [CONTAINER ID]
удалить недействительные образы (у которых нет метки)
docker images --no-trunc | grep '' | awk '{ print $3 }' | xargs -r docker rmi
docker rmi $(docker images -f dangling=true -q)
поиск недействительных образов
docker images -f dangling=true
удаление остановленных контейнеров
docker ps --filter status=exited -aq | xargs docker rm -v
docker rm $(docker ps -a -f status=exited -q)
удаление неиспользуемых томов в ранних версиях docker
все неиспользуемые (недействительные) тома можно найти с помощь такой командой:
docker volume ls -f dangling=true
удалить все неиспользуемые (недействительные) тома
docker volume rm $(docker volume ls -f dangling=true -q)
Очистка места в private docker-registry
https://letsclearitup.com.ua/docker/ochistka-mesta-v-private-docker-registry.html
Находясь на docker-хосте, смотрим содержимое каталога с интересующим нас docker-образом и его тэгом в каталоге
/srv/gitlab/shared/registry/docker/registry/v2/repositories/{имя_докер_образа}/_manifests/tags/{тег_образа}/index/sha256
Смотрим содержимое каталога с ревизиями интересующего нас docker-образа
/srv/gitlab/shared/registry/docker/registry/v2/repositories/{имя_докер_образа}/_manifests/revisions/sha256
После удаления вышеуказанных файлов запускаем процесс «уборки мусора» командой:
docker exec -it {имя_контейнера_c_registry} bin/registry garbage-collect {путь_к_конфигу_внутри_контейнера}
Для чистки места также можно использовать скрипт clean_docker_registry.sh следующего содержания:
Запускаем скрипт с параметрами, первый из которых — имя docker-образа, второй — тэг docker-образа, например:
./clean_docker_registry.sh master/lebed/test latest
как сохранять и загружать образы Docker:
Сохраните изображение как tarball
docker save repositoryname:tag > repotag.tar
Заархивируйте изображение
gzip repotag.tar
Скопируйте tar-архив на новую машину.
scp repotag.tar.gz <foreign machine>
Распаковать тарбол
gunzip repotag.tar.gz
Загрузите образ докера
docker load < repotar.tar
Найдите идентификатор изображения
docker images
Отметьте изображение
docker tag repositoryname:tag
Шпаргалка docker
Install DOCKER
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Info and Registry
docker info - Информация обо всём в установленном Docker
docker history - История образа
docker tag - Дать тег образу локально или в registry
docker login - Залогиниться в registry
docker search - Поиск образа в registry
docker pull - Загрузить образ из Registry себе на хост
docker push - Отправить локальный образ в registry
Container Management
docker ps -а - Посмотреть все контейнеры
docker start container-name - Запустить контейнер
docker kill/stop container-name - Убить (SIGKILL) /Остановить (SIGTERM) контейнер
docker logs --tail 100 container-name - Вывести логи контейнера, последние 100 строк
docker inspect container-name - Вся инфа о контейнере + IP
docker rm container-name - Удалить контейнер (поле каждой сборки Dockerfile)
docker rm -f $(docker ps -aq) - Удалить все запущенные и остановленные контейнеры
docker events container-name
docker port container-name - Показать публичный порт контейнера
docker top container-name - Отобразить процессы в контейнере
docker stats container-name - Статистика использования ресурсов в контейнере
docker diff container-name - Изменения в ФС контейнера
Images
docker build -t my_app . - Билд контейнера в текущей папке, Скачивает все слои для запуска образа
docker images / docker image ls - Показать все образы в системе
docker image rm / docker rmi image - Удалить image
docker commit <containerName/ID> lepkov/debian11slim:version3- Создает образ из контейнера
docker insert URL - вставляет файл из URL в контейнер
docker save -o backup.tar - Сохранить образ в backup.tar в STDOUT с тегами, версиями, слоями
docker load - Загрузить образ в .tar в STDIN с тегами, версиями, слоями
docker import - Создать образ из .tar
docker image history --no-trunc - Посмотреть историю слоёв образа
docker system prune -f - Удалит все, кроме используемого (лучше не использовать на проде, ещё кстати из-за старого кеша может собираться cтарая версия контейнера)
Run
docker run -d -p 80:80 -p 22:22 debian:11.1-slim sleep infinity (--rm удалит после закрытия контейнера, --restart unless-stopped добавит автозапуск контейнера) - Запуск контейнера интерактивно или как демона/detached (-d), Порты: слева хостовая система, справа в контейнере, пробрасывается сразу 2 порта 80 и 22, используется легкий образ Debian 11 и команда бесконечный сон
docker update --restart unless-stopped redis - добавит к контейнеру правило перезапускаться при закрытии, за исключением команды стоп, автозапуск по-сути
docker exec -it container-name /bin/bash (ash для alpine) - Интерактивно подключиться к контейнеру для управления, exit чтобы выйти
docker attach container-name - Подключиться к контейнеру чтоб мониторить ошибки логи в реалтайме
Volumes
Скопировать в корень контейнера file
docker cp file <containerID>:/
Скопировать file из корня контейнера в текущую директорию командной строки
docker cp <containerID>:/file .
Создать volume для постоянного хранения файлов
docker volume create todo-db
Добавить named volumу todo-db к контейнеру (они ok когда мы не заморачиваемся где конкретно хранить данные)
bashdocker run -dp 3000:3000 --name=dev -v todo-db:/etc/todos container-name
docker run -dp 3000:3000 --name=dev --mount source=todo-db,target=/etc/todos container-name # тоже самое что команда сверху
Отобразить список всех volume’ов
docker volume ls
Инспекция volume’ов
docker volume inspect
Удалить volume
docker volume rm
Network
Создать сеть
docker network create todo-app
Удалить сеть
docker network rm
Отразить все сеть
docker network ls
Вся информация о сети
docker network inspect
Соединиться с сетью
docker network connect
Отсоединиться от сети
docker network disconnect
Пробросить текущую папку в контейнер и работать на хосте, -w working dir, sh shell
Запуск контейнера с присоединением к сети и заведение переменных окружения
Запуск контейнера с приложением
CMD VS ENTRYPOINT
Разница в том, что CMD выполняется из под /bin/sh по дефолту, а ENTRYPOINT без него. В случае с CMD, команда и параметры к ней захардкожены в образ, пример запуска с переопределением команды CMD ["sleep","10"]
docker run ubuntu sleep 5
Контейнер проспит 5 секунд вместо 10.
В случае с ENTRYPOINT, только команда захардкожена в образ, пример запуска с переопределением команды ENTRYPOINT ["sleep"] CMD ["10"] (Если используются обе директивы, то в энтрипоинте команда, а в cmd параметры к ней)
docker run ubuntu 5
Контейнер проспит 5 секунд вместо 10.
Чтобы переопределить ENTRYPOINT:
docker run --entrypoint another-command ubuntu 20
Обычно практика такая, всегда используй CMD, если только не требуется каждый раз запускать контейнер с разным параметром (экономия времени, чтоб каждый раз не вводить строчку с командой)
Best Practice
Следуй принципу минимальных привилегий, процессы в контейнере никогда не должны выполняться из под рута, кроме редких случаев, нужно добавлять команду user и менять юзера на non-root.
Не привязываться к UID, он динамичен, можно записать во временную папку UID.
Сделать все исполняемые файлы владельцем рута, чтобы никто не изменил исполняемые файлы, а пользователю достаточно только права на выполнение.
Чем меньше компонентов и открытых портов, тем меньше поверхность для атак.
Использовать multistage для промежуточного контейнера для компиляции всего, зависимостей, временных файлов, образ может весить на треть меньше.
Distroless с чистого листа, использовать минимальный набор пакетов, например избавиться от образа Ubuntuи выбрать Debian-base, наши контейнеры содержат уязвимости изначального образа, чекать это.
Нужно обновлять всё до того, как выйдет из под поддержки.
Оставлять только те порты, которые реально нужны, избегать 22 и 21 3389 (ssh & ftp & rdp).
Никогда не помещайте логины/пароли в команде, в докерфайлах, переменных, docker secret или любой другой менеджер секретов ok.
Не использовать ADD, только COPY (когда используем точку - это воркдир где лежит докерфайл).
При сборке используйте .dockerignore чтобы убрать сенситив дату, это как .gitignore.
При сборке вначале команд лучше кешировать команду ран, а потом скопировать исходные данные.
Метадату записать.
Использовать тесты типа Linter и сканеры образов для CI.
Время от времени делать prune, докер любит много места жрать
Шпаргалка с командами Docker
https://github.com/eon01/DockerCheatSheet
Запуск остановленного контейнера
docker start nginx
Остановка
docker stop nginx
Перезагрузка
docker restart nginx
Пауза (приостановка всех процессов контейнера)
docker pause nginx
Снятие паузы
docker unpause nginx
Блокировка (до остановки контейнера)
docker wait nginx
Отправка SIGKILL (завершающего сигнала)
docker kill nginx
Отправка другого сигнала
docker kill -s HUP nginx
Подключение к существующему контейнеру
docker attach nginx
Работающие контейнеры
docker ps
docker ps -a
Логи контейнера
docker logs infinite
Информация о контейнере
docker inspect infinite
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)
События контейнера
docker events infinite
Публичные порты
docker port infinite
Выполняющиеся процессы
docker top infinite
Использование ресурсов
docker stats infinite
Изменения в файлах или директориях файловой системы контейнера
docker diff infinite
Управление образами
Список образов
docker images
Создание образов
docker build .
docker build github.com/creack/docker-firefox
docker build - < Dockerfile
docker build - < context.tar.gz
docker build -t eon/infinite .
docker build -f myOtherDockerfile .
curl example.com/remote/Dockerfile | docker build -f - .
Удаление образа
docker rmi nginx
Загрузка репозитория в tar (из файла или стандартного ввода)
docker load < ubuntu.tar.gz
docker load --input ubuntu.tar
Сохранение образа в tar-архив
docker save busybox > ubuntu.tar
Просмотр истории образа
docker history
Создание образа из контейнера
docker commit nginx
Тегирование образа
docker tag nginx eon01/nginx
Push (загрузка в реестр) образа
docker push eon01/nginx
Сеть
Создание сети
docker network create -d overlay MyOverlayNetwork
docker network create -d bridge MyBridgeNetwork
Удаление сети
docker network rm MyOverlayNetwork
Список сетей
docker network ls
Получение информации о сети
docker network inspect MyOverlayNetwork
Подключение работающего контейнера к сети
docker network connect MyOverlayNetwork nginx
Подключение контейнера к сети при его запуске
docker run -it -d --network=MyOverlayNetwork nginx
Отключение контейнера от сети
docker network disconnect MyOverlayNetwork nginx
Очистка Docker
Удаление работающего контейнера
docker rm nginx
Удаление контейнера и его тома (volume)
docker rm -v nginx
Удаление всех контейнеров со статусом exited
docker rm $(docker ps -a -f status=exited -q)
Удаление всех остановленных контейнеров
docker container prune
docker rm `docker ps -a -q`
Удаление контейнеров, остановленных более суток назад
docker container prune --filter "until=24h"
Удаление образа
docker rmi nginx
Удаление неиспользуемых (dangling) образов
docker image prune
docker rmi $(docker images -f dangling=true -q)
Удаление неиспользуемых (dangling) образов даже с тегами
docker image prune -a
Удаление всех образов
docker rmi $(docker images -a -q)
Удаление всех образов без тегов
docker rmi -f $(docker images | grep "^
Остановка и удаление всех контейнеров
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
Удаление неиспользуемых (dangling) томов
docker volume prune
docker volume rm $(docker volume ls -f dangling=true -q)
Удаление неиспользуемых (dangling) томов по фильтру
docker volume prune --filter "label!=keep"
Удаление неиспользуемых сетей
docker network prune
Удаление всех неиспользуемых объектов
docker system prune
По умолчанию для Docker 17.06.1+ тома не удаляются. Чтобы удалились и они тоже:
docker system prune --volumes
Docker Swarm
Установка Docker Swarm
curl -ssl https://get.docker.com | bash
Инициализация Swarm
docker swarm init --advertise-addr 192.168.10.1
Подключение рабочего узла (worker) к Swarm
docker swarm join-token worker
Подключение управляющего узла (manager) к Swarm
docker swarm join-token manager
Список сервисов
docker service ls
Список узлов
docker node ls
Создание сервиса
docker service create --name vote -p 8080:80 instavote/vote
Список заданий Swarm
docker service ps
Масштабирование сервиса
docker service scale vote=3
Обновление сервиса
docker service update --image instavote/vote:movies vote
docker service update --force --update-parallelism 1 --update-delay 30s nginx
docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote
docker service update --limit-cpu 2 nginx
docker service update --replicas=5 nginx
Шпаргалка по командам Dockerfile
FROM <имя-образа> — какой образ использовать в качестве базы (должна быть первой строкой в любом Dockerfile).
MAINTAINER <имя> — имя мантейнера данного Dockerfile.
RUN <команда> — запустить указанную команду внутри контейнера.
CMD <команда> — выполнить команду при запуске контейнера (обычно идет последней).
EXPOSE <порт> — список портов, которые будет слушать контейнер (используется механизмом линковки).
ENV <ключ> <значение> — создать переменную окружения.
ADD <путь> <путь> — скопировать файл/каталог внутрь контейнера/образа (первый аргумент может быть URL).
ENTRYPOINT <команда> — команда для запуска приложения в контейнере (по умолчанию /bin/sh -c).
VOLUME <путь> — пробросить в контейнер указанный каталог (аналог опции -v).
USER <имя> — сменить юзера внутри контейнера.
WORKDIR <путь> — сменить каталог внутри контейнера.
ONBUILD [ИНСТРУКЦИЯ] — запустить указанную инструкцию Dockerfile только в том случае, если образ используется для сборки другого образа (с помощью FROM).
Установка Docker-compose
https://docs.docker.com/compose/install/
Docker-compose — пакетный менеджер (по аналогии с composer и npm, только у docker — контейнеры), позволяющий описывать необходимую структуру в одном файле (конфиге).
Для его установки нужно выполнить команду:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
$ sudo rm /usr/local/bin/docker-compose
pip install docker-compose
pip uninstall docker-compose
ошибки
Как устранить ошибку "Cannot connect to the Docker daemon" Error
https://stackoverflow.com/questions/48568172/docker-sock-permission-denied
unix /var/run/docker.sock: connect: permission denied
sudo usermod -aG docker $USER
Изменение групп пользователя не меняет существующие логины, терминалы и оболочки, открытые пользователем. Чтобы избежать повторного входа в систему, вы можете просто запустить:
$ newgrp docker
чтобы получить доступ к этой группе в вашей текущей оболочке.
Как только вы это сделаете, пользователь фактически получит root-доступ к серверу, поэтому делайте это только для пользователей, которым доверен неограниченный доступ sudo.
------------------------------------------------------------------------
docker: Error response from daemon: failed to create endpoint on network bridge: failed to add the host (veth77bc8b1) <=> sandbox (vethebb0068) pair interfaces: operation not supported.
ядро собрано без veth.ko, в .config должно быть CONFIG_VETH=m
если ядро правильно собрано, но ошибка есть, проверить iptables -L
https://wiki.russianfedora.pro/index.php?title=Docker
Полное практическое руководство по Docker: с нуля до кластера на AWS
Docker: заметки веб-разработчика. Итерация первая
https://y-gagar1n.github.io/hows-that-again/blog/docker
Linux Docker 0.9 - краткое практическое руководство
https://runebook.dev/ru/docs/docker/engine/reference/builder/index
https://docs.docker.com/network/
docker: network
подборка по виртуализации и облакам
centos docker yii