这个demo简单演示了如何把一个flask的 Hello World 页面打包成docker镜像, 并且发到远程镜像仓库的方法.
0.新建 Docker 镜像
首先, 新建应用文件app.py, requirments.txt, 和一个docker文件.
mkdir demo && cd demo
touch Dockerfile app.py requirements.txt
复制代码
requirments.txt
flask
redis
复制代码
app.py
from flask import Flask
from redis import Redis, RedisError
import os
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 = 0
html = "Hello {name}!
" \
"Visits: {visits}"
return html.format(name=os.getenv("NAME", "world"), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
复制代码
Dockerfile
# 基于python2.7官网镜像
FROM python:2.7-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录下的文件到工作目录
COPY . /app
# 安装pip库
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# 暴露80端口
EXPOSE 80
# 定义环境变量
ENV NAME World
# 容器启动后执行命令, 运行app
CMD ["python", "app.py"]
复制代码
准备好文件就可以开始打包镜像了
docker build --tag=demo .
复制代码
查看新镜像
docker image ls -a
复制代码
运行镜像
docker run -p 8000:80 demo
复制代码
打开浏览器访问 http://localhost:8000, 就可以看到 hello world 了.
1. Docker镜像仓库
为了方便学习 Docker 我们可以安装桌面客户端的 Docker for Mac
/ Docker for Windows
.
推镜像之前我们一般会给镜像打标签, 方便维护管理
打标签命令:
docker tag image username/库名:标签
# 我们可以这样敲
docker tag demo monk/demo:v1.0
复制代码
1.1 Docker Hub
到官方的镜像仓库 Docker Hub 注册登录, 推镜像时就会在这里看到你的image了, 公开的镜像可以分享给别人使用.
推送镜像之前需要先在终端登录 dockerhub:
docker login
复制代码
推送完我们可以在docker hub上看到这个镜像.
docker push monk/demo:v1.0
复制代码
1.2 阿里云
在国内docker hub的速度比较慢, 建议还是用国内的镜像仓库, 比如阿里的, 需要在阿里管理后台容器镜像服务设置仓库.
在终端切换阿里的docker账号
docker login --username=username registry.cn-shenzhen.aliyuncs.com
复制代码
阿里管理后台说明了如何登录, 推送, 还有内网地址等操作, 跟着做就可以了, 步骤跟 DockerHub 的差不多只是换了阿里的地址.
2. 镜像加速
阿里云还有镜像加速器, 其实就是一个加速链接.
在Docker Desktop
设置 Prefrence > Daemon > Basic
在 Registy mirrors
用阿里给你分配的加速地址, 然后应用重启 Docker for Mac
/ Docker for Windows
.
完.