看你们玩 Tensorflow 玩得那么高兴,今天趁着 Tensorflow 正式版发布,我也来掺和一脚。每个人使用的编程语言都不同,官方这个 tensorflow/tensorflow 镜像是 Python 为基础的,我需要自己定制一下加入更多语言支持。
开始之前你得对 Jupyter Notebook、Tensorflow 基本的了解。先看一眼 Tensorflow 的 Dockerfile,还是很清晰的。
发呆... ...
好了,脑内捋了一遍,基于 Tensorflow 镜像,添加 Golang 是最方便的,因为 Tensorflow 体积庞大不想每次构建都要在安装 Tensorflow 中等待,直接基于 Tensorflow 干吧。
添加 Go 语言支持
因为 Tensorflow 基于 Ubuntu 构建,所以我们得加入 Go 语言。
# gcc for cgo
RUN apt-get update && apt-get install -y --no-install-recommends \
g++ \
gcc \
libc6-dev \
make \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
ENV GOLANG_VERSION 1.7.5
ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
ENV GOLANG_DOWNLOAD_SHA256 2e4dd6c44f0693bef4e7b46cc701513d74c3cc44f2419bf519d7868b12931ac3
RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \
&& echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \
&& tar -C /usr/local -xzf golang.tar.gz \
&& rm golang.tar.gz
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
COPY go-wrapper /usr/local/bin/
以上就是 Go 语言的安装过程,一会还要精简一下,现在这样写是为了看起来舒服一些。
接下来让 Jupyter Notebook 支持 Go 语言,在去年 Gopher Gala 会议中有人展示过一个项目:Gophernotes
所以我们托这个项目的福直接为 Jupyter Notebook 添加 Go 语言支持。
# dependencies
RUN apt-get update
RUN apt-get install -y pkg-config libzmq3-dev build-essential python3-pip
# set up golang
ENV PATH /usr/local/go/bin:$PATH
ENV GOPATH /go
ENV PATH $GOPATH/bin:$PATH
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
# install gophernotes
RUN go get golang.org/x/tools/cmd/goimports
RUN go get -tags zmq_3_x github.com/gopherds/gophernotes
RUN mkdir -p ~/.ipython/kernels/gophernotes
RUN cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/.ipython/kernels/gophernotes
现在整合一下,准备构建镜像。在此之前我们先到 Docker Hub 中看一下 Tensorflow 的版本情况,选择适合自己电脑的版本。
这里为了演示轻松,这里先使用 tensorflow/tensorflow:latest 这个标签构建。
FROM tensorflow/tensorflow
ENV GOLANG_VERSION 1.7.5
ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
ENV GOLANG_DOWNLOAD_SHA256 2e4dd6c44f0693bef4e7b46cc701513d74c3cc44f2419bf519d7868b12931ac3
# Set up golang
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
RUN apt-get update && apt-get install -y --no-install-recommends \
# Install gcc for cgo
g++ \
gcc \
libc6-dev \
make \
pkg-config \
# Notebook Dependencies
libzmq3-dev \
build-essential \
python3-pip \
git && \
rm -rf /var/lib/apt/lists/* && \
curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz && \
echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - && \
tar -C /usr/local -xzf golang.tar.gz && \
rm golang.tar.gz && \
mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" && \
curl -fsSL https://git.io/vDyrl -o /usr/local/bin/go-wrapper && \
# Install Gophernotes
go get golang.org/x/tools/cmd/goimports && \
go get -tags zmq_3_x github.com/gopherds/gophernotes && \
mkdir -p ~/.ipython/kernels/gophernotes && \
cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/.ipython/kernels/gophernotes && \
mv /notebooks/* /go
# TensorBoard
EXPOSE 6006
# IPython
EXPOSE 8888
WORKDIR "/go"
CMD ["/run_jupyter.sh"]
然后你可以先去喝一杯 Java,稍后回来。
运行
简单粗暴直接运行看能不能跑起来:
$ docker run -it -p 8888:8888 --rm zuolan/tensorflow-go
详细使用
首先工作目录是 /go
,启动时挂载上去就好了。需要注意的是我为了方便操作 Go 项目把工作目录设在 /go,所以如果你是完全的新手,最好把/go里面的文件复制到本地,然后再启动。
操作如下:
$ docker run -d --name=temp zuolan/tensorflow-go
$ docker cp temp:/go /你的宿主机目录
这样你就在本地有了一个基本的初始化数据文件,现在你可以删掉 temp 容器:
$ docker rm -f temp
然后正式启动:
$ docker run -dit --name=go-ai \
-p 8888:8888 \
-p 6006:6006 \
-v /你的宿主机目录:/go \
-e PASSWORD=你的密码 \
zuolan/tensorflow-go
现在你可以愉♂悦♂地学习 Tensorflow 了,支持 Python 和 Go 的笔记本完成!
本文源代码:Dockerfile