Docker. Часть 2: контейнеры
Введение В первой части статьи вы познакомились с Docker и установили его. Пришло время поближе познакомится с контейнерами.
Загрузка образов и запуск контейнеров Для запуска контейнера с приложением, вам понадобится образ этого приложения. Разберем пример с образом NGINX из официального репозитория. Чтобы загрузить образ из репозитория на сервер – выполните следующую команду:
$ sudo docker pull nginx
Так же можно указать точную версию образа. Например, для загрузки nginx
версии 1.12.1
. Выполните команду:
$ sudo docker pull nginx:1.12.1
Запустите контейнер командой:
$ sudo docker run -d --name server_app -p 4000:80 nginx
Рассмотрим подробнее данную команду.
docker run nginx
– запускает контейнер на основе образа nginx.
Параметры:
--name
– задает имя контейнера-p
– сопоставляет порт сервера с портом контейнера. В данном примере, NGINX, запущенный в контейнере на порту 80, будет доступен при обращении к хосту на 4000 порт.-d
– говорит о том, что контейнер будет запущен в отдельном (фоновом) режиме.
$ sudo docker container ps
Откройте браузер с адресом http://localhost:4000
или используйте curl
. Вы должны увидеть сообщение "Welcome to nginx!..".
Создание приложения Для примера создадим веб-приложение на Python, которое будет работать внутри контейнера. Если раньше для запуска приложения вам нужно было устанавливать Python и все зависимости локально, то сейчас всё будет работать внутри контейнера.
Создайте каталог с 2 файлами requirements.txt
и app.py
.
requirements.txt
Flask app.py
from flask import Flask app = Flask(__name__)
@app.route("/") def hello(): return "Hello World!"
if __name__ == "__main__":
app.run(host=’ 0.0.0.0’ , port=80)
Обратите внимание, что приложение должно быть запущено на хосте 0.0.0.0
, чтобы оно было доступно за пределами контейнера.
Теперь создайте в этом же каталоге файл Dockerfile
, который будет описывать создаваемый нами образ.
Dockerfile
# Взять за основу нашего образа официальный образ Python 3.6.2 FROM python:3.6.2
# Определить рабочую директорию WORKDIR /usr/app
# Скопировать все содержимое текущей директории в директорию /usr/app # внутри контейнера ADD . /usr/app
# Запустить установку зависимостей для приложения RUN pip install -r requirements.txt
# Сделать порт 80 доступным за пределами контейнера EXPOSE 80
# Запустить приложение после запуска контейнера
CMD ["python", "app.py"]
Создание образа
Создайте образ с именем flaskapp
следующей командой:
$ sudo docker build -t flaskapp .
Теперь ваш образ собран и находится в локальном репозитории. Выполните следующую команду, чтобы увидеть список образов:
$ sudo docker image ls
Теперь запустите контейнер с приложением:
$ sudo docker run -d --name flaskapp -p 4000:80 flaskapp
Откройте URL http://localhost:4000
в браузере или используйте curl
, чтобы убедиться, что приложение работает.
Для остановки контейнера выполните:
$ sudo docker stop flaskapp
Чтобы снова запустить остановленный контейнер – выполните команду:
$ sudo docker start flaskapp
А для того, чтобы удалить контейнер:
$ sudo docker rm flaskapp
Заключение Теперь у вас есть основные понятия о том, как работать с контейнерами и создавать свои образы.