• Docker — это инструмент, который позволяет вам запускать виртуальные среды, называемые контейнерами, на вашем хост-компьютере.
  • Весь наш код живет внутри этого контейнера в определенной среде, и это гарантирует нам, что наш проект будет работать на клиентах или любой другой машине!
  • Это экономит нам много времени и усилий при установке и подготовке среды или установке зависимостей.

Так чем же она отличается от виртуальной машины?

  1. Контейнеры предназначены для выполнения конкретной задачи и могут очень быстро запускаться и закрываться.
  2. Занимает гораздо меньше памяти и места
  3. Не зависят от ОС хост-машины
  4. Мы можем использовать готовые образы докеров из концентратора докеров или создавать собственные образы, написав файл Docker.

Изображение - это один файл, в котором есть все ваши программы, и когда он активен и работает, он называется контейнером.

Проверить установку

  1. Сначала установите докер с официального сайта и в своем терминале сделайте
sudo docker run hello-world
# you'll see this some commands so you've got docker.

Начальная настройка

  1. Давайте создадим каталог с именем docker-tutorial и перейдем в него.
  2. Создайте в нем файл 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.