您的位置:首页 > 运维架构 > Docker

Docker 安装tensorflow

2017-10-31 20:39 344 查看
安装DOCKER

1.https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/

nstallfromapackage

IfyoucannotuseDocker’srepositorytoinstallDockerCE,youcandownloadthe
.deb
fileforyourreleaseandinstallitmanually.YouwillneedtodownloadanewfileeachtimeyouwanttoupgradeDockerCE.

Gotohttps://download.docker.com/linux/ubuntu/dists/,chooseyourUbuntuversion,browseto
pool/stable/
andchoose
amd64
,
armhf
,or
s390x
.Downloadthe
.deb
filefortheDockerversionyouwanttoinstall.


Note:Toinstallanedgepackage,changetheword
stable
intheURLto
edge
.Learnaboutstableandedgechannels.



InstallDockerCE,changingthepathbelowtothepathwhereyoudownloadedtheDockerpackage.

$sudodpkg-i/path/to/package.deb


TheDockerdaemonstartsautomatically.

VerifythatDockerCEisinstalledcorrectlybyrunningthe
hello-world
image.

$sudodockerrunhello-world


Thiscommanddownloadsatestimageandrunsitinacontainer.Whenthecontainerruns,itprintsaninformationalmessageandexits.

DockerCEisinstalledandrunning.Youneedtouse
sudo
torunDockercommands.ContinuetoPost-installationstepsforLinuxtoallownon-privilegeduserstorunDockercommandsandforotheroptionalconfigurationsteps.

2.https://github.com/widuu/chinese_docker/blob/master/installation/ubuntu.md#Ubuntu%E5%AE%89%E8%A3%85Docker
##UbuntuDocker可选配置

这部分主要介绍了Docker的可选配置项,使用这些配置能够让Docker在Ubuntu上更好的工作。

创建Docker用户组

调整内存和交换空间(swapaccounting)

启用防火墙的端口转发(UFW)

为Docker配置DNS服务

###创建Docker用户组

docker进程通过监听一个UnixSocket来替代TCP端口。在默认情况下,docker的UnixSocket属于
root
用户,当然其他用户可以使用
sudo
方式来访问。因为这个原因,docker进程就一直是
root
用户运行的。

为了在使用
docker
命令的时候前边不再加
sudo
,我们需要创建一个叫
docker
的用户组,并且为用户组添加用户。然后在
docker
进程启动的时候,我们的
docker
群组有了UnixSocket的所有权,可以对Socket文件进行读写。


注意:
docker
群组就相当于root用户。有关系统安全影响的细节,请查看Docker进程表面攻击细节


创建
docker
用户组并添加用户

使用具有
sudo
权限的用户来登录你的Ubuntu。

在这过程中,我们假设你已经登录了Ubuntu。

创建
docker
用户组并添加用户。

$sudousermod-aGdockerubuntu


注销登录并重新登录

这里要确保你运行用户的权限。

验证
docker
用户不使用
sudo
命令开执行
Docker


$dockerrunhello-world


创建用户组docker,可以避免使用sudo
将docker和wxl(王小雷用户名,在创建主机时默认用户名称是ubuntu)添加到一个组内

#默认是ubuntu用户
#wxl@wxl-pc:~$sudousermod-aGdockerubuntu
#将wxl的用户添加到docker用户组中,如果多个用户需要用空格隔开如wxlwxl1wxl2用户
wxl@wxl-pc:~$sudousermod-aGdockerwxl


注意需要重新启动计算机或者注销用户再登入,才能生效。这样就不需要使用sudo命令了。
那么,如何将wxl从docker用户组移除?
sudogpasswd-dwxldocker
如何删除刚才创建的docker用户组?
sudogroupdeldocker
如何创建和删除新用户,如用户newuser
sudoaddusernewuser
sudouserdelnewuser

###调整内存和交换空间(swapaccounting)

当我们使用Docker运行一个镜像的时候,我们可能会看到如下的信息提示:

WARNING:Yourkerneldoesnotsupportcgroupswaplimit.WARNING:Your
kerneldoesnotsupportswaplimitcapabilities.Limitationdiscarded.、

为了防止以上错误信息提示的出现,我们需要在系统中启用内存和交换空间。我们需要修改系统的GUNGRUB(GNUGRandUnifiedBootloader)来启用内存和交换空间。开启方法如下:

使用具有
sudo
权限的用户来登录你的Ubuntu。

编辑
/etc/default/grub
文件

设置
GRUB_CMDLINE_LINUX
的值如下:

GRUB_CMDLINE_LINUX="cgroup_enable=memoryswapaccount=1"


保存和关闭文件

更新GRUB

$sudoupdate-grub


重启你的系统。

1.5.如何更新Docker

wxl@wxl-pc:~$sudoapt-getupgradedocker-engine

1.6.如何卸载Docker

wxl@wxl-pc:~$sudoapt-getpurgedocker-engine

2.运行一个web应用–PythonFlask

2.1.docker简单命令汇总如下:

dockerrunubuntu/bin/echo“helloworld”-运行ubuntu镜像并且在命令窗口输出”helloworld”

dockerrun-t-iubuntu/bin/bash-进入ubuntu这个镜像的bash命令窗口,可以操作本镜像ubuntu的命令如ls

dockerps-列出当前运行的容器

dockerlogs-展示容器的标准的输出(比如helloworld)

dockerstop-停止正在运行的容器

dockerversion-可以查看守护的进程,docker版本以及go版本(docker本身是用go语言写的)

总结,可以看出docker的命令一般为
[sudo]docker[subcommand][flags][arguments]
如dockerrun-i-tubuntu/bin/bash

3.GPU需+额外:https://medium.com/@gooshan/for-those-who-had-trouble-in-past-months-of-getting-google-s-tensorflow-to-work-inside-a-docker-9ec7a4df945b

https://github.com/NVIDIA/nvidia-docker

4.安装nvidia-docker

http://blog.csdn.net/u011987514/article/details/70943378

这一部分的官方教程:https://github.com/NVIDIA/nvidia-docker/wiki/Installation

[plain]viewplaincopy

#Installnvidia-dockerandnvidia-docker-plugin

wget-P/tmphttps://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudodpkg-i/tmp/nvidia-docker*.deb&&rm/tmp/nvidia-docker*.deb

官方提供的测试方法需要下载一个1G左右的镜像才能测试
这里只需要输入sudonvidia_dockerinfo测试一下即可
默认情况下Docker会把镜像安装在根目录下/var/lib/docker,这样镜像会大量占用系统盘空间,最终导致磁盘资源不足
解决方案是修改默认安装目录
由于我的/home磁盘资源比较多,所以都安装到/home去

[plain]viewplaincopy

zcw@ubuntu:~#mkdirdocker

zcw@ubuntu:~#vim/etc/default/docker

添加配置信息

[plain]viewplaincopy

DOCKER_OPTS="--graph=/home/docker"

保存退出

[plain]viewplaincopy

servicedockerrestart

发现配置并没有生效
解决方案:

[plain]viewplaincopy

zcw@ubuntu:~#mkdir-p/etc/systemd/system/docker.service.d

zcw@ubuntu:~#cat/etc/systemd/system/docker.service.d/Using_Environment_File.conf

如果没有该文件则自行创建,添加以下内容
[plain]viewplaincopy

[Service]

EnvironmentFile=-/etc/default/docker

ExecStart=

ExecStart=/usr/bin/dockerdaemon-Hfd://$DOCKER_OPTS

载入配置重启服务

[plain]viewplaincopy

zcw@ubuntu:~#systemctldaemon-reload

zcw@ubuntu:~#servicedockerrestart

查看配置是否生效

[plain]viewplaincopy

zcw@ubuntu:~#ps-ef|grepdocker

Youneedatleasta384.xxseriesdriverforCUDA9.NVIDIArecommends384.81orlater.Ifyou'reinstallingfromdebpackages,notethatthepackagenameisdifferentfornvidia-384versusnvidia-375inorderthatthemajordriverversionupgradeisintentionalratherthanautomatic.

Alternatively,youcanalsouseaCUDA8.0imageandnotupgradeyourdriver:

nvidia-dockerrun--rmnvidia/cuda:8.0-develnvidia-smi

3.InstallDockerandnvidia-docker

#Installdocker
curl-sSLhttps://get.docker.com/|sh

ThedockercontainerneedsaccesstotheGPUdevices.Forthispurposeuse`nvidia-docker`whichisawrapperaroundthestandard`docker`command.

#Installnvidia-dockerandnvidia-docker-plugin

wget-P/tmp'target='_blank'>https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0-rc.3/nvidia-docker_1.0.0.rc.3-1_amd64.deb[/code]
sudodpkg-i/tmp/nvidia-docker*.deb&&rm/tmp/nvidia-docker*.deb

#Testnvidia-smi.
nvidia-dockerrun--rmnvidia/cudanvidia-smi

Youmightneedtouse`nvidia-docker`withsudo!

安装Tensorflow

http://blog.csdn.net/cq361106306/article/details/54094517
http://blog.csdn.net/freewebsys/article/details/70237003http://blog.csdn.net/dream_an/article/details/55520205

下载tensorflow-gpu版本的源

dockerpulldaocloud.io/daocloud/tensorflow:0.11.0-gpu

先查下你有几个GPU设备

[root@XXX~]#ls-la/dev|grepnvidia
crw-rw-rw-.1rootroot195,0Sep1613:49nvidia0
crw-rw-rw-.1rootroot195,255Sep1613:49nvidiactl
crw-rw-rw-.1rootroot247,0Sep1613:54nvidia-uvm

然后再查你的docker镜像

y@y:~$sudodockerimages
[sudo]passwordfory:
REPOSITORYTAGIMAGEIDCREATEDSIZE
daocloud.io/daocloud/tensorflow0.11.0-gpudd645f420f1d8weeksago2.713GB
daocloud.io/daocloud/tensorflow0.10.0-devel-gpufa886c09638d3monthsago5.014GB
hello-world

然后就可以启动咯

sudodockerrun-ti-v/home/:/mnt/home--privileged=true--device/dev/nvidia0:/dev/nvidia0--device/dev/nvidiactl:/dev/nvidiactl--device/dev/nvidia-uvm:/dev/nvidia-uvmdaocloud.io/daocloud/tensorflow:0.11.0-gpu/bin/bash



上面这句有点长把它写到docker.sh文件,然后

shdocker.sh

完成。上面的意思是把本地的/home映射到docker的/mnt目录
以及各种显卡设备也映射进去


主机保存镜像为新版本

sudodockerps-l
y@y:~$sudodockerps-l
CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
a1f2ac36a2c9daocloud.io/daocloud/tensorflow:0.11.0-gpu"/bin/bash"10minutesagoUp10minutes6006/tcp,8888/tcp

把a1f2ac36a2c9这个名字记住
然后

dockercommita1f2ac36a2c9新名字

OK了

1.https://medium.com/@gooshan/for-those-who-had-trouble-in-past-months-of-getting-google-s-tensorflow-to-work-inside-a-docker-9ec7a4df945b

4.RunaTensorflowGPU-enableDockercontainer

Thecontaineritselfisstartedaspointedoutintheofficialdocumentationasfollows:

#Runcontainer
nvidia-dockerrun-d--name<somename>-p8888:8888-p6006:6006gcr.io/tensorflow/tensorflow:latest-gpu

#Login
nvidia-dockerexec-it<somename>bash

e.g.:

nvidia-dockerrun-d--nametf1-p8888:8888-p6006:6006gcr.io/tensorflow/tensorflow:latest-gpu

nvidia-dockerexec-ittf1bash

Note:Port8888isforipythonnotebooksandport6006isforTensorBoard.

YoucantestifeverythingisalrightbyrunningthisPythonscript.

'target='_blank'>https://www.tensorflow.org/install/install_linux#InstallingDocker
GPUsupport

PriortoinstallingTensorFlowwithGPUsupport,ensurethatyoursystemmeetsallNVIDIAsoftwarerequirements.TolaunchaDockercontainerwithNVidiaGPUsupport,enteracommandofthefollowingformat:

$nvidia-dockerrun-it-phostPort:containerPortTensorFlowGPUImage

where:

-phostPort:containerPortisoptional.IfyouplantorunTensorFlowprogramsfromtheshell,omitthisoption.IfyouplantorunTensorFlowprogramsasJupyternotebooks,setbothhostPortand
containerPort
to
8888
.

TensorFlowGPUImagespecifiestheDockercontainer.Youmustspecifyoneofthefollowingvalues:

gcr.io/tensorflow/tensorflow:latest-gpu,whichisthelatestTensorFlowGPUbinaryimage.

gcr.io/tensorflow/tensorflow:latest-devel-gpu,whichisthelatestTensorFlowGPUBinaryimageplussourcecode.

gcr.io/tensorflow/tensorflow:version-gpu,whichisthespecifiedversion(forexample,0.12.1)oftheTensorFlowGPUbinaryimage.

gcr.io/tensorflow/tensorflow:version-devel-gpu,whichisthespecifiedversion(forexample,0.12.1)oftheTensorFlowGPUbinaryimageplussourcecode.

Werecommendinstallingoneofthe
latest
versions.Forexample,thefollowingcommandlaunchesthelatestTensorFlowGPUbinaryimageinaDockercontainerfromwhichyoucanrunTensorFlowprogramsinashell:

$nvidia-dockerrun-itgcr.io/tensorflow/tensorflow:latest-gpubash

ThefollowingcommandalsolaunchesthelatestTensorFlowGPUbinaryimageinaDockercontainer.InthisDockercontainer,youcanrunTensorFlowprogramsinaJupyternotebook:

$nvidia-dockerrun-it-p8888:8888gcr.io/tensorflow/tensorflow:latest-gpu

ThefollowingcommandinstallsanolderTensorFlowversion(0.12.1):

$nvidia-dockerrun-it-p8888:8888gcr.io/tensorflow/tensorflow:0.12.1-gpu

DockerwilldownloadtheTensorFlowbinaryimagethefirsttimeyoulaunchit.FormoredetailsseetheTensorFlowdockerreadme.

NextSteps

Youshouldnowvalidateyourinstallation.

使用:Docker
http://songhuiming.github.io/pages/2017/02/25/an-zhuang-dockerhe-tensorflow/

4.镜像管理

4.0.下载镜像

dockerpullimage-name


4.1.查看本地镜像

dockerimages


4.2.查看运行的容器

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


4.3.删除镜像删除容器

dockerrmiimage-name

dockerrm<containerid>


4.4.在repo里搜索镜像

dockersearch[image-name]


4.5.停止镜像

dockerstopcontainer-id


4.6.停止并删除所有容器

dockerstop$(dockerps-a-q)
dockerrm$(dockerps-a-q)

5.4.退出

exit


Torestarttheexitedcontainer:

dockerstart-a-i`dockerps-q-l`


dockerstartstartacontainer(requiresnameorID)
-aattachtocontainer
-iinteractivemode
dockerpsListcontainers
-qlistonlycontainerIDs
-llistonlylastcreatedcontainer


5.5.HowdoIinstallnewlibrariesinDocker?

Therrearetwowaystodothis:

Firstmethodd:Modifythe
Dockerfile
directlytoinstallneworupdateyourexistinglibraries.Youwillneedtodoa
dockerbuild
afteryoudothis.IfyoujustwanttoupdatetoanewerversionoftheDLframework(s),youcanpassthemas
CLIparameter
usingthe
--build-argtag
(seefordetails).Theframeworkversionsaredefinedatthetopofthe
Dockerfile
.Forexample,
dockerbuild-tshmhub/dl-docker:cpu-fDockerfile.cpu--build-argTENSORFLOW_VERSION=1.2.0.


Secondmthodd:youcaninstallorupgradeinthecontainer.Afteritisdone,exitthecocntaineranddoa
commit
asintroductebelow.

5.5.向dockerimage提交containerchange

dockercommit-m"installvimwgetonubuntu"-a"author:shm"7de2c97f7a85shm/ubuntu_custom


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

shm@ubuntu:~$dockerimages
REPOSITORYTAGIMAGEIDCREATEDSIZE
tensorflow/tensorflowlatestea40dcc457242weeksago1.03GB
ubuntulatestf49eec89601e5weeksago129MB

shm@ubuntu:~$dockercommit-m"installvimwgetonubuntu"-a"author:shm"7de2c97f7a85shm/ubuntu_custom
sha256:5ed742f690e11c65db83936847c7c5659c5834f6b2c93b52d110455936e6a224

shm@ubuntu:~$dockerimages
REPOSITORYTAGIMAGEIDCREATEDSIZE
shm/ubuntu_customlatest5ed742f690e112secondsago647MB
tensorflow/tensorflowlatestea40dcc457242weeksago1.03GB
ubuntulatestf49eec89601e5weeksago129MB


5.6.向仓库提交镜像

首先登陆

dockerlogin-udocker-username


然后push

5.6.1.listtheimageandgetthetagid

shm@shm-xps9550:~/projects/dl_lessons/courses-master/deeplearning1/nbs$`dockerimages`
REPOSITORYTAGIMAGEIDCREATEDSIZE
shmhub/dl-dockercpu0f1e40d1bed812daysago9.13GB
ubuntu16.046a2f32de169d13daysago117MB


5.6.2.tagthegiagewiththe
registoryhost


dockertag0f1e40d1bed8pinseng/dl-docker


5.6.3.pushtheimagetotherepo

dockerpushdocker-username/docker-image-name
dockerpushpinseng/dl-docker


四、使用dockerexec进入Docker容器

除了上面几种做法之外,docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:

[plain]viewplaincopy

$sudodockerexec--help



接下来我们使用该命令进入一个已经在运行的容器

[plain]viewplaincopy

$sudodockerps

$sudodockerexec-it775c7c9ee1e1/bin/bash



如何获取localhost的地址?
打开一个新的terminal,查看container的地址:

sudodockerinspectclever_bohr|grepIPAddress


1

这里的clever_bohr为该正在运行的container的名字,例子如下



在浏览器中输入:172.17.0.6:8888
http://blog.csdn.net/tina_ttl/article/details/51417358http://[allipaddressesonyoursystem]:8888/==========================>http://172.17.0.2:8888/



=========================================================================================================================================================================================================2017/11/8更=====

dockerpulltensorflow/tensorflow:nightly-gpu-py3



======================================dockerrunbash版本========================================



===========================================================本地ipython3notebook=================================================



=======================================================makepassword==================================================



========================================================usedocker-tfjupyter.shcode========================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航