Запись CSV-файлов на локальный хост из контейнера Docker - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь настроить очень простой проект обработки данных, в котором я использую docker для создания среды ubuntu на EC2, установки python, ввода csv, выполнения некоторых простых операций с данными, а затем вывода данных на новый csvв папке, где был вход.Мне удалось успешно запустить мой код Python локально, а также на ec2, но когда я запускаю его с помощью контейнера Docker, данные, кажется, обрабатываются (мой сценарий печатает данные), но результаты не сохраняются вконец пробега.В моем файле docker отсутствует команда, из-за которой результаты не сохраняются?Кроме того, есть ли способ сохранить вывод непосредственно в корзину S3?

РЕДАКТИРОВАТЬ: Путь к входным файлам "/ home / ec2-user / docker_test / data"и путь к коду" / home / ec2-user / docker_test / code ".После обработки данных я хочу, чтобы результат был записан в виде нового файла в каталоге "/ home / ec2-user / docker_test / data" на хосте.

Dockerfile:

FROM ubuntu:latest

RUN apt-get update \
    && apt-get install -y --no-install-recommends software-properties-common \
    && add-apt-repository -y ppa:deadsnakes/ppa \
    && apt-get update \
    && apt-get install -q -y --no-install-recommends python3.6 python3.6-dev python3-pip python3-setuptools \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

VOLUME /home/ec2-user/docker_test/data
VOLUME /home/ec2-user/docker_test/code

WORKDIR /home/ec2-user/docker_test/

COPY requirements.txt ./

RUN cat requirements.txt | xargs -n 1 -L 1 python3.6 -m pip install --no-cache-dir

COPY . .

ENV LC_ALL C.UTF-8
ENV LANG=C.UTF-8

CMD python3.6 main.py

Сценарий Python:

import pandas as pd
import os
from code import processing

path = os.getcwd()

def main():
    df = pd.read_csv(path + '/data/table.csv')
    print('input df: \n{}'.format(df))
    df_out = processing.processing(df)
    df_out.to_csv(path + '/data/updated_table.csv', index = False)
    print('\noutput df: \n{}'.format(df_out))


if __name__ == '__main__':
    main()

РЕДАКТИРОВАТЬ: Я запустил файл Docker с "Docker Run Docker_test"

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Хорошо, понятно, что с учетом ожиданий вывода CSV на хост , у нас есть проблема с тем, как это настроить.

В вашем Dockerfile объявлено два ОБЪЕМА, что нормально.Это именованных томов , которые отлично подходят для сохранения данных между контейнерами, идущими вверх и вниз на одном хосте, но вы не можете просто войти, как будто это обычная файловая система с вашего хоста.

Если вы хотите, чтобы файл отображался на вашем хосте, вы можете создать привязанный подключенный том во время выполнения, который отображает путь в файловой системе вашего хоста на путь в файловой системе контейнера Docker.

docker run -v $(pwd):/home/ec2-user/docker_test/data docker_test сделает это.$(pwd) - это выражение, которое оценивает ваш текущий рабочий каталог, если вы работаете в системе * nix, где вы запускаете команду.Позаботьтесь об этом и настройте по мере необходимости (например, если вы используете Windows в качестве хоста).

С таким образом настроенным томом, когда CSV создается в файловой системе контейнера в месте, которое вы намереваетесь, он будет доступен на вашем хосте в том месте, где вы его отобразили.

Читайте о томах .Они жизненно важны для использования Docker, их не сложно понять на первый взгляд, но есть некоторые хитрости в деталях.


Что касается загрузки на S3, я бы рекомендовал использовать библиотеку boto3 и делатьэто в вашем скрипте Python.Вы также можете использовать что-то вроде s3cmd, если вам это проще.

0 голосов
/ 22 октября 2018

Вы можете использовать S3FS Fuse, чтобы смонтировать ведро S3 как накопитель в вашем док-контейнере.Это в основном создает папку в вашей файловой системе, которая на самом деле является корзиной S3.Все, что вы сохраняете / изменяете в этой папке, будет отражено в корзине S3.

Если вы удалите контейнер докера или размонтируете диск, у вас все еще будет нетронутым ведро S3, поэтому вам не нужно слишком беспокоиться об удалении файлов в корзине S3 при обычном использовании докера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...