- Docker — это инструмент, который позволяет вам запускать виртуальные среды, называемые контейнерами, на вашем хост-компьютере.
- Весь наш код живет внутри этого контейнера в определенной среде, и это гарантирует нам, что наш проект будет работать на клиентах или любой другой машине!
- Это экономит нам много времени и усилий при установке и подготовке среды или установке зависимостей.
Так чем же она отличается от виртуальной машины?
- Контейнеры предназначены для выполнения конкретной задачи и могут очень быстро запускаться и закрываться.
- Занимает гораздо меньше памяти и места
- Не зависят от ОС хост-машины
- Мы можем использовать готовые образы докеров из концентратора докеров или создавать собственные образы, написав файл Docker.
Изображение - это один файл, в котором есть все ваши программы, и когда он активен и работает, он называется контейнером.
Проверить установку
- Сначала установите докер с официального сайта и в своем терминале сделайте
sudo docker run hello-world # you'll see this some commands so you've got docker.
Начальная настройка
- Давайте создадим каталог с именем docker-tutorial и перейдем в него.
- Создайте в нем файл hello.py с простым сообщением для печати.
gurupratap@veer-ubuntu:~$ which docker /usr/bin/docker gurupratap@veer-ubuntu:~$ mkdir docker-practice gurupratap@veer-ubuntu:~$ cd docker-practice/ gurupratap@veer-ubuntu:~/docker-practice$ gurupratap@veer-ubuntu:~/docker-practice$ ls hello.py gurupratap@veer-ubuntu:~/docker-practice$ more hello.py print("Hello Veer. I am docker!") gurupratap@veer-ubuntu:~/docker-practice$
Простой контейнер Python 3
gurupratap@veer-ubuntu:~/docker-practice$ sudo docker run --rm -v $(pwd):/src python:3 python /src/hello.py Hello Veer. I am docker!
- docker run = команда для запуска контейнера
- — rm = уничтожить контейнер после завершения задачи
- -v = параметр тома, т.е. монтировать текущий рабочий каталог ($pwd) в каталог /src контейнера
- python:3 = это образ, из которого мы хотим создать контейнер. Если у нас его еще нет, докер автоматически загрузит его.
- python /src/hello.py = Мы просто просим docker запустить файл hello.py после запуска контейнера
В следующий раз, когда вы запустите этот докер, уже будет сохранен образ Python 3, поэтому он будет работать быстро.
Запустите интерпретатор Python 3 в контейнере
# run interpreter sudo docker run \ --rm \ -it \ # this is the interactive option -v $(pwd):/src \ python:3 \ python
Запустите оболочку Bash в контейнере
# open a shell in the container sudo docker run \ --rm \ -it \ # make it interactive -v $(pwd):/src \ # mounting a volume python:3 \ # name of the docker image /bin/bash # only this command is different # Here we are running bash shell from our python 3 image
Написание файла Docker для создания пользовательского образа
- Вместо написания длинных команд мы можем написать простой Dockerfile со всеми деталями в нем.
- Docker автоматически создаст новый контейнер, используя файл Dockerfile.
- Мы можем расширить наш текущий образ Python 3 и сделать из него новый контейнер. Давай сделаем это
# make a file called Dockerfile in your current # directory and put the following content FROM python:3 RUN pip3 install django
Теперь в вашем терминале запустите
gurupratap@veer-ubuntu:~/docker-practice$ sudo docker build -t python_django . # we call our new container python_django # the '.' means read Dockerfile from current directory Sending build context to Docker daemon 3.072kB Step 1/2 : FROM python:3 ---> 5850a68e164d Step 2/2 : RUN pip3 install django ---> Running in 780182470fb8 Collecting django ...
Итак, теперь мы расширили наш текущий контейнер python3, получив новый контейнер, который представляет собой python 3 и django!
Контейнер Nginx с использованием докера
Создайте файл в текущем каталоге с именем index.html с простым сообщением
gurupratap@veer-ubuntu:~/docker-practice$ more index.html <h1>Hello Veer. I am docker</h1>
Теперь давайте сделаем наш контейнер Nginx таким
gurupratap@veer-ubuntu:~/docker-practice$ sudo docker run --rm -v \ > $(pwd):/usr/share/nginx/html \ > -p 8080:80 nginx:latest # we map our current directory to /usr/share/nginx/html of # the nginx container # -p means port # we say to map port 8080 of host to port 80 of container # nginx:latest is the image and latest is the tag
Запустить контейнер в фоновом режиме
# start container in background docker run \ --rm \ -d \ # this makes the process run as a daemon -v $(pwd):/usr/share/nginx/html \ -p 8080:80 \ nginx:latest
Посмотреть запущенные контейнеры
# see running containers sudo docker ps sudo docker container ls ## List Docker images sudo docker image ls
Откройте Shell в работающем контейнере
# open a shell in a running container docker exec -it [id here] /bin/bash
Очки для размышления
- На нашем хост-компьютере мы не устанавливаем какое-либо программное обеспечение.
- Мы просто запускаем контейнеры и настраиваем их в соответствии с нашими требованиями
- Мы также можем разместить их в Интернете, чтобы все члены нашей команды использовали один и тот же контейнер.
Вот оно. Надеюсь, вы хорошо познакомились с Docker.