上一篇笔记1.Docker - 初使用 主要介绍了Docker的安装以及一个简单的运行例子,本次笔记主要通过具体的实例来介绍一些Docker镜像以及容器的基本操作

1.目标

之前的毕设owllook是用python编写的,我将它开源在github上,正借此机会,将其制作成Docker镜像,以便部署

本次笔记就以此项目为中心,目标是将该项目制作成Docker镜像,并从过程中一步步熟悉Docker

2.定制镜像

上一篇笔记中说了,镜像是由一系列指令一步一步构建出来,但是,最初的镜像我们还是需要从镜像仓库获取,比如owllook基于python3.6,那么我第一步便是从镜像仓库获取python镜像

运行命令:docker pull python:3.6

稍等片刻,就会拉取一个python3.6的镜像下来,让我们以这个镜像为基础来启动一个容器:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 具体可参考 dcker run --help 来了解详细命令
docker run -it --rm python:3.6 python

# 终端会有如下输出 此时进入了容器中的3.6环境
Python 3.6.2 (default, Jul 24 2017, 19:47:39) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

# 也可以直接进入容器
docker run -it --rm python:3.6 

有了基础镜像,下面我们有两种方案构建owllook镜像:

  • 使用docker commit 命令
  • Dockerfile(使用此方案)

Dockerfile内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 基于python3.6镜像来构建owllook镜像
FROM python:3.6
MAINTAINER howie6879 <howie6879@gmail.com>
RUN apt update -y && apt-get install -y net-tools
# 设置环境变量
ENV APP_ROOT /opt
WORKDIR ${APP_ROOT}/
COPY requirements.txt ${APP_ROOT}/
# 安装依赖
RUN pip install --no-cache-dir --trusted-host mirrors.aliyun.com -i http://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
COPY . ${APP_ROOT}
WORKDIR ${APP_ROOT}/owllook/
RUN find . -name "*.pyc" -delete
# 启动
CMD ["gunicorn","-c","config/dev_gunicorn.py","--worker-class","sanic.worker.GunicornWorker","server:app"]

构建镜像:

docker build -t owllook:0.1 .

构建成功后,可直接运行,不过针对owllook这个项目,我设置了几个环境变量,可运行如下命令运行:

1
2
3
# 运行并将docker的8001端口映射到主机的8001
# 在dev_owllook.env里面填上数据库配置 数据库ip需要注意 不得填localhost
docker run --env-file ./dev_owllook.env -d -p 8001:8001 owllook:0.1

仅仅是达到使用Docker的程度,所花费时间真的不多,所以说Docker还是很简单方便的,下一步就是上传到镜像仓库。

3.上传镜像

首先请注册Docker Hub账号,然后创建自己的仓库之后,比如这里创建好howie6879/owllook,随即在终端输入:

1
2
3
4
5
# 重新打包下 或者改下tag也没问题
docker build -t howie6879/owllook:0.1 .
# 根据提示登录
docker login
docker push howie6879/owllook:0.1

稍等即大功告成

4.最后

现在可以根据Dockerfile自己构建owllook镜像或者直接docker pull owllook镜像,确实十分方便