美文网首页
使用 Dockerfile 定义容器

使用 Dockerfile 定义容器

作者: tingshuo123 | 来源:发表于2018-11-30 11:56 被阅读6次

准备

新建一个空目录 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 应用

相关文章

  • Docker(二):Dockerfile 使用介绍

    我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dockerfile 是镜像和容器的关键,Do...

  • 使用 Dockerfile 定义容器

    准备 新建一个空目录 docker-test 文件夹下有三个文件 文件内容分别为 构建应用 运行构建命令,创建由我...

  • docker设置字符集utf8

    使用DockerFile DockerFile my.cnf 使用docker容器 创建image 创建容器 创建...

  • Docker部署(二):MySQL数据库

    Docker 容器构建 使用Dockerfile构建镜像 使用官方提供的Docker镜像 所谓Dockerfile...

  • Django应用的容器化部署

    部署使用容器化的方式,以容器的方式来运行。 首先,创建Dockerfile: 接着,进入Dockerfile文件目...

  • 基于基础镜像的手动部署

    基于基础镜像使用dockerfile构建容器,再使用docker-compose编排容器 cmdb- | ----...

  • docker实例

    使用dockerfile创建docker镜像配置某个dockerfile文件时,需要自己动手在容器在容器中操作一遍...

  • docker搭建静态网站

    下载安装docker 使用dockerfile创建镜像 dockerfile文件内容: 执行操作命令: 打开容器w...

  • nginx docker

    装载静态内容,也可用Dockerfile 如果通过Dockerfile来建立了自己的容器,添加了自定义的CMD命令...

  • k8s中的几个port

    1. targetPort 容器的端口 容器真正暴露的端口(使用DockerFile中的EXPOSE),targe...

网友评论

      本文标题:使用 Dockerfile 定义容器

      本文链接:https://www.haomeiwen.com/subject/fnnccqtx.html