Docker之利用Dockerfile创建ShadowSocks多用户版镜像,实现快速集群式部署

镜像获取
[root@docker-node01 ~]# docker search shadowsocksr_manyuser
NAME                           DESCRIPTION                  STARS     OFFICIAL   AUTOMATED
benyoo/shadowsocksr_manyuser   基于ShadowSocksR版的manyuser封装   0                   
[root@docker-node01 ~]# docker run -d --name=ShadowSocks \
-p 10000-10010:10000-10010 \
-p 10000-10010:10000-10010/udp \
-e MANYUSER=R \
-e MYSQL_HOST=1.2.3.4 \
-e MYSQL_PORT=3306 \
-e MYSQL_USER=mysqlroot \
-e MYSQL_DBNAME=shadowsocks \
-e MYSQL_PASSWORD=********* \
-e METHOD=rc4-md5 \
-e PROTOCOL=auth_simple \
-e OBFS=http_simple_compatible \
-e OBFS_PARAM="youku.com" \
benyoo/shadowsocksr_manyuser:latest
67d941fa8c96bc44a5fd5e3e49776928d66e45c58705f056500dd9f88caf3931
[root@docker-node01 ~]# docker ps -a
CONTAINER ID        IMAGE                                 COMMAND               CREATED             STATUS              PORTS                                                                                         NAMES
67d941fa8c96        benyoo/shadowsocksr_manyuser:latest   "/run.sh server.py"   7 seconds ago       Up 4 seconds        0.0.0.0:10000-10010->10000-10010/tcp, 0.0.0.0:10000-10010->10000-10010/udp, 10011-20000/tcp   ShadowSocks

 

镜像使用说明

 

变量名 默认参数 说明
MANYUSER 可用参数有:R|On
当参数是R的时候则使用ShadowSocksR模式的多用户版本,
否则用ShadowSocks原版的多用户模式。
MYSQL_HOST 当MANYUSER变量有参数时,才会启用。
数据库地址
MYSQL_PORT 当MANYUSER变量有参数时,才会启用。
数据库端口
MYSQL_USER 当MANYUSER变量有参数时,才会启用。
数据库用户名
MYSQL_DBNAME 当MANYUSER变量有参数时,才会启用。
数据库库名
MYSQL_PASSWORD 当MANYUSER变量有参数时,才会启用。
数据库密码
METHOD aes-256-cfb 可用选项有:
aes-256-cfb|aes-192-cfb|aes-128-cfb|chacha20|salsa20|rc4-md5
PROTOCOL origin 可用参数有:
origin|verify_simple|verify_deflate|auth_simple
OBFS http_simple_compatible 可用参数有:
plain|http_simple|http_simple_compatible
|tls_simple|tls_simple_compatible|random_head
|random_head_compatible
OBFS_PARAM
DNS_IPV6 false 可用参数有:false|true

 

FROM centos:6.7  MAINTAINER from www.dwhd.org by lookback (mondeolove@gmail.com)  RUN yum clean all && \ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-* && \ yum install -y m2crypto python-setuptools git curl iptables-devel && \ easy_install pip && pip install cymysql  RUN git clone -b manyuser https://github.com/breakwa11/shadowsocks.git #RUN git clone -b manyuser https://github.com/mengskysama/shadowsocks.git  ADD run.sh /run.sh RUN chmod +x /run.sh  EXPOSE 10000-20000  ENTRYPOINT ["/run.sh"]  CMD ["server.py"]
#!/bin/sh ######################################################################### # File Name: run.sh # Author: LookBack # Email: admin#dwhd.org # Version: # Created Time: 2015年11月18日 星期三 02时49分12秒 ######################################################################### PATH=/bin:/sbin:$PATH  set -e  if [ "${1:0:1}" = '-' ]; then     set -- python "$@" fi  if [ -n "$MANYUSER" ]; then         if [ -z "$MYSQL_PASSWORD" ]; then                 echo >&2 'error:  missing MYSQL_PASSWORD'                 echo >&2 '  Did you forget to add -e MYSQL_PASSWORD=... ?'                 exit 1         fi          if [ -z "$MYSQL_USER" ]; then                 echo >&2 'error:  missing MYSQL_USER'                 echo >&2 '  Did you forget to add -e MYSQL_USER=... ?'                 exit 1         fi          if [ -z "$MYSQL_PORT" ]; then                 echo >&2 'error:  missing MYSQL_PORT'                 echo >&2 '  Did you forget to add -e MYSQL_PORT=... ?'                 exit 1         fi          if [ -z "$MYSQL_HOST" ]; then                 echo >&2 'error:  missing MYSQL_HOST'                 echo >&2 '  Did you forget to add -e MYSQL_HOST=... ?'                 exit 1         fi          if [ -z "$MYSQL_DBNAME" ]; then                 echo >&2 'error:  missing MYSQL_DBNAME'                 echo >&2 '  Did you forget to add -e MYSQL_DBNAME=... ?'                 exit 1         fi          for i in $MYSQL_USER $MYSQL_PORT $MYSQL_HOST $MYSQL_DBNAME $MYSQL_PASSWORD; do                 if grep '@' <<<"$i" >/dev/null 2>&1; then                         echo >&2 "error:  missing -e $i"                         echo >&2 "  You can't special characters '@'"                         exit 1                 fi         done           sed -ri "s@^(MYSQL_HOST = ).*@\1'$MYSQL_HOST'@" /shadowsocks/Config.py         sed -ri "s@^(MYSQL_PORT = ).*@\1$MYSQL_PORT@" /shadowsocks/Config.py         sed -ri "s@^(MYSQL_USER = ).*@\1'$MYSQL_USER'@" /shadowsocks/Config.py         sed -ri "s@^(MYSQL_PASS = ).*@\1'$MYSQL_PASSWORD'@" /shadowsocks/Config.py         sed -ri "s@^(MYSQL_DB = ).*@\1'$MYSQL_DBNAME'@" /shadowsocks/Config.py else         echo >&2 'error:  missing MANYUSER'         echo >&2 '  Did you forget to add -e MANYUSER=... ?'         exit 1 fi  if [ "$MANYUSER" = "R" ]; then         if [ -z "$PROTOCOL" ]; then                 echo >&2 'error:  missing PROTOCOL'                 echo >&2 '  Did you forget to add -e PROTOCOL=... ?'                 exit 1         elif [[ ! "$PROTOCOL" =~ ^(origin|verify_simple|verify_deflate|auth_simple)$ ]]; then                 echo >&2 'error : missing PROTOCOL'                 echo >&2 '  You must be used -e PROTOCOL=[origin|verify_simple|verify_deflate|auth_simple]'                 exit 1         fi          if [ -z "$OBFS" ]; then                 echo >&2 'error:  missing OBFS'                 echo >&2 '  Did you forget to add -e OBFS=... ?'                 exit 1         elif [[ ! "$OBFS" =~ ^(plain|http_simple|http_simple_compatible|tls_simple|tls_simple_compatible|random_head|random_head_compatible)$ ]]; then                 echo >&2 'error:  missing OBFS'                 echo >&2 '  You must be used -e OBFS=[http_simple|plain|http_simple_compatible|tls_simple|tls_simple_compatible|random_head|random_head_compatible]'                 exit 1         fi          if [ -z "$OBFS_PARAM" ]; then                 echo >&2 'error:  missing OBFS_PARAM'                 echo >&2 '  Did you forget to add -e OBFS_PARAM=... ?'                 exit 1         fi          if [ -n "$METHOD" ]; then                 if [[ ! "$METHOD" =~ ^(aes-(256|192|128)-cfb|(chacha|salsa)20|rc4-md5)$ ]]; then                         echo >&2 'error:  missing METHOD'                         echo >&2 '  You must be used -e METHOD=[aes-256-cfb|aes-192-cfb|aes-128-cfb|chacha20|salsa20|rc4-md5]'                         exit 1                 else                         sed -ri "s@^(.*\"method\": ).*@\1\"$METHOD\",@" /shadowsocks/config.json                 fi         fi          if [ -n "$DNS_IPV6" ]; then                 if [[ ! "$DNS_IPV6" =~ ^(false|true)$ ]]; then                         echo >&2 'error:  missing DNS_IPV6'                         echo >&2 '  You must be used -e DNS_IPV6=[false|true]'                         exit 1                 else                         sed -ri "s@^(.*\"dns_ipv6\": ).*@\1\"$DNS_IPV6\",@" /shadowsocks/config.json                 fi         fi          sed -ri "s@^(.*\"protocol\": ).*@\1\"$PROTOCOL\",@" /shadowsocks/config.json         sed -ri "s@^(.*\"obfs\": ).*@\1\"$OBFS\",@" /shadowsocks/config.json         sed -ri "s@^(.*\"obfs_param\": ).*@\1\"$OBFS_PARAM\",@" /shadowsocks/config.json  fi  if [ -n "$SPAM" ]; then         if [ "$SPAM" = "On" ]; then                 iptables -t mangle -A OUTPUT -m string --string "Subject" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "HELO" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "SMTP" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "torrent" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string ".torrent" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "peer_id=" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "announce" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "info_hash" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "get_peers" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "find_node" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "BitTorrent" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "announce_peer" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "BitTorrent" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "protocol" --algo bm --to 65535 -j DROP                 iptables -t mangle -A OUTPUT -m string --string "announce.php?passkey=" --algo bm --to 65535 -j DROP                 iptables -t filter -A OUTPUT -p tcp -m multiport --dports 25,26,465 -m state --state NEW,ESTABLISHED -j REJECT --reject-with icmp-port-unreachable                 iptables -t filter -A OUTPUT -p tcp -m multiport --dports 109,110,995 -m state --state NEW,ESTABLISHED -j REJECT --reject-with icmp-port-unreachable                 iptables -t filter -A OUTPUT -p tcp -m multiport --dports 143,218,220,993 -m state --state NEW,ESTABLISHED -j REJECT --reject-with icmp-port-unreachable                 iptables -t filter -A OUTPUT -p tcp -m multiport --dports 24,50,57,105,106,158,209,587,1109,24554,60177,60179 -m state --state NEW,ESTABLISHED -j REJECT --reject-with icmp-port-unreachable                 iptables -t mangle -L -nvx --lin                 iptables -t filter -L -nvx --lin         fi else         echo >&2 'error:  missing SPAM'         echo >&2 '  You must be used -e SPAM=[On|Off]' fi  exec python /shadowsocks/server.py

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 变量
参数
,以便于您获取更多的相关知识。

时间: 2024-09-23 22:01:46

Docker之利用Dockerfile创建ShadowSocks多用户版镜像,实现快速集群式部署的相关文章

Docker之利用Dockerfile创建Nginx镜像

镜像获取方法 1.使用Dockerfile创建 wget -O- http://www.dwhd.org/wp-content/uploads/2015/11/Dockerfile1 >Dockerfile wget -O- http://www.dwhd.org/wp-content/uploads/2015/11/nginx.conf >nginx.conf wget -O- http://www.dwhd.org/wp-content/uploads/2015/11/run.sh1 &g

Docker之利用 Dockerfile构建 Redis 服务的教程

Dockerfile   ENV REDIS_VERSION=3.2.1 ENV REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-${REDIS_VERSION}.tar.gz \         REDIS_DOWNLOAD_SHA1=26c0fc282369121b4e278523fce122910b65fbbf   RUN \         REDIS_FILE=${REDIS_DOWNLOAD_URL##*/} &&a

Docker使用Dockerfile创建支持ssh服务自启动的容器镜像_docker

本文实例为大家分享了Dockerfile创建支持ssh服务自启动的容器镜像,供大家参考,具体内容如下 1. 首先创建一个Dockerfile文件,文件内容如下 # 选择一个已有的os镜像作为基础 FROM centos:centos6 # 镜像的作者 MAINTAINER Fanbin Kong "kongxx@hotmail.com" # 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no RUN yum install -y openssh

详解使用Dockerfile创建带Apache服务的CentOS Docker镜像_docker

使用Dockerfile创建带Apache服务的CentOS Docker镜像 在宿主机上准备的文件清单: Dockerfile #启动ssh和apache服务的角本 run.sh 以上文件都放到/root/apache_centos目录下 mkdir -p /root/apache_centos cd /root/apache_centos 基础镜像:以镜像centos为基础的开放SSH服务的镜像 [root@localhost apache_centos]# docker images RE

Centos 7.x 利用 Dockerfile 来创建Beego Framework

Dockerfile包含创建镜像所需要的全部指令.基于在Dockerfile中的指令,我们可以使用Docker build命令来创建镜像.通过减少镜像和容器的创建过程来简化部署 Dockerfile 基本的语法是 使用#来注释 FROM 指令告诉 Docker 使用哪个镜像作为基础,这里我从自己的私有镜像库获取 MAINTAINER:设置该镜像的作者 RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 yum 来安装了一些软件,在shell或者exec的环境下执行的命令.RUN指令会

Docker for Devs:创建开发镜像

本文讲的是Docker for Devs:创建开发镜像[编者的话]本文介绍如何利用Docker本地化卷来搭建开发环境. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.Kubernetes Storage机制.容器网络实现原理和模型.Docker网络实现.网络插件.Calico.Contiv Netplugin.开源企业级镜像仓库Harbor原理及

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——第2章 搭建容器运行时环境 2.1标准Linux系统的Docker配置

第2章 搭建容器运行时环境 自构建之初,Docker就运行在Linux之上.但与虚拟机不同,虚拟机包含了整个操作系统,而容器本身只是依靠单独的操作系统为其提供运行环境.这就是说,我们有诸多可选的方式来创建Docker的工作环境.具体方式包括以下这些. 标准Linux:多个主要的Linux发行版已将Docker打包在其中.如需最新的Docker特性,只要安装相应Linux发行版的最新版本即可.切记,Docker与操作系统有着密切的联系,因此,Linux的早期版本可能并不包含Docker运行所需的全

《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——1.2 了解容器的组成

1.2 了解容器的组成 Docker是Docker项目开发的一种容器格式.docker命令能够运行.停止.启动.调查容器,还能操纵容器.docker命令也可以作为服务守护进程运行,处理管理Docker容器的请求.默认情况下,这个Docker服务会从Docker Hub Registry获取你请求的镜像.虽然你无需知道更多就可以开始使用,但接下来会依次给出一些额外的信息. 1.2.1 Docker项目 Docker项目为Docker开发提供了一个中心.它将Docker称为"一个针对分布式应用开发者

ShadowSocks多用户管理系统搭建(moeSS+manyuser)步骤详解

之前有分享<Shadowsocks一键安装脚本(CentOS6,7.Ubuntu.Debian)>,适合单用户个人用.如果你的手上有多个墙外vps可以搭建一个Shadowsocks分享平台.前端面板(moeSS,建议使用ssl加密)和后端(shadowsocks-manyuser),教程如下: 1. Shadowsocks多用户前端moeSS安装环境:CentOS-6.6-x86_64-minimal.iso PHP环境配置 安装lnmp环境(必须安装Nginx.MySQL.PHP5.4+),