Skip to content

Latest commit

 

History

History
 
 

docker

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

VNPY 的 Docker 镜像

author: @lamter and @crystalphi

关于Docker

  • Docker 是基于 Linux的一个服务。通过模拟了整个 Linux的系统文件,来实现沙盒,所以Docker不是虚拟机,更类似于在Linux中模拟WindowsWine
  • Linux系统下,模式下会使得Docker的容器与宿主共享网络端口,但是在Mac或者Windows中,该模式是容器与虚拟机中的Linux共享网络端口,而不是直接跟宿主Mac或者Windows共享端口。
  • Docker教程看这里。 常用命令示例:
docker build -t friendlyname .  # Create image using this directory's Dockerfile
docker run -p 4000:80 friendlyname  # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyname         # Same thing, but in detached mode
docker ps                                 # See a list of all running containers
docker stop <hash>                     # Gracefully stop the specified container
docker ps -a           # See a list of all containers, even the ones not running
docker kill <hash>                   # Force shutdown of the specified container
docker rm <hash>              # Remove the specified container from this machine
docker rm $(docker ps -a -q)           # Remove all containers from this machine
docker images -a                               # Show all images on this machine
docker rmi <imagename>            # Remove the specified image from this machine
docker rmi $(docker images -q)             # Remove all images from this machine
docker login             # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag  # Tag <image> for upload to registry
docker push username/repository:tag            # Upload tagged image to registry
docker run username/repository:tag                   # Run image from a registry

设计概述

  1. 使用 docker 镜像来提供基于 vnpy 的交易系统开发、测试、回测、实盘环境。

  2. 将策略打包到 docker 镜像中以便直接在生产环境部署。

镜像制作与实例运行

制作环境镜像

docker/目录下运行:

➜  user@master~/vnpy/docker: docker build -f Dockerfile --force-rm -t vnpy-vnc ..
...
Successfully built 26c00f8cf521

漫长的等待后之后,查看

➜  user@master~/vnpy/docker: docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED                  SIZE
vnpy                          latest              26c00f8cf521        Less than a second ago   3.02GB
hub.c.163.com/public/ubuntu   16.04-tools         1196ea15dad6        5 months ago             336MB

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

运行 Docker 实例

docker/目录下运行

➜  user@master~/vnpy/docker: bash run_vnc.sh
➜  在 MacOS 的 Finder 中按 Command-k 打开对话框,输入 vnc://127.0.0.1:5900 进行 VNC 连接。
or 
➜  user@master~/vnpy/docker: bash run_shell.sh
➜  root@docker /srv/vnpy: 进入镜像实例的命令行界面

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

重新编译接口库

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

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

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

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

启动基于 vnpy 的交易等程序

注意:需要先在vnpy/trader/gateway/ctpGateway/CTP_connect.json中配置正确的CTP链接账号及服务器信息。

尝试启动 vnpy 实例

➜  root@docker /srv/vnpy: python ./examples/VnTrader/run_simple.py
...
运行成功将在 VNC 界面上打开中文 GUI 程序,可正常连接 CTP 服务器及数据库。

Q&A

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