docker系列之二:构建docker容器

1.建立在FlaskApp/app中建立Flask项目:

2.生成web项目所需的运行环境:pip3 freeze > ../requirements.txt 3.编辑Dockerfile:
# 依赖的的操做系统
FROM ubuntu:16.04
# image的做者和做者邮箱
MAINTAINER oldeleven "gsfmcntt1022@163.com"
# 安装项目的执行环境
RUN apt-get update -y && \
    apt-get install -y python3-pip python3-dev
# COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。
#<目标路径> 能够是容器内的绝对路径,也能够是相对于工做目录的相对路径(工做目录能够用 WORKDIR 指令来指定)。目标路径不须要事先建立,若是目录不存在会在复制文件前先行建立缺失目录。
# ./requirements.txt:此文件指的是docker引擎中展开的构建上下文中的文件,并非本地文件的目录文件
COPY ./requirements.txt /requirements.txt
# Docker引擎的工做目录
WORKDIR /
# 安装项目依赖项
RUN pip3 install -r requirements.txt
# 复制全部的文件到工做目录下
COPY . /
# 入口点
ENTRYPOINT [ "python3" ]
# 要执行的项目入口
CMD [ "app/app.py" ]
 
 

 

4.生成image镜像文件:docker build -t docker-flask:0.1 .  # 意思是将Dockerfile所在的目录中的全部内容打包上传给docker引擎
# -t :image的那么和tag
那么当咱们使用 docker build 命令来构建镜像时,这个构建过程实际上是在 Docker引擎 中完成的,而不是在本机环境。
那么若是在 Dockerfile 中使用了一些 COPY 等指令来操做文件,如何让 Docker引擎 获取到这些文件呢?
这里就有了一个镜像构建上下文的概念,当构建的时候,由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下全部的文件都打包上传给 Docker 引擎,引擎内将这些内容展开后,就能获取到全部指定上下文中的文件了(参考下方docker架构图)。

好比说 dockerfile 中的 COPY ./package.json /project,其实拷贝的并非本机目录下的 package.json 文件,而是 docker引擎中展开的构建上下文中的文件,因此若是拷贝的文件超出了构建上下文的范围,Docker引擎是找不到那些文件的。

5.运行咱们生成的image镜像文件
docker run -d --name flask_app -p 5000:5000  docker-flask:0.1
或者 docker run -d --name flask_app -v $PWD/app:/app -p 8000:5000 docker-flask:0.1
#  docker run 守护模式 --name 设置container的名字 -p 本机接口:容器接口 imageID或者imageName:tag
# 注意:-p 5000:5000:注意这个5000是flask中配置的port
#  $PWD/app:表示实体机中app.py所在的位置:$PWD:是作镜像的绝对工做路径::/app:表示镜像中app.py的位置,dockerfile中咱们的WORKDIR= /,因此镜像中的app.py的位置就是/app/

6、标记咱们本身制做的image
docker tag docker-flask  gsfmcntt1022/docker-flask:v1.0
#
gsfmcntt1022 是用户名须要替换成你本身的docker用户名,这个用户名也是你的docker仓库名,
# 你在pull和push的时候docker引擎会经过你的用户名将你制做的docker容器上传到你本身的容器仓库之中
7、上传到咱们本身的docker仓库中 docker login # 登陆docker 
docker push gsfmcntt1022/docker-flask:v1.0 # dockerhub跟github不太同样,不用git init初始化仓库,他能够直接经过你的用户名来寻找你的docker仓库位置,登陆以后直接push就能够了
8、在咱们web服务器中pull login docker docker pull gsfmcntt1022/docker-flask:v1.0 # 若是版本为latest能够省略

☆  至此咱们已经能够制做本身的docker容器,而且上传到本身的容器仓库中(https://hub.docker.com/),那么django,爬虫或者其余项目大体流程也是如此,你们能够模拟制做python

☆ >>>>下一篇docker应用篇>>>>git

相关文章
相关标签/搜索