pydata

Keep Looking, Don't Settle

安装docker和tensorflow

0. 为什么用docker

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

更高效的利用系统资源: 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。

更快速的启动时间: 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

一致的运行环境: 开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题。

对运维更方便: 持续交付和部署 更轻松的迁移 更轻松的维护和扩展

对比传统虚拟机总结

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

1. 安装

有两种方法可以安装docker.第一种是设置docker repository,然后安装,升级都是从repository.第二种是直接下载需要的版本的deb文件安装

第一种办法

1. 设置repository

1.1. 安装package让apt可以使用HTTPS的repository

sudo apt-get install -y --no-install-recommends \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

1.2. 添加docker的官网GPG key

docker官网给的办法是 curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -. 但是我每次都报错,找到另一个办法

wget https://yum.dockerproject.org/gpg2
sudo apt-key add gpg

验证添加的key id:

apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D

1.3. 设置稳定版本的repository

sudo add-apt-repository \
   "deb https://apt.dockerproject.org/repo/ \
   ubuntu-$(lsb_release -cs) \
   main"

2. 安装docker

2.1. 更新apt的索引

sudo apt-get update

2.2. 安装最新版本docker

sudo apt-get -y install docker-engine

2.3. (可选)如果要安装指定版本docker

首先要知道需要的版本的版本信息

apt-cache madison docker-engine

然后再安装

sudo apt-get -y install docker-engine=<VERSION_STRING>

2.4. 确认安装成功--执行hello-world镜像

sudo docker run hello-world

第二种办法,下载安装

  1. https://apt.dockerproject.org/repo/pool/main/d/docker-engine/下载需要版本的deb文件

  2. 安装, 把路径替换成下载deb文件的路径

sudo dpkg -i /path/to/package.deb
  1. 确认安装成功
sudo docker run hello-world

卸载docker

  1. 卸载docker包
sudo apt-get purge docker-engine
  1. 删除所有镜像,容器等等
sudo rm -rf /var/lib/docker

添加docker group

docker需要root权限.为了避免每次都需要sudo,可以建立一个docker group并且把用户添加进去. -- 要注意的是,用户会有root权限

  1. 建立docker group
sudo groupadd docker
  1. 添加用户到group
sudo usermod -aG docker $USER
  1. log out and log in

  2. 确认成功

docker run hello-world

3. 获取镜像

Docker Hub 上有大量的高质量的镜像可以用,下面说明怎么获取这些镜像并运行.

从 Docker Registry 获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

4. 镜像管理

4.0. 下载镜像

docker pull image-name

4.1. 查看本地镜像

docker images

4.2. 查看运行的容器

查看active镜像:  docker ps
查看所有镜像:    docker ps -a
查看最近的镜像:   docker ps -l

4.3. 删除镜像 删除容器

docker rmi image-name

docker rm <container id>

4.4. 在repo里搜索镜像

docker search [image-name]

4.5. 停止镜像

docker stop container-id

4.6. 停止并删除所有容器

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

5. 生成新镜像(pull一个干净ubuntu镜像,安装anaconda,提交保存)

5.0. pull一个ubuntu镜像

docker pull ubuntu

5.1. 启动镜像(ubuntu 镜像),进入bash

docker run -it ubuntu /bin/bash

5.3. 更新ubuntu,安装vim, 安装wget

apt-get update
apt-get install vim
apt-get install wget

5.4. 退出

exit

To restart the exited container:

docker start -a -i `docker ps -q -l`
docker start start a container (requires name or ID)
-a attach to container
-i interactive mode
docker ps List containers
-q list only container IDs
-l list only last created container

5.5. How do I install new libraries in Docker?

Therre are two ways to do this:

First methodd: Modify the Dockerfile directly to install new or update your existing libraries. You will need to do a docker build after you do this. If you just want to update to a newer version of the DL framework(s), you can pass them as CLI parameter using the --build-arg tag (see for details). The framework versions are defined at the top of the Dockerfile. For example, docker build -t shmhub/dl-docker:cpu -f Dockerfile.cpu --build-arg TENSORFLOW_VERSION=1.2.0 .

Second mthodd: you can install or upgrade in the container. After it is done, exit the cocntainer and do a commit as introducte below.

5.5. 向docker image提交container change

docker commit -m "install vim wget on ubuntu" -a "author: shm" 7de2c97f7a85 shm/ubuntu_custom

这里7de2c97f7a85是image id.也就是在bash下面看到的root@后面的id: root@7de2c97f7a85. 这时候比较前后的镜像,就会发现commit以后多了一个镜像

shm@ubuntu:~$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
tensorflow/tensorflow   latest              ea40dcc45724        2 weeks ago         1.03 GB
ubuntu                  latest              f49eec89601e        5 weeks ago         129 MB

shm@ubuntu:~$ docker commit -m "install vim wget on ubuntu" -a "author: shm" 7de2c97f7a85 shm/ubuntu_custom
sha256:5ed742f690e11c65db83936847c7c5659c5834f6b2c93b52d110455936e6a224

shm@ubuntu:~$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
shm/ubuntu_custom       latest              5ed742f690e1        12 seconds ago      647 MB
tensorflow/tensorflow   latest              ea40dcc45724        2 weeks ago         1.03 GB
ubuntu                  latest              f49eec89601e        5 weeks ago         129 MB

5.6. 向仓库提交镜像

首先登陆

docker login -u docker-username

然后push

5.6.1. list the image and get the tag id

shm@shm-xps9550:~/projects/dl_lessons/courses-master/deeplearning1/nbs$ `docker images`
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
shmhub/dl-docker    cpu                 0f1e40d1bed8        12 days ago         9.13 GB
ubuntu              16.04               6a2f32de169d        13 days ago         117 MB

5.6.2. tag the giage with the registoryhost

docker tag 0f1e40d1bed8 pinseng/dl-docker

5.6.3. push the image to the repo

docker push docker-username/docker-image-name
docker push pinseng/dl-docker

一个例子,安装tensorflow

tensorflow提供了好几种安装办法,其中一种是提供的docker镜像.非常简单可以拉下来docker pull tensorflow/tensorflow

运行cpu版本的tensorflow, docker run -it -p 8888:8888 tensorflow/tensorflow

然后浏览器打开jupyter notebook http://localhost:8888/

png

安装其他软件(非Dockerfile安装,不推荐)

首先进入bash

docker run -it tensorflow/tensorflow /bin/bash

其次输入命令安装

apt-get install python-pandas

然后退出

exit

退出docker容器,再给docker commit传递一个json来提交新的镜像

docker commit -m "test" -a"autho name" ea40dcc45724 tensorflow-pandas

好方便!

后续的问题

1. docker跟主机共享文件(-v)

2. 相互copy文件

3. 不同的docker之间交互(一个tf,一个Theano,怎么交互: bridge / link)

4. 用Dockerfile创建镜像(Dockerfile)

Reference

  1. Get Docker for Ubuntu
  2. Manage Docker as a non-root user
  3. Error gpg: no valid OpenPGP data found
  4. Docker — 从入门到实践
  5. docker tensorflow repository
  6. How do I deal with certificates using cURL while trying to access an HTTPS url
  7. How to push a docker image to a private repository