docker_skynet环境搭建

skynet:https://github.com/cloudwu/skynet


制作skynet环境镜像

  1. 编写 docker-compose.yml 文件

    1
    $ root@ubuntu:~# docker run --name skynet -it my_base_ubuntu:16.04 bash
  2. 安装所需要的包

    1. git

      1
      2
      $ sudo apt-get install git
      $ sudo apt-get install git-core
    2. autoconf

      1
      $ sudo apt-get install autoconf
    3. readline

      1
      $ sudo apt-get install libreadline6-dev
    4. gcc

      1
      $ sudo apt-get install build-essential
  3. 安装skynet

    1
    2
    3
    $ git clone https://github.com/cloudwu/skynet.git skynet
    $ cd skynet
    $ make 'Linux'
  4. 测试

    1. 启动 skynet 服务

      1
      2
      3
      4
      5
      6
      root@b5ee6be603db:/skyet_app# ./skynet examples/config
      [:01000001] LAUNCH logger
      [:01000002] LAUNCH snlua bootstrap
      [:01000003] LAUNCH snlua launcher
      [:01000004] LAUNCH snlua cmaster
      [:01000004] master listen socket 0.0.0.0:2013
    2. 客户端 测试

      1
      root@b5ee6be603db:/skyet_app# ./3rd/lua/lua examples/client.lua
  5. ctrl + c 退出 skynet 服务,清理相关垃圾

    1
    2
    3
    $ apt-get clean
    $ apt-get auto-clean
    $ rm -fr skynet

提交保存镜像

  • 退出容器,停止服务,提交保存为镜像

    1
    2
    $ docker stop skynet
    $ docker commit skynet my_skynet

启动新镜像

  1. 挂载 skynet 目录到容器中
1
2
3
4
5
6
7
8
9
$make -p /root/a_skynet/skynet_offical # skynet 的仓库 clone 到这个文件夹
$ git clone git@github.com:cloudwu/skynet.git /root/a_skynet/skynet_offical

$ docker run \
-it \
--name skynet \
-v /root/a_skynet/skynet_offical:/skyet_app \
my_skynet:16.04 \
bash
  • docker-compose.yml 方式启动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    version: '2'
    services:
    skynet_env:
    image: my_skynet:16.04
    container_name: skynet
    tty: true
    ports:
    - '8010:8010'
    entrypoint: /bin/bash
    volumes:
    - /root/a_skynet/skynet_offical:/skyet_app
  1. 进入容器编译skynet

    1
    2
    $ cd /skynet_app
    $ make linux

连接 redis

  1. 启动 redis
1
2
3
4
5
6
7
8
$ mkdir -p /opt/redis/data

$ docker run -d \
--name redis_server \
-p 7379:6379 \
-v /opt/redis/data:/data \
redis \
redis-server --appendonly yes
  1. 启动 skynet,连接 redis 容器
1
2
3
4
5
6
7
$ docker run \
-it \
--name skynet \
-v /root/a_skynet/skynet_offical:/skyet_app \
--link redis_server:redis_db \
my_skynet:16.04 \
bash
  1. 测试是否连接成功

    1. 使用 skynet 中测试用例 testredis2.lua ,在启动脚本中增加这个服务

      1
      skynet.newservice("testredis2")
    2. 修改 testredis2.lua 中的 redis 连接配置

      1
      2
      3
      4
      5
      6
      db = redis.connect {
      host = "redis_db", -- 这里是 link redis 的 alias
      port = 6379, -- redis 容器的 端口
      db = 0,
      -- auth = "foobared"
      }
    3. 启动skynet,testredis2.lua 测试脚本会插入数据到 redis 数据库中,用 redis 客户端练上去看是否插入成功。

      • 这里同样使用 redis 镜像启动 redis 客户端服务

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        wilker@ubuntu:~$ docker run -it \
        > --name redis_client \
        > --link redis_server:redis \
        > --rm=true \
        > redis \
        > redis-cli -h redis -p 6379
        redis:6379> HGETALL test1
        1) "key1"
        2) "value1"
        3) "key2"
        4) "value2"
        5) "key3"
        6) "value3"
        ...
        redis:6379>

        数据成功插入,ok,done!


参考资料