前言
最近想要将博客(基于Django)迁移到容器内,同时也想通过 Jupyter-Notebook 创建一个 Python 和 JavaScript 的在线 IDE ,此处进行一些记录。
步骤概览
- 编写 Dockerfile
- 生成镜像
- 通过镜像运行容器
常用 Dockerfile 指令
FROM 指定基础镜像
MAINTAINER 作者&维护者信息
RUN 运行各种指令
ADD 添加文件(copy 自动解压)
WORKDIR 目录切换
VOLUME 挂载宿主机目录
EXPOSE 容器开放端口
CMD 容器建立时运行指令
Blog(Django)
FROM centos:latest # docker 基础镜像
RUN yum install -y python3 #安装 Python3
WORKDIR /root/ #切换工作目录
ADD ./markdown_blog.tar.gz /root/ #将 blog 项目压缩文件拷贝到工作目录,自动解压
WORKDIR /root/markdown_blog/ #切换到 blog 项目目录
RUN bash -c "ls " #构建镜像文件时列出镜像中的文件,可去除
RUN pip3 install -r requirements.txt #安装 blog 项目内的项目依赖文件
RUN chmod 777 run.sh #设置项目内运行文件权限
CMD ["/bin/sh","run.sh"] #设置由镜像生成容器时的运行命令
在线IDE(Jupyter-Notebook)包含 Python3 与 JavaScript 运行环境
在线运行环境为 Jupyter-Notebook ,JavaScript 需安装 [ijavascript](https://github.com/n-riesco/ijavascript JavaScript kernel for Jupyter notebook)
FROM centos:latest
RUN yum install -y python3 \ #安装 Python
&& yum install -y nodejs \ #安装 Node.js
&& yum install -y npm \ #安装 npm 包管理
&& pip3 install jupyter \ #安装 jupyter
&& npm install -g --unsafe-perm ijavascript \ #设置安装
&& ijsinstall --install=global\ #设置安装参数
&& npm install -g ijavascript #安装 JavaScript kernel for Jupyter notebook
RUN bash -c "mkdir /root/.jupyter" #创建 jupyter 文件夹
WORKDIR /root/.jupyter
ADD ./jupyter_notebook_config.py /root/.jupyter #将 jupyter 配置文件添加到镜像中
ADD ./run.sh /root/.jupyter
RUN chmod 777 run.sh
CMD ["/bin/sh","run.sh"]
构建镜像
分别将上面两段代码写入一个文本文件中,去掉后缀改名为 Dockerfile ,单独放在一个文件夹中,命令行切换到这个目录中,运行:
docker build -t blog:v1 . #(最后有个点,即当前目录)
# -t 指定 tag ,即指定镜像名称
构建镜像是一层一层(layer)构建的,层数和镜像大小是成正比的,上面构建在线 IDE 的 Dockerfile 文件第一条 RUN 指令后面跟随了多个 \ 和 && 这是为了减少层数,类似的指令(这里的都是安装文件)可以写成一条。