docker run run -t --rm //--rm для того чтобы контейнер удалился после того как закончит работу
-v «pwd»:/opt/project //монтируем текущую папку в /opt/project
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
stage.dev-ops-notes.ru/wp-content/uploads/sites/3/2017/08/Docker-Cheat-Sheet.pdf
dev-ops-notes.ru/docker/docker-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2%D0%B0%D1%88%D0%B8%D0%BC%D0%B8-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8/
ivan.bessarabov.ru/blog/docker-volumes-experiments
blog.amartynov.ru/docker-named-volumes/
dotsandbrackets.com/persistent-data-docker-volumes-ru/
medium.com/@hudsonmendes/docker-have-a-ubuntu-development-machine-within-seconds-from-windows-or-mac-fd2f30a338e4
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
If you mount a bind mount or non-empty volume into a directory in the container in which some files or directories exist, these files or directories are obscured by the mount, just as if you saved files into /mnt on a Linux host and then mounted a USB drive into /mnt. The contents of /mnt would be obscured by the contents of the USB drive until the USB drive were unmounted. The obscured files are not removed or altered, but are not accessible while the bind mount or volume is mounted.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
docs.docker.com/storage/volumes/#differences-between--v-and---mount-behavior
////////////////////////////////////////////////////////////////////////////////////////////////////////////
xakep.ru/2014/10/07/virtualisation-soft-review/
////////////////////////////////////////////////////////////////////////////////////////////////////////////
ПОХОЖЕ, ЧТО volumes хранятся в папке docker/volumes
Start a container with a volume
If you start a container with a volume that does not yet exist, Docker creates the volume for you. The following example mounts the volume myvol2 into /app/ in the container.
The -v and --mount examples below produce the same result. You can’t run them both unless you remove the devtest container and the myvol2 volume after running the first one.
«Mounts»: [
{
«Type»: «volume»,
«Name»: «myvol2»,
«Source»: "/var/lib/docker/volumes/myvol2/_data",
«Destination»: "/app",
«Driver»: «local»,
«Mode»: "",
«RW»: true,
«Propagation»: ""
}
],
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
We can now edit files in our IDE and run them in our Docker
There’s nothing stopping us from it now.
Say that you use your favourite editor (mine is Visual Studio Code, at the moment), and you want to run your app (rails server, your gradle boot, your sails lift), but you don’t have the dependencies installed in your machine? It’s now possible from your Docker container.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
Образы Docker, из которых запускаются контейнеры, представляют собой последовательность неизменяемых (только чтение) слоев.
При запуске из образа нового контейнера к этому набору неизменяемых слоев присоединяется слой, который можно изменять. С этого момента, если в контейнере попытаться изменить какой-нибудь существующий файл, то этот файл будет скопирован из одного из нижележащих неизменяемых слоев, в котором он был создан, в изменяемый слой, куда и запишутся все его изменения. Версия изменяемого слоя скрывает нижележащий файл, но не удаляет его. Когда вы удаляете запущенный контейнер и перезапускаете его из того же образа, все ваши изменения будут потеряны. Так работает UnionFS, которую использует Docker, для организации своей работы с данными.
Для того, чтобы иметь возможность сохранять ваши данные, а также использовать эти данные несколькими контейнерами, Docker предоставляем вам возможность использовать так называемые тома (Docker volumes). Если совсем просто, то тома – это обычные директории (или файлы) хостовой файловой системы сервера, на котором работает Docker, монтируемые в любую директорию контейнера
////////////////////////////////////////////////////////////////////////////////////////////////
создается ли поверх хост-ОС гостевая ОС? Нормально ли рассматривать каждый контейнер как виртуальное окружение? — Похоже, что да:
Your new development environment
In the past, if you were to start writing a Python app, your first order of business was to install a Python runtime onto your machine. But, that creates a situation where the environment on your machine needs to be perfect for your app to run as expected, and also needs to match your production environment.
With Docker, you can just grab a portable Python runtime as an image, no installation necessary. Then, your build can include the base Python image right alongside your app code, ensuring that your app, its dependencies, and the runtime, all travel together.
These portable images are defined by something called a Dockerfile
/////////////////////////////////////////////////////////////////////////
Would you run your IDE inside a container?
Naaaaa….That’s not the way containers work. It’s still too tricky and not portable to run graphical applications inside containers.
/////////////////////////////////////////////////////////////////////////
//здесь описан пока что самый лучший подход
www.youtube.com/watch?v=FiaLKwdv9TI
////////////////////////////////////////////////////////////////////////
www.youtube.com/watch?v=NEdDa3Zqu7s
www.youtube.com/watch?v=cBqjc3-w3y0
www.youtube.com/redirect?redir_token=WvtJhJAKEjusP_eG26nwvVsId7B8MTUyMTg0Njk1NUAxNTIxNzYwNTU1&event=video_description&v=cBqjc3-w3y0&q=https%3A%2F%2Fmedium.com%2F%40caabdalla%2Fusing-docker-as-develop-environment-3374363532c7
////////////////////////////////////////////////////////////////////////
Написание кода внутри контейнера habrahabr.ru/post/346890/
Когда сервис запускается внутри контейнера — он использует те скрипты/бинарные файлы, которые уже находятся внутри. Как нам их редактировать?
Элементарно. Нужно редактировать их извне, в любимом редакторе, в своей домашней папке, а потом просто скопировать в контейнер и запустить.
Даём доступ контейнеру к своей домашней папке используя опцию -v
После копирования обновленного скрипта или бинарного файла — запускаем сервис (способом, описанным в разделе инициализации) и получаем сервис с нашими правками, работающий в исходном окружении.
/////////////////////////////////////////////////////////////////////////
//про работу с GUI
jnaapti.com/blog/tag/android-studio/
training.play-with-docker.com/beginner-linux/
www.youtube.com/watch?v=PKyj8sbZNYw
www.youtube.com/watch?v=ZrEllmXDiwo
ncona.com/2016/07/android-development-with-docker/
www.youtube.com/watch?v=j2n0d7AZNug
medium.com/@elye.project/intro-to-docker-building-android-app-cb7fb1b97602
brightinventions.pl/blog/dockerizing-android-builds/
github.com/samtstern/android-vagrant
docs.docker.com/develop/dev-best-practices/#differences-in-development-and-production-environments
Можно использовать команду docker images, чтобы посмотреть список образов в системе.
Теперь давайте взглянем на команду docker ps. Она выводит на экран список всех запущенных контейнеров.
If you have multiple images with a lot in common, consider creating your own base image with the shared components, and basing your unique images on that. Docker only needs to load the common layers once, and they are cached. This means that your derivative images use memory on the Docker host more efficiently and load more quickly.
habrahabr.ru/post/337306/
Image (образ) – собранная подсистема, необходимая для работы процесса, сохраненная в образе.
Container (контейнер) – процесс, инициализированный на базе образа. То есть контейнер существует только когда запущен. Это как экземпляр класса, а образ это типа класс. Ну я думаю идея понятна.
Host (хост) – среда, в которой запускается докер. Проще говоря – ваша локальная машина.
Volume – это дисковое пространство между хостом и контейнером. Проще – это папка на вашей локальной машине примонтированная внутрь контейнера. Меняете тут меняется там, и наоборот, миракл.
Dockerfile – файл с набором инструкций для создания образа будущего контейнера
Service (сервис) – по сути это запущенный образ (один или несколько контейнеров), дополнительно сконфигурированный такими опциями как открытие портов, маппинг папок (volume) и прочее. Обычно это делается при помощи docker-compose.yml файла.
Docker-compose (докер-композ, чаще композер, но не путать с php composer) – тулза, облегчающая сборку и запуск системы состоящей из нескольких контейнеров, связанных между собой.
Build (билд, билдить) – процесс создания образа из набора инструкций в докерфайле, или нескольких докерфайлов, если билд делается с помощью композера
Согласен с автором во всем, сам въезжал в docker примерно 3 дня с параллельными попытками написания Dockerfile для сборки нужного мне image. Однако советую сразу пристальное внимание обратить на инструкцию CMD, без правильного написания которой запущенный контейнер будет сразу останавливаться, а вместо deprecated MAINTAINER использовать все разнообразие инструкции LABEL.
habrahabr.ru/company/flant/blog/336654/
docs.docker.com/get-started/#recap-and-cheat-sheet