…
|
||
---|---|---|
.. | ||
dockerTrader | ||
build_image.sh | ||
Dockerfile | ||
README.md | ||
run_shell.sh | ||
server_vnpy.sh |
VNPY 的 Docker 镜像
author:@lamter
关于Docker
Docker
是基于Linux
的一个服务。通过模拟了整个Linux
的系统文件,来实现沙盒,所以Docker
不是虚拟机,更类似于在Linux
中模拟Windows
的Wine
。- 在
Linux
中,Docker
可以直接运行在宿主中,而在Mac
和Windows
中,是通过VirtualBox
等先建立一个Linux
的虚拟机,然后再在这个虚拟机中运行Docker
。这样的话可能会有些许差异,比如--host
的与宿主共享网络的模式。- 在
Linux
系统下,模式下会使得Docker
的容器与宿主共享网络端口,但是在Mac
或者Windows
中,该模式是容器与虚拟机中的Linux
共享网络端口,而不是直接跟宿主Mac
或者Windows
共享端口。
制作环境镜像
制作环境镜像
在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
共享网络模式即可。在Mac
或Windows
下,需要在VT_setting.json
中设置mongoHost
时,指定其局域网中的IP
,而非localhost
。