使用 Dockerfile 定义容器

2018-11-30  本文已影响6人  tingshuo123

准备

新建一个空目录 docker-test

sudo mkdir docker-test

文件夹下有三个文件

$ ls
app.py  Dockerfile  requirements.txt

文件内容分别为

$ cat Dockerfile 
# 将官方 Python 运行时用作父镜像
FROM python:2.7-slim

# 将工作目录设置为 /app
WORKDIR /app

# 将当前目录内容复制到位于 /app 中的容器中
ADD . /app

# 安装 requirements.txt 中指定的任何所需软件包
RUN pip install -r requirements.txt

# 使端口 80 可供此容器外的环境使用
EXPOSE 80

# 定义环境变量
ENV NAME World

# 在容器启动时运行 app.py
CMD ["python", "app.py"]
$ cat requirements.txt 
Flask
Redis
$ cat Dockerfile 
# 将官方 Python 运行时用作父镜像
FROM python:2.7-slim

# 将工作目录设置为 /app
WORKDIR /app

# 将当前目录内容复制到位于 /app 中的容器中
ADD . /app

# 安装 requirements.txt 中指定的任何所需软件包
RUN pip install -r requirements.txt

# 使端口 80 可供此容器外的环境使用
EXPOSE 80

# 定义环境变量
ENV NAME World

# 在容器启动时运行 app.py
CMD ["python", "app.py"]
ubuntu@VM-0-10-ubuntu:~/test-python$ cat 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__":

构建应用

运行构建命令,创建由我们自己定制 Docker 镜像

docker build -t friendlyhello .

构建成功标识

Successfully built 730effa82331
Successfully tagged friendlyhello:latest

查看镜像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
friendlyhello       latest              730effa82331        29 minutes ago      131MB
<none>              <none>              be8ab6ceffdf        32 minutes ago      120MB
python              2.7-slim            0dc3d8d47241        13 days ago         120MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

运行应用

运行应用,使用 -p 参数将机器的 4000 端口映射到 Docker 容器的 80 端口:

$ docker run -p 4000:80 friendlyhello

启动成功标识

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

可以另起一个终端,使用 curl 访问通过 Docker 启动的应用

$ curl localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> c4fb61eb00ef<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

成功后可以使用 CTRL + C 退出 Python 应用

上一篇下一篇

猜你喜欢

热点阅读