本文假设你的系统里面 docker-engine 已经装好,具体安装过程请参考这一篇:Docker安装备忘。
下面仍然以 shadowsocks-go 为例,看怎么写 Dockerfile 来快速构建运行环境。
- Dockerfile 必须从 FROM 开始,表示基于的镜像名称,本例中为构建 golang 的安装依赖。
- RUN 指令指明了在当前镜像上执行指令,并提交为新的镜像;ENV 指令则用于设置镜像的环境变量。上面做的事情就其实很简单了:安装编译 go 必须的基础依赖 ➙ 设置 go 环境变量➙ 下载解压 ➙ 设定
GOPATH
。
- WORKDIR 指令为其他指令指定工作目录,COPY 指令会把本机文件(夹)拷贝到镜像指定位置,这里做的事情就是把工作目录切换到
GOPATH
,并拷贝 go-wrapper
脚本到 /usr/local/bin
目录下。
- 运行 go get 获取 shadowsocks-server。
𝟚 构建镜像
Dockerfile 写好以后,就可以 build 它了,假设 Dockerfile 放在目录 ssgo 下:
构建成功以后,看一下:
给你新构建的镜像打一个 tag:
下面就可以检查一下镜像里面的 go 是否正常了:
go 正常了,那么通过 go get 安装的 shadowsocks-server 也应该是正常的:
正常登录以后,就可以
等它推送成功就可以了。
𝟜 在 VPS 上启用基于 docker 的 shadowsocks-server
上面三步都可以在本机操作,server 则必然在 vps 上启动的:
成功以后,用 docker 启动 shadowsocks-server:
在这里一定要注意这一点: docker run -p 参数指定容器的端口映射。
这条命令可以拆开成两部分看:
- shadowsocks-server -d -k {your_ss_server_passwd} -m aes-128-cfb -p 8089
- docker run -p 8089:8089 zturn/ssgo {docker_container_env_cmd}
命令 1 中是指明了在 docker 容器里面使用 shadowsocks-server 在容器内端口 8089 提供服务;
命令 2 则是告诉 docker 在运行时,将容器的8089端口映射到本机实际的8089端口对外提供服务
这些都做好以后,你的 shadowsocks client 就可以通过连接你的这个 vps_ip:8089 来进行安全上网了。
我的这个镜像已经放到了 DockerHub 上(zturn/ssgo),有兴趣的朋友可以自行尝试 :)