Создать одно docker изображение из нескольких контейнеров - PullRequest
0 голосов
/ 02 марта 2020

Я очень плохо знаком с миром контейнеров и docker, но чувствую, что это технология, которую я должен использовать из-за определенных c ограничений инфраструктуры для проекта, над которым я работаю.

I ' я пытаюсь создать приложение на моем компьютере Windows 10, а затем перенести его на другой компьютер Windows 10, который живет в другой сети, у которого нет доступа к inte rnet и нет связи (я могу только нажать / вытащить из моя основная сеть). Приложение является приложением Flask, работающим на сервере uWsgi / nginx.

Я следовал некоторым учебникам по docker и docker compose и придумал следующую структуру приложения:

Application
    - flask
        - app
        - env
        - Dockerfile
        - app.config
        - run.py
    - nginx
        - Dockerfile
        - nginx.conf
    - docker-compose.yml

Содержимое docker составного файла:

version: "3.7"

services:

  nginx:
    build: ./nginx
    image: nginx
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"

  flask:
    build: ./flask
    container_name: flask
    restart: always
    image: trac
    environment:
      - APP_NAME=Trac
    expose:
      - 8080
    depends_on:
      - nginx

Содержимое flask Dockerfile:

# Use python 3.7 container image
FROM python:3.7.2-stretch

# Set the working directory of the app
WORKDIR  /app

# Copy the directory contents into the container at /app
ADD . /app

# Install the dependencies
RUN pip install -r requirements.txt

# run the command to start uWSGI 
CMD ["uwsgi", "app.ini"]

Содержимое app.ini

[uwsgi]
wsgi-file = run.py
callable = app
socket = :8080
processes = 4
threads = 2
master = true
chmod-socket = 660
vacuum = true
die-on-term = true

Содержимое файла nginx Docker: FROM nginx

RUN rm /etc/nginx/conf.d/default.conf


COPY crt.crt /etc/nginx/
COPY key.key /etc/nginx/

COPY nginx.conf /etc/nginx/conf.d

Содержимое nginx .conf

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen 443 ssl http2 default_server;
    ssl_certificate crt.crt;
    ssl_certificate_key key.key;
    location / {
        include uwsgi_params;
        uwsgi_pass flask:8080;
    }
}

При использовании docker -compose build Я получаю несколько изображений, которые, как я думал, не будут желаемым результатом? Я думаю, я думал, что это будет одно изображение, которое затем можно было бы переместить и запустить в другом месте.

Проблема, однако, заключается в том, как двигаться по изображениям и запускать их на компьютере без целых rnet access.

Я могу создать приложение локально, и все работает без сбоев.

Любая помощь в этом была бы полезна. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Не то, чтобы я рекомендовал это, но вы можете создать один docker образ со всеми службами, работающими внутри контейнера, например, дистрибутив GitLab docker делает то же самое (он запускает все службы - nginx, приложение, postgres, ... - в одном изображении). Вам просто нужно настроить все службы самостоятельно в одном контейнере, что может быть утомительно, но выполнимо.

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

1 голос
/ 02 марта 2020

По первому вопросу ваше предположение неверно. Не существует «одного изображения», охватывающего все сервисы в композиции. Каждый сервис будет иметь свой собственный образ.

Для распространения без целого rnet вопроса ... Вы можете использовать локальный реестр, в который вы предварительно загрузили все базовые зависимости (python, nginx контейнеров ...) которые у вас есть.

...