Ответы пользователя по тегу Docker
  • Как должен выглядеть процесс работы с Docker?

    @paldraken
    Попробую описать простыми словами без серьезной терминологии (Devops'ы не бейте ногами).

    Следующим шагом я бы рекомендовал вам начать использовать docker-compose.
    Он позволит всю инфраструктуру описать в одном конфигурационном файле, запускать все одной командой и создать алиасы для общения контейнеров между собой.

    Например у нас такая структура. Я использую php но для nodejs может быть похоже.
    project
       - scr/   #Код проета под контролем версий в git
            - Dockerfile
            - phpfile1.php
            - phpfile2.php
            - etc.php
       - db_data/ #папка где будут сохранятся база данных. (иначе каждый запуск контейнера будет ее обнулять)
       - docker-compose.yml
       - site.conf   #конфиг для виртуального хоста nginx
       - nginx.conf #конфиг nginx


    Настраивается взаимодействие в специальном файле.
    docker-compose.yml
    version: '2'
    services:
      nginx:
        image: nginx:latest
        ports:
          - "8080:80"
        volumes:
          - ../src/:/app
          - ./site.conf:/etc/nginx/conf.d/site.conf
          - ./nginx.conf:/etc/nginx/nginx.conf
        links:
          - php
      db:
        image: mysql:5.7
        volumes:
          - ./db_data:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: 123
          MYSQL_DATABASE: changeme
          MYSQL_USER: changeme
          MYSQL_PASSWORD: 123
        ports:
          - "33306:3306"
      php:
        build: ../src
        volumes:
          - ../src:/app
        depends_on:
          - db
        environment:
          PHP_DB_HOST: db:3306
          PHP_DB_USER: changeme
          PHP_DB_PASSWORD: 123


    Тут я использую контейнер nginx и mysql из DockerHub и свой контейнер для php описанный в
    src/Dockerfile
    FROM php:fpm
    
    RUN apt-get update && \
      apt-get install -y \
        openssl \
        git \
        curl \
        unzip
    
    RUN docker-php-ext-install pdo pdo_mysql
    
    ADD . /app
    WORKDIR /app


    Теперь использовав docker-compose up мы удобно запустим все контейнеры с нужной конфигурацией.
    Взаимодействие между контейнерами будет происходить по алиасам
    например из php соединение с БД происходит так:

    db.php
    return [
        'class' => 'yii\db\Connection',
        'dsn' => "mysql:host=db:3306;dbname=donor", // db:3306 - это services имя контейнера с mysql в docker-compose.yml 
        'username' => getenv('PHP_DB_USER'), // это переменные окружения для контейнера тоже из docker-compose.yml
        'password' => getenv('PHP_DB_PASSWORD'),
        'charset' => 'utf8',
    ];



    Код прокидываем в 2 контейнера php и nginx (раздел volumes). То есть внутри контейнера создается директория /app которая ссылается на директорию на хост машине. Для разработки очень удобно, вы изменяете код и сразу можно обновлять страницу.

    На продакшен я обновляю код через git из репозитория и перезапускаю контейнеры (если надо).

    ps. Это один из самых простых способов, разумеется существуют более "взрослые" и "правильные" методы. Но надеюсь мое описание позволит вам сдвинутся с мертвой точки в изучении докера.
    Ответ написан