Jun. 12th, 2017




посмотреть
https://wiki.archlinux.org/title/Waydroid
https://www.altlinux.org/Waydroid

устанавливаю waydroid
sudo apt install curl ca-certificates -y
curl https://repo.waydro.id | sudo bash
sudo apt update

sudo apt install waydroid
sudo apt install weston
sudo waydroid init
либо
sudo waydroid init -s GAPPS

sudo waydroid container start

перехожу в tty
Ctrl+Alt+F2
weston

запускаю в нём терминал (верхний левый угол)
в терминале запускаю
waydroid session start &
затем запускаю
waydroid show-full-ui

запускаю хром, открываю ссылку http://f-droid.org/FDroid.apk
устанавливаю репу
устанавливаю termux и прочее

чтобы выйти, запускаю терминал (верхний левый угол) и в нем
waydroid session stop

sudo waydroid container stop

удалить
sudo rm -rf /var/lib/waydroid ~/.local/share/waydroid



ознакомиться
Установка 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 -t
Отправьте Nginx внутри Docker-контейнера сигнал reload:
$ docker container exec nginx -s reload

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 "^" | awk "{print $3}")

Остановка и удаление всех контейнеров
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


ознакомиться

docker search centos
docker pull centos
docker run -it centos bash
docker commit №_контейнера название_образа # сделать нужный образ
docker rm $(docker ps -a -q -f status=exited) # удалить лишние контейнеры (все)

docker команды

https://www.yiiframework.com/doc/guide/2.0/en/tutorial-docker
docker-compose -v
docker -v
docker-compose up -d
docker-compose ps
docker-compose logs -f
docker-compose stop
docker-compose kill
docker-compose down -v
docker-compose run --rm php composer install
docker-compose exec php bash

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
Определение многоконтейнерного приложения с помощью docker-compose.yml

Программирование с YII2: приступаем к работе

https://github.com/yiisoft/yii2/tree/master/docs/guide-ru
https://webformyself.com/yii2-advanced-ustanovka/
https://www.yiiframework.com/doc/guide/2.0/ru/start-installation
https://www.yiiframework.com/doc/guide/2.0/ru/tutorial-start-from-scratch


http://onreader.mdl.ru/LearningDockerNetworking/content/Ch02.html
Docker: как развернуть фуллстек-приложение и не поседеть

установка php

установка compozer
yum install install curl php-cli php-mbstring git zip unzip
curl -sS https://getcomposer.org/installer -o composer-setup.php
или
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
или
mv composer.phar /usr/local/bin/composer

composer show --platform | grep ext-xsl
sudo yum install php-xsl

подключение к БД
https://yiiframework.com.ua/ru/doc/guide/2/db-dao/

  • MySQL, MariaDB: mysql:host=localhost;dbname=mydatabase

  • SQLite: sqlite:/path/to/database/file

  • PostgreSQL: pgsql:host=localhost;port=5432;dbname=mydatabase

  • CUBRID: cubrid:dbname=demodb;host=localhost;port=33000

  • MS SQL Server (via sqlsrv driver): sqlsrv:Server=localhost;Database=mydatabase

  • MS SQL Server (via dblib driver): dblib:host=localhost;dbname=mydatabase

  • MS SQL Server (via mssql driver): mssql:host=localhost;dbname=mydatabase

  • Oracle: oci:dbname=//localhost:1521/mydatabase



ошибки при установке yii2-app-advanced
Exception 'yii\db\Exception' with message 'could not find driver'
sudo yum install php-gd php-mysql

Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2002] No such file or directory'
nano $HOME/yii-application/common/config/main-local.php
'dsn' => 'mysql:host=127.0.0.1:3306;dbname=yii2advanced

sudo mysql_secure_installation
Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost''

http://qaru.site/questions/161543/error-1698-28000-access-denied-for-user-rootlocalhost
https://www.digitalocean.com/community/tutorials/mysql-ubuntu-18-04-ru

$ sudo mysql
SELECT user,authentication_string,plugin,host FROM mysql.user;

$ mysql -uroot -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

надо создать нового пользователя с полными правами.
$ sudo mysql -uroot

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

$ mysql -unewuser -ppassword
Для работы с базой использовать нового пользователя newuser вместо root.

nano $HOME/yii-application/common/config/main-local.php
изменить на:
'dsn' => 'mysql:host=127.0.0.1;port=3306;dbname=yii2advanced',
'username' => 'newuser',
'password' => 'password',

Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [1049] Unknown database 'yii2advanced''
mysql> CREATE DATABASE yii2advanced;
mysql> EXIT;

php yii serve --port=8888
Document root "/home/user/yii-application/console/web" does not exist.

В консоли надо указать путь к document root проекта.
php yii serve --docroot="path/to/docroot"
Например:
php yii serve --docroot="@frontend/web" --port=8080
php yii serve --docroot="@backend/web" --port=8888
php yii serve --docroot="@console" --port=8000
или
php -S 127.0.0.1:8080 -t frontend/web
php -S 127.0.0.1:8888 -t backend/web

http://127.0.0.1:8080/index.php?r=gii

Сервис на Yii2: Тестирование приложения с Codeception
проверка (запуск в каталоге)
vendor/bin/codecept run acceptance -- -c frontend
vendor/bin/codecept run acceptance -- -c backend

Codeception requires CURL extension installed to make tests run
If you are not sure, how to install CURL, please refer to StackOverflow
yum install php-curl



https://www.tutorialspoint.com/sqlite/sqlite_create_database.htm
http://www.w3big.com/ru/sqlite/sqlite-syntax.html
Стартуем с SQLite3 – Основные команды
nano $HOME/yii-application/common/config/main-local.php
изменить на:
'dsn' => 'sqlite:/home/user1/yii-application/DB/yii2advanced.db',

$ mkdir -p $HOME/yii-application/DB/
$ sqlite3 $HOME/yii-application/DB/yii2advanced.db
.quit

Команда Описание
.show Показывает текущие настройки заданных параметров
.databases Показывает название баз данных и файлов
.quit Выход из sqlite3
.tables Показывает текущие таблицы
.schema Отражает структуру таблицы
.header Отобразить или скрыть шапку таблицы
.mode Выбор режима отображения данных таблицы
.dump Сделать копию базы данных в текстовом формате




composer --version
composer self-update
composer global require "fxp/composer-asset-plugin:~1.4.5"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
или
composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic
или
php composer.phar create-project yiisoft/yii2-app-advanced advanced

Установка из архивного файла
https://www.yiiframework.com/download

// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'enter your secret key here',

обновление
php composer.phar update yiisoft/yii2 yiisoft/yii2-composer bower-asset/jquery.inputmask

Проверка установки, запуск yii2
php yii serve 0.0.0.0:8080 (универсально)
php yii serve ip_адрес:8080 (правильно)

проверка проброса портов
php -S 0.0.0.0:8080

Чтобы открыть несколько портов, просто укажите несколько аргументов -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 сработает


docker run -d -p 127.0.0.2:8080:8080 uzverss/centos_yii


php yii serve (по умолч localhost порт 80)
php yii serve --port=8080 (поднимется по умолчанию на localhoct, т.е. при --net=host )
php yii serve 0.0.0.0:8080 (универсально)
php yii serve ip_adres_контейнера:8080 (правильно)

узнать ip адрес (если нет ip a)
yum install net-tools
ifconfig

docker run --name centos -it centos bash
docker run -d -p 80:8080 uzverss/centos_yii
если что то блокирует проброс то
docker run --net=host -it centos1_yii2 bash

примеры

пример: подключить каталог с yii2 с хоста в контейнер
docker run -v /home/user/basic:/home/user/basic -p 127.0.0.2:8080:8080 -it centos-php bash
пример: подключить каталог с yii2 с контейнера на хост (каталога basic1 на хосте нет, создаётся с правами root)
docker run -v /home/user/basic1:/home/user/basic -p 127.0.0.2:8080:8080 -it centos-php bash
chown user:user /home/user/basic

монтировать каталоги хоста внутрь контейнера
docker run -v /каталог_на_компе:/каталог_в контейнере -v /каталог_на_компе:/каталог_в контейнере образ_докера

создание пользователей
adduser username
passwd username
gpasswd -a username wheel
userdel username
userdel -r username удалит пользователя с каталогом
sudo lid -g wheel


пример настроенного контейнера:
docker pull schmunk42/yii2-app-basic
docker run -p 8888:80 schmunk42/yii2-app-basic

https://github.com/yiisoft/yii2-app-basic
docker pull yiisoftware/yii2-php:7.3-fpm

docker run --name php-yii2 --rm -it dmstr/php-yii2 -p 8080:8080 yii

https://hub.docker.com/r/yiisoftware/yii2-php/
https://github.com/dmstr/docker-yii2-app

Как сделать админку для yii2 basic?
https://www.yiiframework.com/search?type=extension&q=admin
https://github.com/yii2tech/admin
https://www.yiiframework.com/extension/yii2-template-smarty
https://www.yiiframework.com/extension/qtzpanel
https://www.yiiframework.com/extension/yii2-admin
https://elisdn.ru/blog/76/seo-service-on-yii2-admin-and-sef
https://github.com/ElisDN/seokeys

https://www.yiiframework.com/extension/phpnt/yii2-cms
https://www.yiiframework.com/extension/execut/yii2-cms

https://github.com/yii2tech
https://github.com/codemix
https://github.com/creocoder

https://www.adminer.org/
https://phpdocker.io/generator
https://nginxconfig.io
https://github.com/digitalocean/nginxconfig.io

https://www.yiiframework.com/doc/guide/2.0/ru/start-installation
https://www.yiiframework.com/wiki/783/running-applications-with-docker

https://phptoday.ru/post/gotovim-lokalnuyu-sredu-docker-dlya-razrabotki-na-php
https://blog.rvalitov.ru/programming/yii2/yii2-base-docker/
http://noob.poex.me/2018/06/22/docker-network/

Полное руководство по Yii 2.0
https://nix-tips.ru/yii2-api-guides/guide-ru-README.html
https://github.com/yiisoft/yii2/tree/master/docs/guide-ru

установка dokuwiki centos php nginx
Расшариваем веб-сайт на localhost в глобальную сеть интернет.

Для тестирования хороших и не очень инструментов под Android, :) необходима реальная платформа в виде настоящего телефона/планшета или же виртуальный эмулятор ее. В этом посте, я подготовил небольшую инструкцию, как поднять эмулятор Android у себя на компьютере с помощью Docker, быстро и бесплатно. Которая может кому-либо пригодится.



1. Обновляем систему.
apt update && apt upgrade -y

2. Устанавливаем Docker.


Следом docker-compose.


Включаем сервис.
systemctl enable docker && systemctl start docker

Перезагружаемся.
reboot

3. Подготовим docker-compose.
mkdir ~/docker && nano ~/docker/docker-compose.yml



4. Запускаем образ.
cd ~/docker && docker-compose up -d

После того как наш образ загрузится, открываем браузер (Chrome, Firefox), и переходим по адресу: http://IP:6080
и получаем наш Nexus 5, с Android 7.1.1.

5. Остановить приложение.
cd ~/docker && docker-compose down

Несколько замечаний:

1. Тестировалось на Kali 2017.3 64, с небольшими изменениями можно запустить на Ubuntu/Debian, на Windows необходимо установить
docker и docker-compose своим способом.

2. Оперативной памяти на VM/Хосте должно быть выделено не менее 2GB для успешного запуска эмулятора.

3. Если вы выполняете эти действия на виртуальной машине, как и я, необходимо включить "Nested Virtualization" в настройках вашего гипервизора.
Здесь инструкции как это сделать для vmware. Но нужно учесть что, из-за вложенной виртуализации CPU, заметно пострадает производительность,
в эмуляторе.

Официальный репозиторий проекта.

На Ubuntu/Debian изменения только в установке самого Docker, делается одной командой:

curl -sSL https://get.docker.com/ | CHANNEL=stable sh

https://codeby.net/threads/ustanavlivaem-ehmuljator-android-7-1-pod-kali-linux.61809/
https://medium.com/@AndreSand/android-emulator-on-docker-container-f20c49b129ef
j2me в ubuntu
https://code.google.com/archive/p/microemu/downloads

запуск waydroid в ubuntu

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 13th, 2025 03:28 pm
Powered by Dreamwidth Studios