Site Tools


docker

https://docker.crank.ru/docs/docker-engine/engine-reference/dockerfile-reference/

Получить список команд

docker  # Вызываем без аргументов

Посмотреть все контейнеры

docker ps -a
CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS                    PORTS                          NAMES
cf7459d62e5d        019f1b67b202            "/bin/sh -c '#(nop)    10 weeks ago                                                                 some_name
71a2b1343c6c        019f1b67b201            "/bin/sh -c '#(nop)    10 weeks ago                                                                 some_name2

Посмотреть контейнеры с прикрепленным volume:

docker ps -a --filter=volume=5d006_volId_ec3adca

Посмотреть images для докера

docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
project/php-cron         latest              504ec51ba56d        12 days ago         235.6 MB
project/php-nrpe         latest              28ac2a485d07        12 days ago         237.8 MB
project/php-fpm          latest              6dbcefecaf2e        12 days ago         246.7 MB

Выполнение комманды внутри docker

docker exec -t nginx_container ifconfig

Зайти внутрь докера

docker-enter container_name

Если переопределен shell, то

docker exec -it container_name /bin/bash

Под рутом

docker exec -u 0 -it container_name /bin/bash

получить информацию о включенном докере

docker inspect instance_name

одноразовый старт контейнера

docker run -i -t imageName /bin/bash

Если же хочется продолжить использовать этот контейнер, но при этом выйти из терминала, то можно испольозвать detach:

ctrl+p  ctrl+q   #который нажимаются последовательно в терминале когда находишься внутри docker.

Приатаччиться:

docker attach 3d9cd353e38a

Если вдруг это все захотелось сохранить, то:

docker commit 3d9cd353e38a somename/somename

тогда текущее состояние будет сохранено как отдельный image (добавить новый слайс к предыдущему image)

Discussion

Constantin Conovaloff, 2015/05/14 22:10

http://phusion.github.io/baseimage-docker/ – частые проблемы

Constantin Conovaloff, 2015/05/14 22:15

https://registry.hub.docker.com/ – готовые официальные репозитории

Constantin Conovaloff, 2015/05/14 22:39

http://eax.me/docker/

Constantin Conovaloff, 2015/08/05 18:02

убийство запущенного образа

docker kill DOCKER_ID
Constantin Conovaloff, 2015/08/11 21:13

Круть

В чем круть?
Можно копирировать, скачивать, делиться образами с настроенным env и пакетами, при этом это не будет занимать места или процесса. https://hub.docker.com/ этакий github для образов docker, где можно скачать, запустить, посмотреть и перейти к другому образу.

Constantin Conovaloff, 2015/08/11 21:30

Почему это плохо?

Constantin Conovaloff, 2015/08/11 21:32

Примеры использования

  1. У вас сайт для теста кода. При этом, на каждый тест вы создаете отдельный контейнер и запускаете в нем код.
  2. Вы написали приложение с кучей зависимостей и тонкой настройкой. Чтобы не поднимать и настраивать это все на каждой машине, вы запихиваете это в docker и раздаете кому нужно.
Constantin Conovaloff, 2016/03/10 20:19

Пример использования

Хотим мы установить по быстрому gitlab на локальный ПК.

В итоге, чтобы поставить gitlab, нам достаточно сделать всего 2 вещи:
1) скачать докер файл:

docker pull gitlab/gitlab-ce

2) запустить его с необходимыми параметрами. Их нам подсказывают на доп.информации о док.файле

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 8929:8929 --publish 2289:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

И это все что нужно… никаких больше действий, все работает.

--detach --hostname gogo.example.com --publish 8930:80 --publish 2290:22 --name gitlab gitlab/gitlab-ce:latest
Constantin Conovaloff, 2016/03/11 12:44

Мы внесли изменения в наш image. Как запаковать чтобы распространить?

Constantin Conovaloff, 2018/09/05 17:39

Почему я не навижу докер

======= host диск
# time dd if=/dev/zero of=./test bs=1M count=5000
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 109.109 s, 48.1 MB/s

real	1m49.114s
user	0m0.045s
sys	1m48.953s
======= guest ram by config
$ time dd if=/dev/zero of=./test bs=1M count=5000
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 636.876 s, 8.2 MB/s

real	10m36.878s
user	0m0.393s
sys	10m36.450s
======= guest ram by mount
$ time dd if=/dev/zero of=./test bs=1M count=5000
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 8.81203 s, 595 MB/s

real	0m8.815s
user	0m0.013s
sys	0m8.802s
======= host ram
# time dd if=/dev/zero of=./test bs=1M count=5000
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB, 4.9 GiB) copied, 7.86131 s, 667 MB/s

real	0m7.863s
user	0m0.017s
sys	0m7.846s
Constantin Conovaloff, 2018/09/14 11:42

docker ps

CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                            NAMES
d14bcb97918d        dockercompose_php                  "php-fpm7.1 -F"          13 minutes ago      Up 13 minutes       0.0.0.0:9000->9000/tcp, 0.0.0.0:888->80/tcp      dionis-php

docker commit d14bcb97918d dockercompose_php

Constantin Conovaloff, 2019/01/23 15:19

Докер умеет кэшировать build этапы. Это значит, что если у вас в докер файле записаны разные команды, то выполняя каждую из них - он создает коммит. И когда вы добавите в ваш докер файл еще одну комманду, то он не будет выполнять все команды заного, а просто выполнит добавленную вами.

Чтобы очистить все, исползуйте:

docker system prune -a
Constantin Conovaloff, 2019/02/26 14:52

LEARN

запуск hello world

docker run hello-world 



запуск ubuntu которая будет терять состояние при выходе

docker run -it ubuntu bash



Ищите контейнеры здесь

https://hub.docker.com/search?q=&type=image



Создание образа vi Dockerfile

  # берем за основу желаемый образ
  FROM docker/whalesay:latest  
 
  # Обновляем все внутрм; ставим желаемые проги и т.д.
  RUN apt-get -y update && apt-get install -y fortunes
 
  # указываем команду выполнения при старте этого образа
  CMD /usr/games/fortune -a | cowsay

Создание образа из докерфайла docker build -t docker-whale .

Публикация образа

# Находим наш образ
$ docker images | grep whale
docker-whale                       latest              924cbfd3ac58        18 minutes ago      278MB
 
# Тэгируем его нашим именем (и версией)
$ docker tag 924cbfd3ac58 conovaloff/docker-whale:latest
 
$ docker images | grep whale
docker-whale                    latest              924cbfd3ac58        18 minutes ago      278MB
conovaloff/docker-whale         latest              924cbfd3ac58        18 minutes ago      278MB
 
# логируемся в хаб
$ docker login
Username: conovaloff
Password: 
Login Succeeded
 
# пушим образ
$ docker push conovaloff/docker-whale

Удаляем образы

docker rmi -f 924cbfd3ac58
docker rmi -f docker-whale

Загружаем наш опубликованный образ

docker run conovaloff/docker-whale


Способ зайти в систему

docker run -t -i ubuntu /bin/bash
# -t активирует псевдо-терминал для нового контейнера
# -i делает интерактивное соединение захватывая поток ввода STDIN

Запуск демона-контейнера

docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

Просмотр запущенных контейнеров

docker ps

Просмотр stdout контейнера

docker logs a4d89318030b

Останавливаем контейнер

docker stop a4d89318030b


Сетевые взаимодействия

docker run -d -P training/webapp python app.py
# -P -- позволяет связать порт хост машины с внутренним. В противном случае, к этому хосту можно было бы достучаться только по его ip

docker run -d -p 888:5000 training/webapp python app.py
# -p 888:5000 -- связывает 888 порт хост машины с 5000 портом контейнера
# можно посмотреть все порты контейнера
docker port da8a0d8528c4

посмотреть процессы контейнера

docker top da8a0d8528c4

Получить всю подробную информацию о контейнере (о маунтах, портах и т.д.)

docker inspect 9d635118e11e

# есть способ получить конкретную информацию 
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 9d635118e11e

Поиск образа из консоли

$ docker search mysql
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                                                  MySQL is a widely used, open-source relation…   7847                [OK]                
mariadb                                                MariaDB is a community-developed fork of MyS…   2598                [OK]                
mysql/mysql-server                                     Optimized MySQL Server Docker images. Create…   591                                     [OK]
zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       168                                     [OK]

Изменение докера возможно 2мя путями:

  • коммит изменений сделанных в контейнере
  • редактирование Dockerfile

Коммит изменений

host@:/$ docker run -it ubuntu bash
 
docker@:/$ echo some > awesome.sh
 
docker@:/$ exit
 
host@:/$ docker commit -m "some message" -a "ConConovaloff" fa121c21b995 conovaloff/ubuntu:v2
 
host@:/$ docker run -it conovaloff/ubuntu:v2

Редактирование Dockerfile

host@:/$ vi Dockerfile
FROM ubuntu:latest
RUN echo wowWow > /awesome.sh
CMD cat /awesome.sh
 
host@:/$ docker build -t conconovaloff/ubuntu-some .
host@:/$ docker run -it conconovaloff/ubuntu-some
wowWow


сетевые контейнеры – https://docker.crank.ru/docs/docker-engine/learn-by-example/network-containers/

docker run -d -P --name web training/webapp python app.py
# --name web - дает контейнеру имя

В докер всегда есть 3 сети:

$docker network ls
 
NETWORK ID          NAME                DRIVER
18a2866682b8        none                null                
c288470c46f6        host                host                
7b369448dccb        bridge              bridge  # <- По умолчанию все контейнеры используют bridge

Можно отключить контейнер от сети

docker network disconnect bridge conteinerName

Создание собственной bridge сети

docker network create -d bridge myBridgeNetworkName
# -d bridge - говорит Докер использовать сетевой драйвер моста bridge

Создание контейнера с подключением к определенной сети

docker run -d --network=myBridgeNetworkName --name db training/postgres 

Можно инспектировать саму сеть, чтобы смотреть хосты внутри нее

docker inspect dockercompose_default

Можно подключать уже запущенный контейнер к другим сетям

docker network connect myBridgeNetworkName web

https://docker.crank.ru/docs/docker-engine/learn-by-example/manage-data-in-containers/ – данные для контейнера

  • именованные хранилища позволяют отвязаться от привязке к хост-хозяину, ведь мы не знаем что за хост система у нас и как она устроена
docker run -d -P --name web -v /webapp training/webapp python app.py
# -v /webapp - монтируем /var/lib/docker/volumes/e941.../_data/ хостовой машины в /webapp контейнера
docker run -d -P -v /share:/some training/webapp python app.py
# -v /share:/some - Монтируем папку /share хоста в /some контейнера

docker run -d --volume-driver=local -v my-named-volume:/opt/webapp training/webapp python app.py
# -v my-named-volume:/opt/webapp - указывает, что нужно использовать\создать именованное хранилище my-named-volume
# --volume-driver=local - указывает драйвер для хранилища (по умолчанию: local). Другие можно посмотреть здесь https://docker.crank.ru/docs/docker-engine/implement-plugins/use-docker-engine-plugins/

# можно было перед этим в ручную создать именованное хранилище
docker volume create -d flocker -o size=20GB my-named-volume

# можно монтировать одиночные файлы
docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash

https://docker.crank.ru/docs/docker-engine/learn-by-example/store-images-on-docker-hub/ – Размещение образов на Docker Hub


https://docker.crank.ru/docs/docker-compose/overview-of-docker-compose/ – Что такое Docker Compose

You could leave a comment if you were logged in.
docker.txt · Last modified: 2019/03/18 17:04 by conovaloff

Page Tools