Docker 新手 | 启动 Python 服务器并从本地访问 | 来自官方教程第二部分
创建Dockerfile
在本地任意目录中创建一个 Dockerfile。
# ベースとなるイメージの指定
# 自動的に docker hub からダウンロード出来る
FROM python:2.7-slim
# コンテナのワークディレクトリの指定
WORKDIR /app
# ローカルのカレントディレクトリの中身を全て コンテナのワークディレクトリにコピーする
# コンテナ実行時ではなく、イメージ作成時にコピーされる
ADD . /app
# python スクリプトでモジュールをインストールするための処理
RUN pip install -r requirements.txt
EXPOSE 80
# 環境変数の指定
# Docker コンテナで export NAME=World した状態になる
ENV NAME World
# コンテナ実行時に走らせるコマンドの指定
# この例では $ python app.py というコマンドが走る
CMD ["python", "app.py"]
编写脚本
在同一个目录下创建一个Python脚本。
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)
Flask
Redis
创建形象
根据Dockerfile创建一个命名的镜像。
docker build -t python-server .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python-server latest c3907742b08f 7 seconds ago 195 MB
创建容器
指定端口运行容器。
在这个例子中,我们将使得可以从本地的4000号端口访问docker上的80号端口。
docker run -p 4000:80 python-server
只需一种选项,用中文将以下内容进行释义:
从本地访问
如果能够显示 http://localhost:4000/,则表示成功。

在我手上一直以来,Redis不知道为什么没有运行起来…我会稍后进行调查。
登录到 docker 服务器
只要容器运行着,就可以直接进入Docker服务器。
确认进程ID
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7b95a8a2a22 python-server "python app.py" About a minute ago Up About a minute 0.0.0.0:4000->80/tcp examole-server
执行
使用容器ID指定执行docker exec。
这个故事讲述了一个年轻的英雄,他冒险去寻找宝藏的故事。
docker exec -it c7b95a8a2a22 /bin/bash
确认文件
可以看出文件被展开在Docker容器上。
$ ls
Dockerfile app.py requirements.txt
确认环境变量
Dockerfile中定义的环境变量被导出了。
$ echo $NAME
World
提供选项如下:
1. 请参照下面的中文原文:
2. 以下是中文原文,供您参考:
3. 请参考以下的中文翻译:
- Get Started, Part 2: Containers – Docker Documentation
招募聊天成员
如果有任何问题,烦恼或需要咨询的话,请随时在LINE开放聊天中咨询。
推特