介绍几款 Docker 镜像

很文博客hinven.com 2021年12月6日08:23:10技术教程评论3617646字阅读模式

介绍几款 Docker 镜像

Docker(https://www.docker.com/) 是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
Docker 利用 Linux 核心中的资源分脱机制,例如 cgroups,以及 Linux 核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一 Linux 实体下运作,避免启动一个虚拟机造成的额外负担。
简单概括起来就是,Docker 是个容器,什么都能往里塞,你也可以理解为是一个轻量化的虚拟机。
使用 Docker 的好处就是对当前系统的环境没有破坏性,基本上一款镜像可以跑在任意包含了 Docker 的机器上,可以说是十分方便了。
本文主要介绍一下我在学习 Docker 的过程中制作的几款镜像,以及使用方法。

安装并启动 Docker

在以下操作系统里安装最新版 Docker,可以直接运行官方的安装脚本一键安装。

  1. x86_64-centos-7
  2. x86_64-fedora-26
  3. x86_64-fedora-27
  4. x86_64-fedora-28
  5. x86_64-debian-wheezy
  6. x86_64-debian-jessie
  7. x86_64-debian-stretch
  8. x86_64-debian-buster
  9. x86_64-ubuntu-trusty
  10. x86_64-ubuntu-xenial
  11. x86_64-ubuntu-bionic
  12. x86_64-ubuntu-artful

执行脚本方法如下:

  1. wget -qO- get.docker.com | bash

安装完成后,运行下面的命令,验证是否安装成功。

  1. docker version

启动 Docker

  1. systemctl start docker

查看 Docker 启动状态

  1. systemctl status docker

允许 Docker 开机自启

  1. systemctl enable docker

Shadowsocks-libev Docker Image

这是我第一款制作出来的 Docker 镜像,基于官方 debian:stretch 镜像制作,在引入 stretch-backports 后,直接利用 apt-get 安装好 shadowsocks-libev simple-obfs 即可。
该容器在启动时依赖于读取宿主机里的配置文件,因此在启动该镜像时配合不同的 config 文件,就能开启任意个 Docker ,也就是所谓的多端口。
把配置文件放在宿主机里,是基于这样的考量:随时在宿主机里修改配置的端口,密码,加密方式等信息,然后只需重启容器,无需再次创建新的容器。

支持的 Tags 及 Dockerfile

3.2.1, latest (Dockerfile(https://github.com/teddysun/shadowsocks_install/blob/master/docker/shadowsocks-libev/Dockerfile))

alpine (Dockerfile(https://github.com/teddysun/shadowsocks_install/blob/master/docker/shadowsocks-libev/alpine/Dockerfile))

拉取镜像

  1. docker pull teddysun/shadowsocks-libev

或者拉取以 alpine 镜像制作的,其特点就是文件容量非常小

  1. docker pull teddysun/shadowsocks-libev:alpine

创建 config 文件

比如在目录 /etc/shadowsocks-libev 下创建 config.json,完整路径也就是 /etc/shadowsocks-libev/config.json

范例内容如下:

  1. {
  2. "server":"0.0.0.0",
  3. "server_port":9000,
  4. "password":"password0",
  5. "timeout":300,
  6. "method":"aes-256-gcm",
  7. "fast_open":true,
  8. "nameserver":"8.8.8.8",
  9. "mode":"tcp_and_udp"
  10. }

如果你想同时开启 simple-obfs,那么配置文件范例如下:

  1. {
  2. "server":"0.0.0.0",
  3. "server_port":9000,
  4. "password":"password0",
  5. "timeout":300,
  6. "method":"aes-256-gcm",
  7. "fast_open":true,
  8. "nameserver":"8.8.8.8",
  9. "mode":"tcp_and_udp",
  10. "plugin":"obfs-server",
  11. "plugin_opts":"obfs=tls"
  12. }

配置文件里面所有选项的含义,可以参考这个链接(https://github.com/shadowsocks/shadowsocks-libev/blob/master/doc/shadowsocks-libev.asciidoc)。

启动容器

在上面这个范例里,定义的端口是 9000,那么在启动容器时就需要将 9000 端口映射到宿主机的对外端口上。

启动命令:

  1. docker run -d -p 9000:9000 -p 9000:9000/udp --name ss-libev -v /etc/shadowsocks-libev:/etc/shadowsocks-libev teddysun/shadowsocks-libev

docker run:开始运行一个容器。

-d 参数:容器以后台运行并输出容器 ID。

-p 参数:容器的 9000 端口映射到本机的 9000 端口。默认是映射 TCP,当需要映射 UDP 时,那就再追加一次 UDP 的映射。冒号后面是容器端口,冒号前面是宿主机端口,可以写成一致,也可以不一致。

–name 参数:给容器分配一个识别符,方便将来的启动,停止,删除等操作。

-v 参数:挂载卷(volume),冒号后面是容器的路径,冒号前面是宿主机的路径,可以写成一致,也可以不一致。

teddysun/shadowsocks-libev:这是拉取回来的镜像路径。

当然,这里也可以启动 Tag 为 alpine 的镜像命令:

  1. docker run -d -p 9000:9000 -p 9000:9000/udp --name ss-libev -v /etc/shadowsocks-libev:/etc/shadowsocks-libev teddysun/shadowsocks-libev:alpine

注意:此处仅作为演示,不能同时执行上面的这两个启动命令,因为端口都是 9000,产生冲突了。一般我是推荐选 Tag 为 alpine 的镜像的,因为文件的体积会相对比较小。

查看容器

利用如下命令可以查看所有已创建的 Docker 容器并显示容器的大小等信息:

  1. docker ps -as

停止容器

利用如下命令可以停止正在运行中的容器:

  1. docker stop $name

此处的 $name 就是在启动容器那一步定义的容器的识别符,比如范例的 ss-libev

启动容器

利用如下命令可以启动已经停止的容器:

  1. docker start $name

此处的 $name 就是在启动容器那一步定义的容器的识别符,比如范例的 ss-libev

ShadowsocksR Docker Image

这是我第二款制作出来的 Docker 镜像,基于官方 debian:stretch 镜像制作,安装的是 Github 上目前最新的版本(https://github.com/shadowsocksrr/shadowsocksr)。

该容器在启动时依赖于读取宿主机里的配置文件,因此在启动该镜像时配合不同的 config 文件,就能开启任意个 Docker ,也就是所谓的多端口。

把配置文件放在宿主机里,是基于这样的考量:随时在宿主机里修改配置的端口,密码,加密方式等信息,然后只需重启容器,无需再次创建新的容器。

支持的 Tags 及 Dockerfile

3.2.2, latest (Dockerfile(https://github.com/teddysun/shadowsocks_install/blob/master/docker/shadowsocks-r/Dockerfile))

alpine (Dockerfile(https://github.com/teddysun/shadowsocks_install/blob/master/docker/shadowsocks-r/alpine/Dockerfile))

拉取镜像

  1. docker pull teddysun/shadowsocks-r

或者拉取基于 python:3.6-alpine 镜像制作的

  1. docker pull teddysun/shadowsocks-r:alpine

创建 config 文件

比如在目录 /etc/shadowsocks-r 下创建 config.json,完整路径也就是 /etc/shadowsocks-r/config.json

范例内容如下:

  1. {
  2. "server":"0.0.0.0",
  3. "server_ipv6":"::",
  4. "server_port":9000,
  5. "local_address":"127.0.0.1",
  6. "local_port":1080,
  7. "password":"password0",
  8. "timeout":120,
  9. "method":"aes-256-cfb",
  10. "protocol":"origin",
  11. "protocol_param":"",
  12. "obfs":"plain",
  13. "obfs_param":"",
  14. "redirect":"",
  15. "dns_ipv6":false,
  16. "fast_open":true,
  17. "workers":1
  18. }

ShadowsocksR 协议插件文档的含义,可以参考这个链接(https://github.com/shadowsocksr-rm/shadowsocks-rss/blob/master/ssr.md)。

启动容器

在上面这个范例里,定义的端口是 9000,那么在启动容器时就需要将 9000 端口映射到宿主机的对外端口上。

启动命令:

  1. docker run -d -p 9000:9000 -p 9000:9000/udp --name ssr -v /etc/shadowsocks-r:/etc/shadowsocks-r teddysun/shadowsocks-r

启动 Tag 为 alpine 的镜像命令:

  1. docker run -d -p 9000:9000 -p 9000:9000/udp --name ssr -v /etc/shadowsocks-r:/etc/shadowsocks-r teddysun/shadowsocks-r:alpine

注意:此处仅作为演示,不能同时执行上面的这两个启动命令,因为端口都是 9000,产生冲突了。一般我是推荐选 Tag 为 alpine 的镜像的,因为文件的体积会相对比较小。

L2TP/IPsec VPN Server Docker Image

这是我第三款制作出来的 Docker 镜像,基于官方 debian:stretch 镜像制作,使用了最新版 libreswan-3.27 和 xl2tpd-1.3.12,支持 L2TP/IPsec PSK 和 IPSec Xauth PSK 两种连接方式。
2018 年 11 月 7 日更新:

1,基于 debian:stretch 镜像制作,使用了最新版 libreswan-3.27 和 xl2tpd-1.3.12;

2,基于 alpine:latest 镜像制作,使用了 alpine 自带的 libreswan-3.21 和 xl2tpd-1.3.10;

注意1:Android 版本小于或等于 7.0 时,建议选择 IPSec Xauth PSK (Cisco IPsec) 模式连接。如下图所示:

介绍几款 Docker 镜像

注意2:同一个 NAT 下多用户连接,请选择 IPSec Xauth PSK (Cisco IPsec) 模式连接。

该镜像在启动之前,需事先定义环境变量文件 /etc/l2tp.env,其内容具体参考以下的说明。
同时,该镜像具备自主管理用户的特点,一个简单命令即可增删改查用户账号。

支持的 Tags 及 Dockerfile

latest (Dockerfile(https://github.com/teddysun/across/blob/master/docker/l2tp/Dockerfile))

alpine (Dockerfile(https://github.com/teddysun/across/blob/master/docker/l2tp/alpine/Dockerfile))

拉取镜像

  1. docker pull teddysun/l2tp

 

  1. docker pull teddysun/l2tp:alpine

创建启动环境参数文件

比如是 /etc/l2tp.env,该文件内的各个变量定义如下:

  1. VPN_IPSEC_PSK=teddysun.com
  2. VPN_USER=vpnuser
  3. VPN_PASSWORD=vpnpassword
  4. VPN_PUBLIC_IP=
  5. VPN_L2TP_NET=
  6. VPN_L2TP_LOCAL=
  7. VPN_L2TP_REMOTE=
  8. VPN_XAUTH_NET=
  9. VPN_XAUTH_REMOTE=
  10. VPN_DNS1=
  11. VPN_DNS2=

VPN_IPSEC_PSK:预共享密钥

VPN_USER:默认的登录用户名

VPN_PASSWORD:默认的登录用户密码

VPN_PUBLIC_IP:指定公网 IP 地址,当你的 VPS 有多个公网 IP 时,可能需要手动指定一下

VPN_L2TP_NET:内网 L2TP 网段范围,默认为 192.168.18.0/24,一般此处留空即可

VPN_L2TP_LOCAL:内网 L2TP 网关 IP,默认为 192.168.18.1,一般此处留空即可

VPN_L2TP_REMOTE:内网 L2TP 网段分配给连接的 IP 段,默认为 192.168.18.10-192.168.18.250,一般此处留空即可

VPN_XAUTH_NET:内网 XAUTH 网段范围,默认为 192.168.20.0/24,一般此处留空即可

VPN_XAUTH_REMOTE:内网 XAUTH 网段分配给连接的 IP 段,默认为 192.168.20.10-192.168.20.250,一般此处留空即可

VPN_DNS1:默认 DNS 服务器,8.8.8.8,一般此处留空即可

VPN_DNS2:默认 DNS 服务器,8.8.4.4,一般此处留空即可

启动容器

在这个范例里,需要将 500 和 4500 端口的 UDP 映射到宿主机的对外端口上。

启动命令1:

  1. docker run -d --privileged -p 500:500/udp -p 4500:4500/udp --name l2tp --env-file /etc/l2tp.env -v /lib/modules:/lib/modules teddysun/l2tp

启动命令2:

  1. docker run -d --privileged -p 500:500/udp -p 4500:4500/udp --name l2tp --env-file /etc/l2tp.env -v /lib/modules:/lib/modules teddysun/l2tp:alpine

查看启动日志

  1. docker logs l2tp

此处的 l2tp,是指在启动时定义的容器识别符,–name 参数后的名字。

输出的日志参考如下:

  1. L2TP/IPsec VPN Server with the Username and Password is below:
  2. Server IP: Your Server public IP
  3. IPSec PSK: IPSec PSK (pre-shared key)
  4. Username : VPN username
  5. Password : VPN password
  6. Redirecting to: /etc/init.d/ipsec start
  7. Starting pluto IKE daemon for IPsec: Initializing NSS database
  8. xl2tpd[1]: Not looking for kernel SAref support.
  9. xl2tpd[1]: Using l2tp kernel support.
  10. xl2tpd[1]: xl2tpd version xl2tpd-1.3.12 started on 1d20eaecd9f2 PID:1
  11. xl2tpd[1]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
  12. xl2tpd[1]: Forked by Scott Balmos and David Stipp, (C) 2001
  13. xl2tpd[1]: Inherited by Jeff McAdams, (C) 2002
  14. xl2tpd[1]: Forked again by Xelerance (www.xelerance.com) (C) 2006-2016
  15. xl2tpd[1]: Listening on IP address 0.0.0.0, port 1701

当然,你也可以查看一下 ipsec status 命令的输出,命令如下:

  1. docker exec -it l2tp ipsec status

此处的 l2tp,是指在启动时定义的容器识别符,–name 参数后的名字。

管理 VPN 用户

列出全部用户及其密码

  1. docker exec -it l2tp l2tpctl -l

新增一个用户

  1. docker exec -it l2tp l2tpctl -a

删除一个用户

  1. docker exec -it l2tp l2tpctl -d

修改一个用户的密码

  1. docker exec -it l2tp l2tpctl -m

打印控制脚本 l2tpctl 的帮助信息

  1. docker exec -it l2tp l2tpctl -h

需要注意的是,容器一旦被删除重建,或者停止后重新启动,都会导致 VPN 用户信息的丢失,需要通过以上的命令再次创建。

Windows 10 下连接 L2TP VPN

首先,参考下图的设置,将 VPN 的连接信息稍微修改一下。

介绍几款 Docker 镜像

修改 VPN 属性,如图所示。

介绍几款 Docker 镜像

一般我们都是连接到家用路由器上的,也就是说,我们的网络一般都是处于 NAT 状态下,因此还需要改一下注册表,根据这个链接(https://support.microsoft.com/en-us/help/926179/how-to-configure-an-l2tp-ipsec-server-behind-a-nat-t-device-in-windows),修改注册表的信息,修改完成后,重启 Windows 即可。

参考链接

https://hub.docker.com/r/teddysun/shadowsocks-libev/

https://hub.docker.com/r/teddysun/shadowsocks-r/

https://hub.docker.com/r/teddysun/l2tp/

weinxin
扫一扫更精彩
大家的支持是我更新的动力!!!
Ctrl+C+V,快速安装ss和brook 技术教程

Ctrl+C+V,快速安装ss和brook

大部分人买VPS也不过就是当作学习服务器用,大部分就是自用,盈利开机场的,可以不看此文了。 如果是自用,几个人用,稳定应该才是第一位的,至于什么BBR,加速之类的,我自己的压根就没装,实在是没有必要。...
广告也精彩
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定