Я застрял, пытаясь понять, как редактировать код фляги Python после извлечения из хранилища Docker Hub на другом компьютере. Я хочу создать папку на своем рабочем столе Linux, которая будет содержать все пакеты, которые образ имеет при запуске в качестве контейнера (Dockerfile, needs.txt, app.py), чтобы я мог редактировать app.py независимо от того, какой у меня компьютер или даже если мои одноклассники захотят отредактировать его, они могут просто вытащить мое изображение, запустить контейнер и иметь возможность сохранить копию кода, сохраненную на их локальном компьютере, чтобы они могли открыть его с помощью кода Visual Studio (или любой IDE) и отредактируйте его. Это то, что я пытался.
Я впервые вытащил из докера хаб:
sudo docker pull woonx/dockertester1
Затем использовал эту команду для запуска образа в качестве контейнера и создания каталога:
sudo docker run --name=test1 -v ~/testfile:/var/lib/docker -p 4000:80 woonx/dockertester1
Мне удалось создать локальный каталог с именем testfile, но когда я открывал его, это была пустая папка. Нет app.py, dockerfile, ничего.
Пример кода, который я использую для тестирования, взят из примера руководства на веб-сайте Docker: https://docs.docker.com/get-started/part2/
Dockerfile:
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
requirements.txt:
Flask
Redis
app.py:
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)