如何打包Docker镜像并推送到远程仓库

这个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.

完.

你可能感兴趣的:(如何打包Docker镜像并推送到远程仓库)