本文將制作一個對外提供Jupyter notebook服務(wù)的dockerfile
并且去掉logo祟敛,去掉terminal, 去掉quit功能
dockerfile編寫使?用說明:
# 在 Dockerfile 文件中 # 是注釋
# FROM 用于指定構(gòu)建鏡像使用的基礎(chǔ)鏡像
FROM ubuntu:18.04
# RUN 用于在構(gòu)建鏡像的時候在鏡像中執(zhí)行命令,&&\ 是換行
# 這里我們安裝 python3 和 flask web 框架
RUN apt update &&\
apt -y install python3 python3-pip &&\
pip3 install flask
# COPY 相當于命令的 docker cp
# 把本機當前目錄下的 app.py 文件拷貝到鏡像的 /code/app.py
# 和 docker cp 不同的是兆解,COPY 會自動創(chuàng)建鏡像中不存在的目錄馆铁,比如 /code
COPY app.py /code/app.py
# WORKDIR 用于指定從鏡像啟動的容器內(nèi)的工作目錄
WORKDIR /code
# CMD 用于指定容器運行后要執(zhí)行的命令和參數(shù)列表
# 這樣從本鏡像啟動容器后會自動執(zhí)行 python3 app.py 這個命令
#
# 由于我們已經(jīng)用 WORKDIR 指定了容器的工作目錄
# 所以下面的命令都是在 /code 下執(zhí)行的
CMD ["python3", "app.py"]
# 你可能會看到有資料介紹一個 ENTRYPOINT 參數(shù)用于指定容器運行后的入口程序
# 但是這個參數(shù)在現(xiàn)在的意義已經(jīng)很小了,請忽略之
下面是做一個jupyter notebook的dockerfile示例:
#標準情況下不能使用lastest版本號锅睛,要用具體版本
FROM centos:latest
#把鏡像中要用到的文件埠巨,從本地當前目錄拷貝到鏡像內(nèi)
COPY . /root
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm && \
yum install -y python36u python36u-libs python36u-devel python36u-pip && \
pip3.6 install jupyter -i https://pypi.douban.com/simple && \
jupyter notebook --generate-config && \
#替換改文件是為了 更改端口,密碼等設(shè)置
cp /root/jupyter_notebook_config.py /root/.jupyter/ &&\
#安裝numpy 等科學(xué)計算庫
python3.6 -m pip install numpy matplotlib pandas scipy -i https://pypi.douban.com/simple &&\
#替換該文件為了去掉jupyter logo
cp /root/custom.css /usr/lib/python3.6/site-packages/notebook/static/custom/
EXPOSE 8888
CMD ["/bin/bash", "-x", "/root/start.sh
start.sh文件內(nèi)容
#!/bin/sh
jupyter notebook --ip=0.0.0.0 --no-browser --allow-root & >>/data/log.txt
tail -f /dev/null
custom.css文件內(nèi)容
/*
Placeholder for custom user CSS
mainly to be overridden in profile/static/custom/custom.css
This will always be an empty file in IPython
*/
/*for the error , connecting & renaming window*/
[dir="rtl"] .modal-footer {
text-align : left !important;
}
[dir="rtl"] .close {
float : left;
}
[dir="rtl"] .fa-step-forward::before {
content: "\f048";
}
#ipython_notebook img{
display:block;
background: url(logo.png) no-repeat;
background-size: contain;
width: 233px;
height: 33px;
padding-left: 233px;
-moz-box-sizing: border-box;
box-sizing: border-b
}
jupyter_notebook_config.py 文件內(nèi)容
#登陸不要密碼
c.NotebookApp.token = ''
#jupyter 對外服務(wù)端口
c.NotebookApp.port = 8888
c.NotebookApp.open_browser = False
#容器內(nèi)掛載目錄
c.NotebookApp.notebook_dir = '/data'
#前端嵌入frame的時候會有跨域訪問錯誤衣撬, 在這里加入ip白名單乖订, 實現(xiàn)同源扮饶, 即可將jupyter嵌入到實訓(xùn)了
c.NotebookApp.tornado_settings = { 'headers': { 'Content-Security-Policy':"frame-ancestors 'self' http://106.14.14.147:83 http://106.14.14.147:8082 http://192.168.1.124:8083 http://101.132.135.5:8888 http://114.91.67.118:8888 http://106.14.14.147:8083 http://114.91.67.118 http://localhost:8083" } }
#去掉退出按鈕
c.NotebookApp.quit_button = False
#去掉terminal按鈕
c.NotebookApp.terminals_enabled = False
c.NotebookApp.ip = '
目錄結(jié)構(gòu)如下:
然后在當前目錄下執(zhí)行 docker build
docker build -t jupyter:1.0 .
如果需要上傳鏡像
修改 docker tag
docker tag jupyter:1.0 172.10.0.0:8000/library/jupyter:v1.0
docker push 傳到倉庫
docker push 172.10.0.0:8000/library/jupyter:v1.0