- Установка
- Проверка
- Параметры
docker run
- Запуск контейнераdocker port
- Узнать какие порты открытыdocker ps
- Список запущеных контейнеровdocker inspect
- Информация о контейнереdocker diff
- Список файлов измененных в контейнереdocker logs
- Список событий произошедших в контейнереdocker commit
- Превращение контейнера в образdocker attach
- Присоединится к запущеному контейнеруdocker exec
- Выполнить команду внутри запущенного контейнераdocker top
- Выполняемые процессы внутри контейнераdocker create
- Cоздать но не запускать контейнерdocker start
- Запуск контейнераdocker pause/unpause
- Приостановка/запуск контейнераdocker restart
- Перезапуск контейнераdocker stop
- Остановка контейнераdocker rm
- Удалить контейнерdocker kill
- Послать сигнал основному процессуdocker tag
- Добавить тег образуdocker history
- Список уровней образа
- Информация о механизме Docker
- Сборка
- Работа с образами
Установка
get.docker.com
- Установка в любую систему через оф. скрипт
curl https://get.docker.com > /tmp/install.sh
chmod +x /tmp/install.sh
/tmp/install.sh
После выполнения скрипта будет уст. стабильная версия docker и все доп. пакеты
После выполнения скрипта будет предложено добавить пользователя docker в группу суперпользователей чтобы не вводить sudo в дальнейшем. Пример
sudo usermod -aG docker vagrant
И перезапуск демона
sudo service docker restart
Установка в Ubuntu 16.04. v2
1) Преинсталяция
sudo apt-get update
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
...
OK
...
sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
sudo apt-get update
apt-cache policy docker-engine
2) Установка docker-ce
sudo apt-get install -y docker-engine
Использование docker без прав sudo
sudo usermod -aG docker $(whoami)
Если хочеться автокомплит но его нет…
sudo apt-get update
sudo apt-get install bash-completion
Установка docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
...
sudo chmod +x /usr/local/bin/docker-compose
...
docker-compose --version
Установка docker-machine
base=https://github.com/docker/machine/releases/download/v0.16.0 && \
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && \
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
Проверка
$ docker version
Client: Docker Engine - Community
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89e8a
Built: Thu Jul 25 21:21:35 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:48:43 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
Параметры
docker run
- Запуск контейнера
- -a, --attach - Подключить stdout, stdin, stderr запущенного контейнера
- -d - Запустить контейнер в фоновом режимe
$ docker run -d --name myredis redis 102baa8f1c2c08ef1c7bf15c003b64303d13ee6ff99a69b1297cb5f550794182
- -e, --env - Задает переменные окружения
$ docker run -e myenv=test --rm ubuntu env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=92efa0c46920 myenv=test HOME=/root
- --env-file - Задает файл с переменными окружения
$ cat env-file.txt myenv=test TEST=dsa
$ docker run --env-file=env-file.txt --rm ubuntu env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=7fd5eb3eaca0 myenv=test TEST=dsa HOME=/root
- -h, --hostname - Задать имя оболочки
$ docker run -h mybash -it debian bash root@mybash:/#
- -it - Запуск и вход в контейнер
Ключи it позволяют создавать tty соединение с контейнером
$ docker run -it debian bash root@14e5a4e1cce8:/#
- --link - Установить соединение из одного контейнера в другой.
В новом контейнере, в `/etc/hosts` записывается IP контейнера к которому идет соединение
где$ docker run --rm -it --link myredis:alias_in_hosts redis bash root@df80955ab8fb:/data# cat /etc/hosts ... 127.0.0.1 localhost 172.17.0.2 alias_in_hosts 8868c8a3c6fc myredis ...
- myredis - название контейнера
- alias_in_hosts - алиас, по которому можно обратиться к хосту. Опционален
- --name = Задать имя контейнеру
Задается имя по которому можно обращяться к контейнеру
$ docker run --name avis-doc -it debian bash root@a0f5e7575c36:/# ... $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a0f5e7575c36 debian "bash" 17 seconds ago Up 15 seconds avis-doc
- --net установка сети
$ docker run --rm -d --net=host --name postgres postgres:11-alpine
$ sudo netstat -tulpn | grep LISTEN | grep postgres tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 5123/postgres tcp6 0 0 :::5432 :::* LISTEN 5123/postgres
- -p - Задает порт с контейнера на хост
$ docker run -p 8000:80 -d --rm nginx 3ca968453e27d021dcdba4dd1d65864bdb06e9712bd850b36fea868671732a67
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
$ curl localhost:8000
!DOCTYPE html
Используется проброс порта на хост машину. Порт при этом выбирается рандомный
$ docker run -P --name myredis -d redis
5090844a319c99b44e6c2d69b5a0003f34c44a2158cccf407ce0cae849894bdf
$ docker port myredis
6379/tcp -> 0.0.0.0:32770
$ redis-cli -p 32770
127.0.0.1:32770>
q
r
Без --rm
avis@avisPC[15:47:30]:~$ docker run debian echo 1
1
avis@avisPC[15:51:15]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc18ba4196a9 debian "echo 1" 7 seconds ago Exited (0) 5 seconds ago affectionate_mayer
С --rm
avis@avisPC[15:52:52]:~$ docker run --rm debian echo 2
2
avis@avisPC[15:52:56]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
avis@avisPC[15:53:00]:~$
s
t
u
v
$ docker run --rm -v "$(pwd)"/app:/app identidock
$
w
x
y
z
docker run debian echo "hi"
Эта команда скачает образ debian из репозитория и выполнит команду echo
$ sudo docker run debian echo "hi"
Unable to find image 'debian:latest' locally
latest: Pulling from library/debian
6f2f362378c5: Pull complete
Digest: sha256:118cf8f3557e1ea766c02f36f05f6ac3e63628427ea8965fb861be904ec35a6f
Status: Downloaded newer image for debian:latest
hi
docker port
- Узнать какие порты открыты
vagrant@ubuntu-xenial:~$ docker port myredis
6379/tcp -> 0.0.0.0:32768
docker ps
- Список запущеных контейнеров
Ключи
- -q = Показать только ID контейнеров
- -a = Список всех контейнеров. После выполнения команды docker ps -a выводится список всех контейнеров, включая остановленные (stopped)
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 384b48afd439 debian "bash" About a minute ago Exited (0) About a minute ago upbeat_visvesvaraya a5f7f69f6234 debian "bash" 8 minutes ago Exited (0) 3 minutes ago docker-cont
Команда выводит краткую информацию о контейнерах. В последнем столбце NAMES
контейнеру писваивается название по которому можно обращаться вместо ID
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83de7485c503 debian "bash" 6 minutes ago Up 6 minutes priceless_curie
vagrant@ubuntu-xenial:~$
docker inspect
- Информация о контейнере
Ключи
- -a =
- -a =
content
docker inspect [NAME|ID|часть id (?)]
Выводит полную информацию о контейнере в формате json
$ docker inspect 83de7485c503
[
{
"Id": "83de7485c5031703389660e8a7c3f8b618677a74aa94561da8986f7fb2cb9086",
"Created": "2019-07-04T21:34:43.379541435Z",
"Path": "bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
},
"NetworkSettings": {
"IPAddress": "172.17.0.2",
}
}
]
docker diff
- Список файлов измененных в контейнере
Ключи
- -a =
- -a =
content
docker diff friendly_wozniak
$ docker diff friendly_wozniak
C /bin
D /bin/echo
A /test
docker logs
- Список событий произошедших в контейнере
Ключи
- -f = Непрерывный вывод
- -t = Вывести в каждой строке время
$ docker run --rm --name mynginx -d -p 80:80 nginx ... $ docker logs -tf mynginx 2019-07-27T14:23:27.005976862Z 172.17.0.1 - - [27/Jul/2019:14:23:27 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.47.0" "-"
$ docker logs docker-cont
root@a5f7f69f6234:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@a5f7f69f6234:/# alala
bash: alala: command not found
docker commit
- Превращение контейнера в образ
$ docker commit cowsay test_rep/cowsay_image
sha256:2b9eb0b0e5c1b4984f86965a606bfc2b4edd498dd1b4684bd14196dcf817f374
где
- cowsay - название контейнера (работающего или нет)
- test_rep - название репозитория
- cowsay_image - название образа
$ docker create debian
c935ea21cd290d56370ec096479b82df175821043eae48f60f7e811c4d1df553
docker attach
- Присоединится к запущеному контейнеру
Ключи
- -a =
- -a =
content
$ docker attach mybash
Нажатие Ctrl+C прекращает запущенный контейнер!
Для коректной остановки контейнера-наблюдателя нужно нажать Ctrl+P, Ctrl+Q
docker exec
- Выполнить команду внутри запущенного контейнера
$ docker exec -it competent_franklin bash
root@4a2d8a302ee5:~#
docker top
- Выполняемые процессы внутри контейнера
$ docker top mynginx
UID PID PPID C STIME TTY TIME CMD
root 3942 3902 0 12:55 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 3985 3942 0 12:55 ? 00:00:00 nginx: worker process
vagrant@ubuntu-xenial:~$
docker create
- Cоздать но не запускать контейнер
Ключи
- -a =
- -a =
content
docker start
- Запуск контейнера
$ docker start nostalgic_archimedes
nostalgic_archimedes
docker pause/unpause
- Приостановка/запуск контейнера
$ docker pause mynginx
mynginx
vagrant@ubuntu-xenial:~$ docker unpause mynginx
mynginx
...
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c049c4becddf nginx "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes (Paused) 80/tcp mynginx
vagrant@ubuntu-xenial:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c049c4becddf nginx "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes 80/tcp mynginx
vagrant@ubuntu-xenial:~$
docker restart
- Перезапуск контейнера
$ docker restart mynginx
mynginx
docker stop
- Остановка контейнера
$ docker stop upbeat_visvesvaraya
upbeat_visvesvaraya
...
$ docker run -it debian bash
root@384b48afd439:/# exit
docker rm
- Удалить контейнер
vagrant@ubuntu-xenial:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8ab3c95d75d debian "bash" 3 minutes ago Exited (127) 4 seconds ago mybash
fcd26f1ccacc postgres "docker-entrypoint.s…" 15 hours ago Exited (0) 15 hours ago dbcontainer
vagrant@ubuntu-xenial:~$ docker rm mybash
mybash
vagrant@ubuntu-xenial:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcd26f1ccacc postgres "docker-entrypoint.s…" 15 hours ago Exited (0) 15 hours ago dbcontainer
vagrant@ubuntu-xenial:~$
docker kill
- Послать сигнал основному процессу
$ docker kill competent_franklin
competent_franklin
$ docker kill -s HUP mybash
mybash
$ docker kill -s 15 mybash
mybash
docker tag
- Добавить тег образу
$ docker tag proxy:0.1 avis20/proxy:0.1
$ docker images avis20/proxy
REPOSITORY TAG IMAGE ID CREATED SIZE
avis20/proxy 0.1 e716b9df4925 2 weeks ago 109MB
docker history
- Список уровней образа
Ключи
- -H, --human=(true/false) - Вывести размеры и даты в человеческом формает. По умолчанию включено
$ docker history avis20/cowsay:latest -H=false IMAGE CREATED AT CREATED BY SIZE COMMENT a99395ef309a 2020-01-03T00:25:04+03:00 /bin/sh -c #(nop) ENTRYPOINT ["/entrypoint.… 0 b9e9e051fdcd 2020-01-03T00:25:04+03:00 /bin/sh -c #(nop) COPY file:6152ff200c4bfda5… 123 b5690b9e28a3 2020-01-03T00:25:04+03:00 /bin/sh -c apt-get update && apt-get install… 70810049 a8d0017afa33 2020-01-03T00:24:53+03:00 /bin/sh -c #(nop) MAINTAINER Orlov Yaroslav… 0 549b9b86cb8d 2019-12-19T07:21:28+03:00 /bin/sh -c #(nop) CMD ["/bin/bash"] 0 missing 2019-12-19T07:21:28+03:00 /bin/sh -c mkdir -p /run/systemd && echo 'do… 7 missing 2019-12-19T07:21:27+03:00 /bin/sh -c set -xe && echo '#!/bin/sh' > /… 745 missing 2019-12-19T07:21:26+03:00 /bin/sh -c [ -z "$(apt-get indextargets)" ] 987485 missing 2019-12-19T07:21:25+03:00 /bin/sh -c #(nop) ADD file:53f100793e6c0adfc… 63206481
$ docker history avis20/cowsay:latest
IMAGE CREATED CREATED BY SIZE COMMENT
a99395ef309a 25 minutes ago /bin/sh -c #(nop) ENTRYPOINT ["/entrypoint.… 0B
b9e9e051fdcd 25 minutes ago /bin/sh -c #(nop) COPY file:6152ff200c4bfda5… 123B
b5690b9e28a3 25 minutes ago /bin/sh -c apt-get update && apt-get install… 70.8MB
a8d0017afa33 25 minutes ago /bin/sh -c #(nop) MAINTAINER Orlov Yaroslav… 0B
549b9b86cb8d 2 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
missing 2 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
missing 2 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 745B
missing 2 weeks ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 987kB
missing 2 weeks ago /bin/sh -c #(nop) ADD file:53f100793e6c0adfc… 63.2MB
Информация о механизме Docker
docker info
- Инфо
Различкая информация о машине
$ docker info
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 66
...
docker help
- Справка
docker version
- Версия
Сборка
docker build
- Собрать образ
Ключи
- -t - Задать тег сборке
$ docker build -t avis20/cowsay . Sending build context to Docker daemon 4.096kB Step 1/5 : FROM ubuntu ---> 549b9b86cb8d ...
$ docker images | grep avis avis20/cowsay latest 4ce46efcd682 2 hours ago 135MB
- -f - Имя файла отличного от Dockerfile
$ docker build -t avis20/cowsay -f ./cowsay/my_dockerfile . Sending build context to Docker daemon 123.9kB Step 1/5 : FROM ubuntu ---> 549b9b86cb8d ...
- --no-cache = Не использовать кеш при сборке
content
- -a =
content
Последний аргумент всегда должен быть контекст, в рамках которого работает Dockerfile
$ docker build -t alala/cowsay-ubuntu .
Создает образ контейнера согласно Dockerfile в дире .
$ cat Dockerfile
FROM ubuntu
RUN apt-get update && apt-get install -y cowsay fortune
$ docker build -t alala/cowsay-ubuntu .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM ubuntu:18.04
18.04: Pulling from library/ubuntu
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c
Status: Downloaded newer image for ubuntu:18.04
---> 4c108a37151f
Step 2/2 : RUN apt-get update && apt-get install -y cowsay fortune
---> Running in e7c40631e32f
Removing intermediate container e7c40631e32f
---> d0f1c901b7d3
Successfully built d0f1c901b7d3
Successfully tagged alala/cowsay-ubuntu:latest
vagrant@ubuntu-xenial:/project/cowsay$ docker build -t alala/cowsay-ubuntu .
$ docker run --rm alala/cowsay-ubuntu echo hello
hello
docker push
- Запушить готовый образ в репозиторий
docker push ceaef8f4b6d4/cowsay2
vagrant@ubuntu-xenial:/project/cowsay$ docker push ceaef8f4b6d4/cowsay2
The push refers to repository [docker.io/ceaef8f4b6d4/cowsay2]
750effa31cc3: Mounted from ceaef8f4b6d4/cowsay
57de69090948: Mounted from ceaef8f4b6d4/cowsay
75e70aa52609: Mounted from ceaef8f4b6d4/cowsay
dda151859818: Mounted from ceaef8f4b6d4/cowsay
fbd2732ad777: Mounted from ceaef8f4b6d4/cowsay
ba9de9d8475e: Mounted from ceaef8f4b6d4/cowsay
latest: digest: sha256:dc0523c773771965ef74a06b74337f1b8eeda9ce75ae7d6e9b47b53904509244 size: 1571
docker pull
- Скачать образ из репозитория
$ docker pull redis
Using default tag: latest
latest: Pulling from library/redis
Digest: sha256:87ba16f132f3afc613f9685c0edfb5cceadd897d96def1b3e8578f6c74b53ffa
Status: Image is up to date for redis:latest
Работа с образами
docker save
- Сохранить образ в архив
vagrant@ubuntu-xenial:~$ docker save -o /tmp/redis.tar redis:latest
vagrant@ubuntu-xenial:~$ ls -la /tmp/redis.tar
-rw------- 1 vagrant vagrant 98326528 Jul 12 15:03 /tmp/redis.tar
vagrant@ubuntu-xenial:~$ ls -lha /tmp/redis.tar
-rw------- 1 vagrant vagrant 94M Jul 12 15:03 /tmp/redis.tar
vagrant@ubuntu-xenial:~$
docker load
- Загрузить образ из архива
vagrant@ubuntu-xenial:~$ docker load -i /tmp/redis.tar
Loaded image: redis:latest
vagrant@ubuntu-xenial:~$
docker rmi
- Удаление образа из системы
Ключи
- -f, --force = Удалить без подтверждения
$ docker rmi -f redis:latest Untagged: redis:latest Untagged: redis@sha256:87ba16f132f3afc613f9685c0edfb5cceadd897d96def1b3e8578f6c74b53ffa
$ docker rmi generik/ansible
Untagged: generik/ansible:latest
Untagged: generik/ansible@sha256:1c841ba1736b55c3357b9f4e88df4038039f532e40ee0ec4f188103043fdd7f6