vnpy/docker/README.md
2017-05-05 23:24:39 +08:00

83 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VNPY 的 Docker 镜像
author:[@lamter](https://github.com/lamter)
> _关于Docker_
> - _`Docker` 是基于 `Linux`的一个服务。通过模拟了整个 `Linux`的系统文件,来实现沙盒,所以`Docker`不是虚拟机,更类似于在`Linux`中模拟`Windows`的`Wine`。_
> - _在`Linux`中,`Docker`可以直接运行在宿主中,而在`Mac`和`Windows`中,是通过`VirtualBox`等先建立一个`Linux`的虚拟机,然后再在这个虚拟机中运行`Docker`。这样的话可能会有些许差异,比如`--host`的与宿主共享网络的模式。_
> - _在`Linux`系统下,模式下会使得`Docker`的容器与宿主共享网络端口,但是在`Mac`或者`Windows`中,该模式是容器与虚拟机中的`Linux`共享网络端口,而不是直接跟宿主`Mac`或者`Windows`共享端口。_
1. 使用 docker 镜像来提供运行和编译环境。
2. 将策略打包到 docker 镜像中以便直接在生产环境部署。
3. Docker教程看[这里](https://yeasy.gitbooks.io/docker_practice/content/)。
4. Docker加速看[这里](https://www.daocloud.io/mirror#accelerator-doc)
## 制作环境镜像
### 制作环境镜像
在`docker/`目录下运行:
```bash
➜ user@master~/vnpy/docker: bash build_image.sh
...
Successfully built fb3ae4d5e0eb
```
漫长的等待后之后,查看
```bash
➜ 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/`目录下运行
```bash
➜ user@master~/vnpy/docker: bash run_shell.sh
➜ root@docker/: 进入镜像
```
只是使用 `vnpy` 镜像启动了一个容器,并使用了`bash`来进行交互。此时环境基本上跟使用命令行登陆一台`Linux`类似。
查看`run_shell.sh`脚本可知,已经将整个`vnpy`的项目路径映射到了容器内的`/srv/vnpy`路径。
### 尝试编译
由于是一个新的```Linux```环境,```CTP```之类的接口需要重新编译。
```bash
➜ 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 实例
```bash
➜ 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`。