-
Notifications
You must be signed in to change notification settings - Fork 0
Docker
Полезно ознакомиться, если не знаете зачем вам докер (пока у вас что-то ставится) вроде тут просто и на русском: https://xakep.ru/2015/06/01/docker-usage/ а тут есть все: https://docs.docker.com/
https://docs.docker.com/install/linux/docker-ce/ubuntu/
выполняем prerequisites, устанавливаем докер до того состояния что сможем получить следующее запустив хелловорлд:
sudo docker run hello-worldHello from Docker! This message shows that your installation appears to be working correctly.....
Там же еще есть инструкция по созданию докер группы -- это позволит вам избежать ввода каждый раз команды sudo когда вызываете докер
Можно поставить себе nvidia-docker чтобы юзать гпушки
https://github.com/NVIDIA/nvidia-docker
Для его установки выполняем две команды и тестим # Test nvidia-smi (третья команда)
Ставим образ, например https://github.com/saiprashanths/dl-docker или https://github.com/windj007/docker-jupyter-keras-tools/ или вообще отсюда https://hub.docker.com/explore/
Скачиваем докерфайл (обычно указано в инструкциях), собираем (он что-то еще докачает). Получаем образ - некоторый шаблон, собранный из инструкций в dockerfile из которого можем создавать свое рабочее окружение - докер контейнер.
запускается образ вот так:
sudo docker run -it -p 8809:8888 -p 6006:6006 -v sharedfolder:/root/sharedfolder name_image:tag bash| Флаги | зачем |
|---|---|
-it |
создает интерактивный терминал для работы с окружением внутри контейнера |
-p 8888:8888 -p 6006:6006 |
Связываем порты от контейнера к вашему компьютеру в формате -p <host-port>:<container-port>. default iPython Notebook runs on port 8888 and Tensorboard on 6006 |
-v /sharedfolder:/root/sharedfolder/ |
-v cвязывает папочку /sharedfolder на вашей машине с папкой /root/sharedfolder/ в контейнере докера. (важный момент - пути абсолютные) Все что вы сохраните измените внутри контейнера поменяется и на вашем хосте. Формат прописывания -v /local/shared/folder:/shared/folder/in/container/. |
name_image:tag |
Название образа который хотите запустить. Формат имя_образа(сборки):Необязательный_тег. посмотреть список образов на своем компе можно sudo docker images
|
bash |
в конце пишется команда того что запустить. Можно запустить сразу ноутбук docker run -it -p 8888:8888 -p 6006:6006 floydhub/dl-docker:cpu jupyter notebook. |
(Другой список флагов вы можете найти покопавшись на сайте докера :))
после того как все сделано набираешь exit и он выходит из контейнера.
по каждой команде run он собирает новый контейнер из образа (из всех слоев образа) поэтому запуская через run каждый раз у вас будет свежее окружение
если вы наследили в запущенном контейнере и хотите чтобы какие файлы или установленные пакеты были доступны в новом запуске то можно запустить сразу контейнер. список контейнеров можно поглядеть через sudo docker ps -a, найти свой (контейнер айди) и запустить так:
$ sudo docker start 3uds38954jw4 # restart it in the background
$ sudo docker attach 3uds38954jw4 # reattach the terminal & stdinи все должно быть хорошо - вы подсоединитесь к тому где есть ваши пакеты/данные.
если нужно что то сохранить или сделать новый измененый образ с накатанным добром то можно сделать так:
$ docker ps -a # найти ваш контейнер и запомнить его контейнер айди
$ docker commit <container_id> new_image_name:tag_name(optional) # заделать новый образ из этого контейнера
$ docker images # посмотреть что новый образ есть в списке образов
$ docker run -it new_image_name:tag_name bash # запустить и радоваться :)
# если хотите "свернуть" процесс чтобы потом можно было войти заново - то ctrl + p затем ctrl + qКажется (вроде бы) это добавляет новый слой (который можно было изменять в контейнере) поверх нашего базового образа (read-only слои).
http://stackoverflow.com/questions/19585028/i-lose-my-data-when-the-container-exits
$ sudo docker images # смотрим образы
$ sudo docker save имя_образа > /home/save.tar # сохраняем необходимый образ$ sudo docker ps -a # смотрим конейнеры
$ sudo docker export e3574fcc273a > ~/docker_tmp/exported_dl_with_numpy.tar # сохраняем необходимый контейнергде e3574fcc273a это некоторый container ID
ЗАГРУЗКА:
# загрузка образа
$ docker load < /home/save.tar
$ sudo docker images# загрузка контейнера
$ cat /home/exported_dl_with_numpy.tar | sudo docker import - busybox-1-export:latest
$ sudo docker imagesPS если что переименовать образ можно командой docker tag
http://tuhrig.de/difference-between-save-and-export-in-docker/
Есть некоторый набор хороших правил если вы будете собирать свой образ: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/