======Запуск контейнера======
Как работать с образами Docker
Запуск контейнеров выполняется из образов. Изначально Docker берет образы в хабах Docker Hub (реестр образов, поддерживаемый разработчиком). Любой имеет возможность создавать и загружать собственные образы. Так что для большей части дистрибутивов и программ уже имеются необходимые образы в Docker Hub.
Приведенная ниже команда позволяет проверить, есть ли возможность получить доступ и скачивать образы в Docker Hub (на примере образа hello-world):
docker run hello-world
{{:docker:docker-zapusk-konteynera3-1.png?1200|}}\\
Этот вывод данных указывает, что Docker работает правильно:
Как запустить Docker контейнер на Linux
Сначала сервис не мог найти образ hello-world на локальной машине, из-за чего ему приходилось загрузить образ в хабе (репозитории по умолчанию). После его скачивания Docker создал отдельный контейнер из образа и уже затем запускал в нем программу контейнере.
Представленные в хабе образы можно найти при помощи команд docker и search. К примеру, найти образ Ubuntu можно следующим образом:
docker search ubuntu
{{:docker:docker-zapusk-konteynera4-1.png?1200|}}\\
Далее скрипт просмотрит содержимое хаба и покажет все образы, соответствующие заданным критериям. В предложенном примере результат будет примерно таков:
Как запустить Docker контейнер на Linux
Строчка OK в столбце OFFICIAL говорит о том, что образ создан и его поддержка осуществляется компанией, ответственной за этот проект. Выбрав требуемый образ, его можно скачать на компьютер, используя подкоманду pull.
Загрузка официального образа Ubuntu на компьютер выполняется такой командой:
docker pull ubuntu
{{:docker:docker-zapusk-konteynera5.png?1200|}}\\
По завершении операции отобразится такой результат:
Как запустить Docker контейнер на Linux
Когда образ будет скачан, станет возможным выполнить запуск контейнера из образа при помощи команды run. На примере hello-world видно, что если после ввода run образ не был скачан, сначала клиент загрузит его и уже запустит контейнер с образом.
Чтобы посмотреть, какие образы были загружены на компьютер, используется команда:
docker images
{{:docker:docker-zapusk-konteynera6.png?1200|}}\\
Результат будет похожим на следующий:
Как запустить Docker контейнер на Linux
Ниже можно увидеть, что образы для запуска контейнеров можно менять и использовать при создании других образов. Причем последние можно загрузить в Docker Hub или другие репозитории. Далее будет рассмотрено более подробно, как работать с контейнерами.
====Простой запуск контейнера====
$ docker run ubuntu echo "hello world"
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
124c757242f8: Pull complete
2ebc019eb4e2: Pull complete
dac0825f7ffb: Pull complete
82b0bb65d1bf: Pull complete
ef3b655c7f88: Pull complete
Digest: sha256:72f832c6184b55569be1cd9043e4a80055d55873417ea792d989441f207dd2c7
Status: Downloaded newer image for ubuntu:latest
hello world
----
====Запуск контейнера с терминалом shell====
$ docker run --rm -i -t ubuntu /bin/bash
root@85d7a5987b12:/# echo "hello world"
hello world
root@85d7a5987b12:/# exit
exit
==Опции:==
* -i -t -необходимо создать сеанс интерактивной работы с терминалом ttu
* --rm - автоматически удаляет контаинер после завершения сеанса
* -e, --env - определяет переменные среды в контейнере **( docker run --i -t -e var="test" ubuntu /bin/bash )**
* /bin/bash -инициализация коммандной оболочки bash
----
====Запуск контейнера со своим хостом====
C:\Users\werwolf>docker run -h debian -i -t debian /bin/bash
root@debian:/# echo "Hello"
Hello
root@debian:/# exit
exit
----
====Запуск контейнера cо свои названием контейнера====
anchikin@outlook.com@Asus MINGW64 /c/Program Files/Docker Toolbox
$ docker run -i -t --name cowsay --hostname ubuntu ubuntu /bin/bash
root@ubuntu:/# exit
exit
anchikin@outlook.com@Asus MINGW64 /c/Program Files/Docker Toolbox
$ docker commit cowsay test/cowsayimage
sha256:9bf230e2bf47f099b0673d44555061821ed587127d2d8ac7d72db5f1acdd22da
anchikin@outlook.com@Asus MINGW64 /c/Program Files/Docker Toolbox
$ docker start cowsay
cowsay
anchikin@outlook.com@Asus MINGW64 /c/Program Files/Docker Toolbox
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
180e5fda51e5 ubuntu "/bin/bash" 4 minutes ago Up 7 seconds cowsay
----
====Запуск контейнера с программой====
anchikin@outlook.com@Asus MINGW64 /c/Program Files/Docker Toolbox
$ docker run -it --name box ubuntu bash
root@48ae525b7d3c:/# apt update
root@48ae525b7d3c:/# apt install cowsay
root@48ae525b7d3c:/# exit
exit
anchikin@outlook.com@Asus MINGW64 /c/Program Files/Docker Toolbox
$ docker commit box test/box
sha256:dd6608aee19642174ede41ea38ef720c02700932a8f9fdb6b9e165a6a4f0bf35
anchikin@outlook.com@Asus MINGW64 /c/Program Files/Docker Toolbox
$ docker run -i test/box /usr/games/cowsay "as"
______
< as >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
----
====Docker commit (сохранить контейнер)====
root@cmd:/usr/games> ls
cowsay cowthink
root@cmd:/usr/games> ./cowsay "Mu"
____
< Mu >
----
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
root@cmd:/usr/games> exit
exit
C:\Users\werwolf>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
687cf18c946d debian "/bin/bash" 5 minutes ago Exited (0) 6 seconds ago container
C:\Users\werwolf>docker commit container test/cowsayimage
sha256:b1bf9b6201ac79ebea3caff826a28c3e524167e75eff14b986f63c665c991963
----
====Запуск в фоновом режиме====
D:\docker>docker run --name myredis -d redis #Запуск в фоновом режиме
67954e9e35e9423aca4cb90c72b9d2b33fc1d2ba98746e99f1ac4c811c8ae381
----
====соединение между двумя контейнерами====
D:\docker>docker run --name myredis -d redis #Запуск в фоновом режиме
67954e9e35e9423aca4cb90c72b9d2b33fc1d2ba98746e99f1ac4c811c8ae381
D:\docker>docker run --rm -it --link myredis:redis redis /bin/bash #Соединение между двумя контейнерами (myredis и redis)
* --link myredis:redis - Установка соединения определяется этим аргументом
* myredis - имя контейнера
* redis - псевдоним внутри управляющего контейнера
root@e907552c645f: redis-cli -h redis -p 6379 #Запустить программу в докере
redis:6379> ping
PONG
redis:6379> set "a" 1
OK
redis:6379> get "a"
"1"
----
====Создать общий каталог внутри контейнера====
//создать контейнер с каталогом
D:\>docker run -it -v /data-test --name test ubuntu /bin/bash
root@6dd6523d4aad:/# exit
//Узнать путь к катталогу
C:\Users\werwolf>docker inspect -f {{.Mounts}} test
==тоже самое, только в DockerFile==
FROM debian:wheezy
VOLUME /data-test
==свой путь('d:/docker') с помощью powershell==
#PS D:\docker> docker run -it -v d:/docker:/data-test --name test ubuntu /bin/bash - можно так
PS D:\docker> docker run -it -v ${PWD}:/data-test --name test ubuntu /bin/bash #или так
root@37a090dc3a12:/# ls
bin boot data-test dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@37a090dc3a12:/# cd data-test
root@37a090dc3a12:/data-test# ls
DockerFile DockerFile.debug
root@37a090dc3a12:/data-test#
==Совместное использование данных с указанием ключа==
root@new:/# ls
bin boot data-test dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@new:/# cd data-test/
root@new:/data-test# ls
DockerFile DockerFile.debug
----
====Запустить nginx====
D:\>docker run -d --name nginx -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
6ae821421a7d: Already exists
da4474e5966c: Pull complete
eb2aec2b9c9f: Pull complete
Digest: sha256:dd2d0ac3fff2f007d99e033b64854be0941e19a2ad51f174d9240dda20d9f534
Status: Downloaded newer image for nginx:latest
62a11e90d07352d76328f0d7455c529b2282a6a21ca64d18fca30599f3fbfee6