Автор оригинала: Adriano Galello.
Не поймите меня неправильно, мне очень нравится virtualenv, и это довольно полезно в некоторых сценариях. Но иногда вам приходится иметь дело с зависимостями ОС, и это заставляет вас устанавливать новые пакеты, и в некоторых сценариях это может быть немного запутанным.
Если вы еще не слышали о Docker (контейнерах), вы можете прочитать больше об этом по адресу https://www.tutorialspoint.com/docker/index.htm
Вы можете думать о docker как о микро-виртуальной машине без всех накладных расходов Виртуальной машины .
Установите docker в вашей системе https://docs.docker.com/install/
Клонируйте репо с помощью приложения, которое я создал для этого
Разверните контейнер и получите к нему доступ с помощью следующей команды на вашем терминале
Установите наши требования к приложениям python
Запустите приложение
Попробуйте получить доступ к нашему приложению из-за пределов контейнера, открыв новый терминал
Он должен вернуть Привет 6. Вы также можете проверить, работает ли контейнер с помощью docker ps
. Эта команда выведет список всех запущенных контейнеров.
``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 989f00e4a7fc python:3.6 "bash" 50 seconds ago Up 10 seconds 0.0.0.0:8080->5000/tcp myPythonContainer ```
Отлично!, теперь вернитесь к терминалу, где у вас есть контейнер, и закройте его. Сначала ctrl+c для завершения процесса python, а затем введите
exit
для выхода из контейнераВы можете проверить, что контейнер больше не работает, введя
Вот видео для этих шагов
Часть 1
Часть 2
Давайте создадим пользовательский образ для вашего приложения.
Почему?
Создав пользовательский образ, мы можем иметь готовый контейнер со всем необходимым для запуска нашего приложения, а также задать команду для запуска при запуске нашего контейнера.
Во-первых, давайте создадим файл с именем Dockerfile в папке нашего приложения
# Our custom new image is based on a public image of python 3.6 FROM python:3.6 # create the directory /code and set it as the working directory WORKDIR /code # Copy the files to the docker folder /code COPY . /code # Install the python packages that we need RUN pip install -r requirements.txt # Define what command should be executed when this container starts ENTRYPOINT ["python", "/code/main.py"]
Теперь нам нужно построить образ:
docker build -t mydockerimage:latest .
Он выведет что-то вроде этого:
Sending build context to Docker daemon 4.096kB Step 1/5 : FROM python:3.6 ---> 1daf62e8cab5 Step 2/5 : WORKDIR /code ---> Using cache ---> 246ac5eb5a44 Step 3/5 : COPY . /code ---> Using cache ---> 8ab217175a34 Step 4/5 : RUN pip install -r requirements.txt ---> Using cache ---> ff9500f71963 Step 5/5 : ENTRYPOINT ["python", "/code/main.py"] ---> Using cache ---> 8f765333673a Successfully built 8f765333673a Successfully tagged mydockerimage:latest
Флаг -t
указывает докеру на создание образа с именем myDockerImage
, :
указывает версию для нашего образа (вы также можете использовать v1.1, v1.2,… например) и .
указывает, что файл Dockerfile
находится в текущем каталоге.
Теперь в этом изображении есть все, что нам нужно для продолжения разработки нашего приложения.
Давайте снова запустим контейнер:
Во-первых, удалите старый контейнер. Хотя мы уже существовали, и он не работает, все еще есть контейнер с именем my Python Container , и вам нужно удалить его, чтобы запустить новый с тем же именем.
эта команда перечислит все контейнеры, даже те, которые завершены:
Запустите наш новый контейнер
Обратите внимание на изменения в этой команде по сравнению с первой, которую мы использовали для запуска нашего первого контейнера:
- Вы увидите ответ с идентификатором 5d82484a63134dc911e8d2184a881950817b5d8bd07d7a64e1ee1b8207394ef9 это идентификатор вашего контейнера, и он указывает, что он был запущен.
- Не использовать -it . Мы используем -d , это означает, что мы запускаем контейнер в фоновом режиме.
- Не используя изображение python:3.6 , мы теперь используем наш новый пользовательский образ мой образ docker
- Больше не используйте явную команду. Это потому, что мы уже установили это в нашем файле Dockerfile в строке
ENTRYPOINT ["python", "/code/main.py"]
Одна вещь, которую вы можете заметить, заключается в том, что мы больше не видим, что происходит внутри контейнера. Чтобы иметь возможность видеть, что происходит внутри докера, вы всегда можете использовать
Откройте новый терминал и позвоните в нашу конечную точку
Перейдите к терминалу, где работает
docker logs-f my Python Container
, и вы увидите только что сделанный вызов.
Видео
Вот и все!, теперь вы можете использовать Docker во время разработки и сохранять свою ОС нетронутой.
Технологии Docker и других контейнеров основаны на LXC .
При запуске контейнера, как и виртуальной машины, вы можете выбрать, какую ОС вы хотите, и вы можете предварительно установить на нее программное обеспечение или использовать общедоступный образ, уже созданный другими.
Хорошая часть заключается в том, что вы можете запустить контейнер, выполнить тесты, запустить код, а затем отключить его и забыть о нем, и вам не нужно устанавливать какие-либо зависимости от вашей ОС для вашего кода.
Есть много преимуществ использования контейнеров в производственной среде, но я не собираюсь вдаваться в это в этом посте. Если вы хотите узнать об этом больше:
- Кубернетес https://kubernetes.io/ https://www.tutorialspoint.com/kubernetes/index.htm
- Докер Рой https://docs.docker.com/engine/swarm/
Фото Кредиты: Фото Кредиты: