Как правильно использовать Docker для веб разработки?

Добрый день.
До недавнего времени использовал Vagrant. Но решил попробовать поработать с Docker.
Посмотрел несколько часов докладов и прочитал несколько статей. Но четкого понимания как правильно организовать нужное мне окружение не получил. Есть ресурсы на английском, но к сожалению не владею.
В работе использую:
1. debian, nginx, php-fpm, mariadb, drupal.
2. debian, nginx, nodejs.

Все задачи должны быть по разным контейнерам или в одном контейнере [debian, nginx, php-fpm], а [mariadb] в другом?
Если все задачи по разным контейнерам, то как их все собрать воедино? И что брать за базовый образ ос или scratch(пустой образ)?

Спасибо за ответы.
  • Вопрос задан
  • 18125 просмотров
Решения вопроса 1
zvd
@zvd
Software developer interesting in DevOps
Добрый день.
Все, как вы их назвали, «задачи» должны быть по разным контейнерам.

1. Что брать за базовый образ?
Что используете то и берите. Используете в работе Debian? Берите Debian ( https://registry.hub.docker.com/_/debian/ )
2. Чтобы создать свой базовый образ который будете в дальнейшем использовать для приложения, вот вам пример Dockerfile:
#
# MyBaseimage Dockerfile
#

# Pull base image.
FROM ubuntu:14.04

MAINTAINER Your Name <your.email@gmail.maybe>

RUN apt-get update
RUN apt-get upgrade -y

RUN apt-get install -y language-pack-en
ENV LANGUAGE en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

RUN locale-gen en_US.UTF-8
RUN dpkg-reconfigure locales

RUN echo "Etc/UTC" > /etc/timezone
RUN dpkg-reconfigure -f noninteractive tzdata

RUN apt-get install -y build-essential
RUN apt-get install -y python python-dev python-setuptools python-pip python-virtualenv
RUN apt-get install -y libxml2-dev wget
RUN apt-get install -y libpcre3
RUN apt-get install -y libpcre3-dev
RUN apt-get install -y libssl-dev
RUN apt-get install -y libncurses5-dev
RUN apt-get install -y git git-core
RUN apt-get install -y libpq-dev

# install nginx
RUN apt-get install -y software-properties-common python-software-properties
RUN apt-get update

Собрать image в директории где у вас лежит Dockerfile
docker build -t your_docker_account/your_baseimage .

3. Dockerfile для сборки вашего образа уже с приложением
#
# MyApp Dockerfile
#

# Pull base image.
FROM your_docker_account/your_baseimage

MAINTAINER Your Name <your.email@gmail.maybe>

# Set instructions on build.
RUN virtualenv /env
ADD ./ /code

RUN cd /code; /env/bin/python setup.py install
RUN cp /code/config/config.yml.docker_example /etc/code/config.yml

# Expose ports.
EXPOSE 8484
WORKDIR /code
CMD ["/env/bin/python", "app.py"]

4. Собрать образ с приложением
docker build -t your_docker_account/your_app_container .

5. Запустить контейнер с БД, в качестве примера PostgreSQL
docker run -p :5432:5432 --name my_postgresdb_container -e POSTGRESQL_DB=mydb_name -e POSTGRESQL_USER=mydb_user -e POSTGRESQL_PASS=super_secret_password -d kamui/postgresql

для mariadb аналонично, контейнеры ищем здесь: https://registry.hub.docker.com/
6. Запустить контейнер с вашим приложением, пример:
docker run -d -p :5000:5000 \
  --name my_app_container \
  --link my_postgresdb_container:postgresdb \
  -e DOCKERDB_ENV_POSTGRESQL_DB=mydb_name \
  -e DOCKERDB_ENV_POSTGRESQL_USER=mydb_user \
  -e DOCKERDB_ENV_POSTGRESQL_PASS=super_secret_password \
  your_docker_account/your_app_container

7. Подключиться к запущенному контейнеру с приложением
docker exec -it your_app_container /bin/bash
8. Читать stdout запущенного приложения в контейнере
docker logs -f your_app_container

+ Чтобы автоматизировать запуск всех необходимых контейнеров берите Docker Compose ( https://docs.docker.com/compose/ )
Пример файла конфигурации:
your_app:
  build: .
  links:
    - postgresdb
  ports:
    - "5000:5000"
  environment:
    DOCKERDB_ENV_POSTGRESQL_DB: mydb_name
    DOCKERDB_ENV_POSTGRESQL_USER: mydb_user
    DOCKERDB_ENV_POSTGRESQL_PASS: super_secret_password
postgresdb:
  image: kamui/postgresql
  ports:
    - "5432:5432"
  environment:
    POSTGRESQL_DB: mydb_name
    POSTGRESQL_USER: mydb_user
    POSTGRESQL_PASS: super_secret_password

И теперь вместо пунктов 5 + 6 где мы запускали контейнеры мы можем всё стартануть одной командой
docker-compose up

+ можно смонтировать код в контейнер и разрабатывать непосредственно в docker'контейнере.
Надеюсь чем-то вам помог.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы