Docker

Содержание

  • Basic info
  • Windows
  • Commands
  • Commands for few
  • Windows
  • Achtung!
  • Docker push and pull image
  • Вопросы и Ответы

Basic info

  • Образ - это набор файлов, необходимых для работы приложения на голой машине с установленным Docker.
  • Контейнер - это запущенный образ. Из образов создаються и запускаютьс контейнеры.
  • Dockerfile - инструкции для построения образа. Это простой способ автоматизировать процесс создания образа.
  • docker-compose.yml - инструкции для сборки нескольких контейнеров и их взаимодействия

Windows

Когда тестируете на Windows то порт будет - 192.168.99.100, а на Linux - 127.0.0.1 OR localhost

Achtung!

  • при создание образа командой docker build -t [image-name] . в конце - Не забудьте точку !
  • В приложении, которое переносите в docker-образ, меняйте хост с localhost -> 0.0.0.0
  • CMD может быть только одно в Dockerfile
  • Когда тестируете на Windows то порт будет - 192.168.99.100, а на Linux - 127.0.0.1 OR localhost

Tools

  • FromLatest - https://www.fromlatest.io/#/ - для оптимизации Dockerfile
  • Docker Toolbox - десктопное приложение для Windows и Mac
  • Docker Client (CLI) - только для Linux

Commands

  • docker run -d -P [image-name] - запустить образ, тем самым создаеться контейнер, если образ не находитьс локально тогда исчет на докер хабе и скачиваеться, запускаеться. -d - открепить процес от консоли, -P - призначить рандомный порт к порту приложения внутри Docker
  • docker run -it [image-name] sh - запустить образ и зайти внутрь контейнера
  • docker run -it --rm [image-name] sh - запустить образ и зайти внутрь контейнера + удалить контейнер после закрытия
  • docker build -t [image-name] . - забилдить образ на основе Dockerfile
  • docker logs [container-id] - получить логи с контейнера
  • docker exec -it [container-id] /bin/bash - войти в контейнер
  • docker pull [image-name] - Скачать образ с docker hub
  • docker images - покажет сколько образов есть локально
  • docker rmi [image-name] [image-name] -f - удалить или образы
  • docker ps - покажет контейнеры
  • docker ps -a - покажет контейнеры + которые были запущены
  • docker run [image-name] [command] - запустить образ и выполнить внутри команду
  • docker run -it [image-name] sh - зайти внутрь контейнера и открыть консоль контейнера. Команда run с флагом -it подключает интерактивный tty в контейнер.
  • docker rm $(docker ps -a -q -f status=exited) - удалить все контейнеры с статусом exited
  • docker run -d -P --name [your-name-to-container] [image-name] - Флаг -d открепит (detach) терминал, флаг -P сделает все открытые порты публичными и случайными, и, наконец, флаг --name это имя, которое мы хотим дать контейнеру.
  • docker port [container-name] - просмотреть порты контейнера
  • docker run -p 8000:3000 [image-name] - запустить контейнер с перебросом запроса с 0.0.0.0:8000 -> 3000. Слева порт локальный - справа порт Докера, указанный в Dockerfile (expose) на который будет переброс запросов
  • docker push [nickname]/[image-name] - запушить свой образ на свой репозиторий
  • docker commit [container-id] [image-name:tag] - сделать из контейнера образ

Commands for few

  • sudo docker kill $(sudo docker ps -q) - убить все контейнеры. -q - показать только ID
  • sudo docker rm $(sudo docker ps -q -a) - удалить все контейнеры
  • sudo docker rmi $(sudo docker images -q) - удалить все образы

Docker push and pull image

# Enter your credentials
docker login

# Rename your image if it is not like: nickanme/image-name
docker tag my_image nickname/my_image

# Push your image to your repositories
docker push nickname/my_image

# Pull this image
docker pull nickname/my_image

Вопросы и Ответы

1) Как уменьшить размер образа? допустим nodejs official весит 400 мб в свернутом состоянии.

  • Использовать еще меньший отцовский образ, например: ubuntu - 43mb или alpine - 5mb
  • Попробовать найти уже нужный образ с наименьшим размером, например: alpine-node - 67mb
  • Не устанавливать отладочные иструменты, например: vim или curl
  • Больше здесь: https://hackernoon.com/tips-to-reduce-docker-image-sizes-876095da3b34

2) Можно ли из контейнера сделать образ?

Да можно: docker commit [container-id] [image-name:tag]

3) Если не удаеться скачать репозиторий, а сеть все таки есть, тогда что?

docker-machine restart default 
docker login

4) Под Windows установил Docker-Toolbox. Но подключиться могу только через PS в окне Toolbox. Как подключиться через cmd или cmder.exe?

docker-machine env --shell cmd default 
@FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO @%i

5) Как проверить что докер запущен на Windows?

docker-machine active