Docker
Установка
$ apt autoremove --purge docker docker-engine docker-compose $ apt install docker docker-engine docker-compose $ docker run hello-world $ cd ./project/ $ docker-compose up
- Запуск производится от root
- docker-engine -
- docker-compose -
- docker-machine - https://github.com/docker/machine
Установить последнюю версию
$ curl -L"https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)"-o/usr/bin/docker-compose
Создание образа
$ docker build -t image-name .
- Где . папка, где расположен Dockerfile
- container-name - название создаваемого контейнера
Вывод списка образов
$ docker images
Запуск образа
$ docker run -d-p80:80-t hello-world $ docker run -d--publish8080:80-t hello-world
- 8080 - Порт хост машины
- 80 - Порт контейнера
Настройка
- docker-compose - средство сборки и настройки контейнеров
- docker-compose up - поднять контейнеры с учетом правил сборки docker-compose.yml
$ docker-compose config $ docker-compose up
Сборочные контейнеры в связке с docker-compose удобно использовать в окружении разработчика, когда требуется, например, производить некоторые действия при изменении исходников.
С docker-compose все просто, но есть нюансы. Использовать one shot контейнеры возможно только, если docker-compose up выполняется с опцией “-d”, в противном случае по завершении работы такого контейнера, compose останавливает все остальные контейнеры.
О контейнере
$ docker info Containers: 9 Running: 6 Paused: 0 Stopped: 3 Images: 28 Server Version: 1.12.5 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 90 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null overlay host bridge Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: seccomp Kernel Version: 3.16.0-4-amd64 Operating System: Debian GNU/Linux stretch/sid OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 7.8 GiB Name: nas.ztc ID: 6JPA:SQDY:WJRJ:F2R7:NDTL:SIYE:Z6UK:AVIH:3EZS:7GJM:UCXZ:KPDU Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: No memory limit support WARNING: No swap limit support WARNING: No kernel memory limit support WARNING: No oom kill disable support WARNING: No cpu cfs quota support WARNING: No cpu cfs period support Insecure Registries: 127.0.0.0/8
Статистика
$ docker stats CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS c8d1eb7a8f7a 0.02%0 B /0 B 0.00%38.07 kB /649.1 kB 258 kB /0 B 0 271073504ac9 0.10%0 B /0 B 0.00%6.517 kB /648 B 0 B /4.096 kB 0 462c8942181f 0.00%0 B /0 B 0.00%7.701 kB /648 B 0 B /0 B 0 94e2422ce234 0.33%0 B /0 B 0.00%22.98 MB /558.9 kB 1.798 MB /314.8 MB 0 6a43329858d9 18.18%0 B /0 B 0.00%7.431 kB /648 B 249.9 kB /20.62 GB 0 404d5b6bf024 0.08%0 B /0 B 0.00%7.959 kB /648 B 0 B /0 B 0
Работа с контейнером
$ docker exec-it security-mysql /bin/bash
Список контейнеров (запущенных и нет)
$ docker ps-a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c8d1eb7a8f7a teratek_web "/usr/bin/supervisord" About an hour ago Up 57 minutes 443/tcp, 0.0.0.0:80->80/tcp, 9000/tcp security-web 271073504ac9 stefobark/sphinxdocker "sh -c '/bin/sleep 5 " About an hour ago Up 57 minutes 0.0.0.0:9306->9306/tcp, 0.0.0.0:9312->9312/tcp security-sphinx 462c8942181f imkulikov/docker-grand-ambassador "/usr/bin/grand-ambas" About an hour ago Up 57 minutes security-proxy 94e2422ce234 mvertes/alpine-mongo "/root/run.sh mongod" About an hour ago Up 57 minutes 0.0.0.0:27017->27017/tcp, 0.0.0.0:28017->28017/tcp security-mongo 6a43329858d9 mysql "docker-entrypoint.sh" About an hour ago Up 57 minutes 0.0.0.0:3306->3306/tcp security-mysql 404d5b6bf024 redis:alpine "docker-entrypoint.sh" About an hour ago Up 57 minutes 6379/tcp security-redis
- -a - Позволяет увидеть не запущенные контейнеры
- где docker-grand-ambassador прокси для 2-ух направленной связи контейнеров
Остановка контейнера
$ docker stop 7d0eb5cd3b3b
Удаление контейнера
$ docker rm 7d0eb5cd3b3b
Dockerfile
- FROM — указывает название образа (image), который будет взят за основу.
- ENV — устанавливает переменную среды
- RUN — запустить команду в контейнере (все команды исполняются с полными правами в пределах контейнера)
- ADD — добавить файл в контейнер
- VOLUME — указать монтируемые директории (их можно монтировать на хост машину или на другие контейнеры)
- EXPOSE — указать транслируемые порты (их можно транслировать на хост машину или на другие контейнеры)
- CMD — запустить процесс (это и будет процесс, вокруг которого построен контейнер)