vnpy/docker
2017-06-09 18:25:43 +08:00
..
dockerTrader
build_image.sh
Dockerfile update new pip source 2017-06-09 18:25:43 +08:00
README.md
run_shell.sh
server_vnpy.sh

VNPY 的 Docker 镜像

author:@lamter

关于Docker

  • Docker 是基于 Linux的一个服务。通过模拟了整个 Linux的系统文件,来实现沙盒,所以Docker不是虚拟机,更类似于在Linux中模拟WindowsWine
  • Linux中,Docker可以直接运行在宿主中,而在MacWindows中,是通过VirtualBox等先建立一个Linux的虚拟机,然后再在这个虚拟机中运行Docker。这样的话可能会有些许差异,比如--host的与宿主共享网络的模式。
  • Linux系统下,模式下会使得Docker的容器与宿主共享网络端口,但是在Mac或者Windows中,该模式是容器与虚拟机中的Linux共享网络端口,而不是直接跟宿主Mac或者Windows共享端口。
  1. 使用 docker 镜像来提供运行和编译环境。
  2. 将策略打包到 docker 镜像中以便直接在生产环境部署。
  3. Docker教程看这里
  4. Docker加速看这里

制作环境镜像

制作环境镜像

docker/目录下运行:

➜  user@master~/vnpy/docker: bash build_image.sh
...
Successfully built fb3ae4d5e0eb

漫长的等待后之后,查看

➜  user@master~/vnpy/docker: docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
vnpy                         latest              fb3ae4d5e0eb        21 minutes ago      856 MB
ubuntu                       16.04               4ca3a192ff2a        4 weeks ago         128.2 MB

vnpy 的运行环境镜像 vnpy:latest 制作成功。 ubuntu 镜像是用于构建 vnpy 镜像的上层镜像。之后可以使用 vnpy 镜像继续构建下层镜像,用于生产环境的部署。

测试运行

docker/目录下运行

➜  user@master~/vnpy/docker: bash run_shell.sh
➜  root@docker/: 进入镜像

只是使用 vnpy 镜像启动了一个容器,并使用了bash来进行交互。此时环境基本上跟使用命令行登陆一台Linux类似。

查看run_shell.sh脚本可知,已经将整个vnpy的项目路径映射到了容器内的/srv/vnpy路径。

尝试编译

由于是一个新的Linux环境,CTP之类的接口需要重新编译。

➜  root@docker/: cd /srv/vnpy/vn.ctp
➜  root@docker/: ./build.sh
...
[100%] Built target vnctpmd
...

编译完成后,通过Git可以看到新编译成的*.so之类的文件。需要注意的是,此时对/srv/vnpy路径下的改动,也会反映到宿主下的vnpy项目。

也就意味着当前项目下的CTP接口已经被镜像中的编译包替换了。

启动vnpy

vn.trader/ctpGateway/CTP_connection.json中配置CTP链接账号的服务器host。

尝试启动 vnpy 实例

➜  root@docker /: cd /srv/vnpy/vn.trader
➜  root@docker docker: python vtServer.py
...
vn.trader服务器已启动
请输入exit来关闭服务器

运行成功。

直接运行项目代码

目前由于未知的原因,直接在宿主中通过传递命令的方式(见vn.docker/server_vnpy.sh脚本)来直接启动服务,会使得服务阻塞。所以目前只能先通过run_shell.sh脚本进入容器交互中,再启动服务。

Q&A

Q: MongoDB无法链接 A:Linux系统下,无需特定端口映射-p 2014,直接使用--net=host共享网络模式即可。在MacWindows下,需要在VT_setting.json中设置mongoHost时,指定其局域网中的IP,而非localhost