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/,则表示成功。

image

在我手上一直以来,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开放聊天中咨询。

 

推特

 

广告
将在 10 秒后关闭
bannerAds