标签:基于 == 运行 ipython === 工具 参数 实例 应用
Python 家族成员繁多,解决五花八门的业务需求。这里将通过 Python 明星项目 IPython Notebook,使其容器化,让大家掌握基础的 Docker 使用方法。
IPython Notebook 目前已经成为用 Python 做教学、计算、科研的一个重要工具。
一个应用 Docker 化的第一步就是通过 Dockerfile 产生应用镜像。
FROM python:2.7
因所有官方镜像均位于境外服务器,为了确保所有示例能正常运行,可以使用与官方镜像保持同步的 DaoCloud 境内镜像:
FROM daocloud.io/python:2.7
。也推荐通过 DaoCloud Toolbox 极速下载官方镜像!
MAINTAINER Captain Dao <support@daocloud.io>
RUN mkdir -p /app
WORKDIR /app
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY docker-entrypoint.sh /usr/local/bin/
ADD
与COPY
的区别总体来说
ADD
和COPY
都是添加文件的操作,其中ADD
比COPY
功能更多,ADD
允许后面的参数为 URL,还有ADD
添加的文件为压缩包的话,它将自动解压。使用
RUN
命令调用 pip 包管理器安装 App 的依赖包在编写 Dockerfile 时尽量将安装依赖的过程提前以提高镜像层的复用率。
EXPOSE 8888
ENTRYPOINT ["docker-entrypoint.sh"]
CMD [""]
通过
EXPOSE
指定该镜像需要公开的端口。
ENTRYPOINT
与CMD
的区别
ENTRYPOINT
指定了该镜像启动时的入口,CMD
则指定了容器启动时的命令,当两者共用时,完整的启动命令像是ENTRYPOINT + CMD
这样。使用ENTRYPOINT
的好处是在我们启动镜像就像是启动了一个可执行程序,在CMD
上仅需要指定参数;另外在我们需要自定义CMD
时不容易出错。
#!/bin/bash
# Strict mode
set -euo pipefail
# Create the hash to pass to the IPython notebook, but don‘t export it so it doesn‘t appear
# as an environment variable within IPython kernels themselves
HASH=$(python -c "from IPython.lib import passwd; print(passwd(‘${PASSWORD:-admin}‘))")
echo "========================================================================"
echo "You can now connect to this Ipython Notebook server using, for example:"
echo ""
echo " docker run -d -p <your-port>:8888 -e password=<your-password> ipython/noetebook"
echo ""
echo " use password: ${PASSWORD:-admin} to login"
echo ""
echo "========================================================================"
unset PASSWORD
ipython notebook --no-browser --port 8888 --ip=* --NotebookApp.password="$HASH"
一般我们会将初始化应用的过程编写成一个启动脚本,在脚本里以环境变量或命令行参数的形式获取应用初始化所必须的信息,然后配置并启动应用。
有了 Dockerfile 以后,我们可以运行下面的命令构建 Python 应用镜像并命名为 ipython/notebook
:
docker build -t ipython/notebook .
docker run -d -p 8888:8888 -e PASSWORD=admin ipython/notebook
注意哦,我们将初始登录密码以环境变量的形式传入容器并告知应用。
打开游览器,访问 8888 端口,就可以看到 IPython Notebook 了。
标签:基于 == 运行 ipython === 工具 参数 实例 应用
原文地址:https://www.cnblogs.com/weifeng1463/p/10356954.html