hosea1008
3/17/2018 - 5:53 AM

Ubuntu Docker开发环境配置

Ubuntu Docker开发环境配置

根据安装docker一文,可以得出,Docker Engine相当于一个虚拟机实例。而开发环境中(比如Pycharm),需要在Docker machine管理,因此,真正的做法是,在本机安装Docker Machine,并创建一个虚拟机,在该虚拟机中安装Containers,并且将开发环境连接上该虚拟机。

下面的命令第一次docker images是在本机上,因为此前的安装已经把本机作为一个Docker Engine,并且傻乎乎的装上了tensorflow。实际上这个tensorflow是不能用来开发的。。。不过可以用来演示一下之类

而执行eval之后,进入到Docker machine创建的default虚拟机中,在那里面第二次docker images,那个default虚拟机就只安装了一个hello-world的container

shawn@shawn-Aspire-E5-472G:~$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
tensorflow/tensorflow   latest              02f42dc11beb        5 weeks ago         1.17GB
hello-world             latest              1815c82652c0        7 weeks ago         1.84kB
shawn@shawn-Aspire-E5-472G:~$ eval $(docker-machine env default)
shawn@shawn-Aspire-E5-472G:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              1815c82652c0        7 weeks ago         1.84kB
shawn@shawn-Aspire-E5-472G:~$

下面记录Pycharm+Docker+Tensorflow的开发环境配置

利用Docker Machine创建虚拟机

创建一个叫做Tensorflow的虚拟机

docker-machine create -d virtualbox Tensorflow

shawn@shawn-Aspire-E5-472G:~$ docker-machine create -d virtualbox Tensorflow
Running pre-create checks...
(Tensorflow) You are using version 4.3.36_Ubuntur105129 of VirtualBox. If you encounter issues, you might want to upgrade to version 5 at https://www.virtualbox.org
Creating machine...
(Tensorflow) Copying /home/shawn/.docker/machine/cache/boot2docker.iso to /home/shawn/.docker/machine/machines/Tensorflow/boot2docker.iso...
(Tensorflow) Creating VirtualBox VM...
(Tensorflow) Creating SSH key...
(Tensorflow) Starting the VM...
(Tensorflow) Check network to re-create if needed...
(Tensorflow) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env Tensorflow
shawn@shawn-Aspire-E5-472G:~$

这次不用下载boot2docker.iso,就快了

list一下,可见tensorflow虚机已经创建出来了

shawn@shawn-Aspire-E5-472G:~$ docker-machine ls
NAME         ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default      -        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.0-ce   
Tensorflow   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.06.0-ce   
shawn@shawn-Aspire-E5-472G:~$

进入虚机环境

eval $(docker-machine env Tensorflow)

eval是个神奇的命令,貌似是类似于变量替换之类的,有空再研究研究。

docker images一下,发现没有已安装的images,这就对了。

或者用docker-machine ssh

shawn@shawn-Aspire-E5-472G:~$ docker-machine ssh Tensorflow
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 17.06.0-ce, build HEAD : 0672754 - Thu Jun 29 00:06:31 UTC 2017
Docker version 17.06.0-ce, build 02c1d87
docker@Tensorflow:~$

配置加速器

国内的网络。。。

Tensorflow虚拟环境里,配置加速器。

DaoCloud注册一个账号,点进加速器页面,会得到一句命令,我的是这样的

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ae307aa1.m.daocloud.io

在虚拟环境中运行一次,然后提示需要重启docker service

这时候退出虚拟环境,在外面执行docker-machine restart Tensorflow,重新进入,就可以准备安装Tensorflow了

安装Tensorflow

一步到位

docker run -it -p 8888:8888 tensorflow/tensorflow

由于有了Daocloud的CDN加速,下载安装过程会比较快。

配置Pycharm

配置环境

Docker Machine跑起来之后,到Pycharm中,Settings->Build, Excution,Deployment->Docker->Tools应该能看到docker-machine,然后在Docker中添加一个Docker,选择Docker Machine,下拉菜单中可以看到正在运行的Docker Machine

配置工程

Settings->Project->Project Interpreter,小齿轮添加一个Remote Interpreter(被我发现了原来Pycharm Community版本不能店家Remote Interpreter),选择Docker,后面就很容易了

非常漫长长长长长长长长长长长长长长长长长长长长长的等待之后,pycharm终于update好了环境,可以import了

配置共享文件

一共虚拟了三层

首先,利用VirtualBox安装的Docker Machine,因此本机和Docker之间需要共享文件,在Virtualbox里面设置共享文件即可,我把/home/shawn目录共享到virtualbox里面一样的目录

然后,每个Container相对于Docker machine可以说又是一层虚拟机,因此Container和Docker machine之间需要共享,这就是docker run里面的-v参数的作用了。其实在pycharm里面不用设置任何的共享目录,在Run configuration里面默认已经加好了参数。

这篇文章有提到pycharm在linux下有个bug,就是要自己手动设置虚拟机和主机的挂载,想必就是virtualbox那层吧