Docker-Ce 教程
Docker容器将软件及其依赖库安装到一个标准镜像中,其中包括软件运行时的所需要的 代码、运行时、系统工具和库等等。
这保证了我们的应用程序将始终运行在一个相同的环境下,并且与他人共享此镜像非常简单。
安装 Docker-CE
系统仓上的
docker.io
版本非常老了,版本号为 1.XXX。
而docker-ce
是版本号为 17.XXX or 18.XXX。
1 | :~$ sudo apt-get -y install apt-transport-https ca-certificates software-properties-common |
上面的代码,我们手动添加了清华大学Docker-CE镜像,因为它的下载速度快且问题少。
当然我们也可以手动添加其它版本的Docker-CE镜像源
1 | # 树莓派 |
给于普通用户控制 Docker 的权限
1 | :~$ sudo usermod -aG docker [user's name] |
上面的命令,将普通用户添加至 docker
组。
当我们退出用户并重新登录后,管理Docker时就不用再使用sudo
来提权了。
1 | :~$ docker image ls |
让 Docker 使用主机网络
众所周知,Docker的运行性能非常棒,与本机的速度差不多。
但Docker的网络性能相对主机差了不少。主要是由于Docker的网络层使用了虚拟网卡,多了一层 NAT 所引起的。
当然,一般的程序网络流量不太大,使用Docker默认的虚拟网卡上网并无多大影响,但当在Docker容器中运行网站或BT这种大流量服务时,虚拟网卡的缺陷就显现出来了。
解决此问题,我们只需要让Docker容器使用主机网络来进行通信即可。当然,这样做会使Docker的安全性有所下降,毕竟容器的网络堆栈没有与Docker主机隔离(该容器共享主机的网络名称空间),在容器中也可以获取到主机的网络信息。
例如,我们运行一个使用了主机网络并绑定80端口的容器,该容器的应用程序可能过主机IP地址的80端口进行访问。
注意:假设容器使用了主机网络,那么 Docker 的 端口映射 将不起作用,并且
-p
,--publish
,-P
和--publish-all
选项将被忽略,并产生一个警告:WARNING: Published ports are discarded when using host network mode.
使用
例子
使用nginx
容器绑定主机的80端口。
1 | # Method 1 |
--rm
: 当容器退出或停止时删除此容器。-d
: 在后台运行容器--network host
: 使用主机网络
使用Dockerhub的镜像服务器
在中国,从 Dockerhub 下载镜像时速度非常慢。所以这里我们使用 Dockerhub 的国内镜像来提高下载速度。
镜像名称 | 地址 |
---|---|
Azure | https://dockerhub.azk8s.cn |
Docker 官方 | https://registry.docker-cn.com |
163 | http://hub-mirror.c.163.com |
阿里云 (需要登录) | https://<your_code>.mirror.aliyuncs.com |
1 | :~$ sudo mkdir -p /etc/docker |
检测镜像设置是否生效:
1 | :~$ docker info |
Docker 镜像
ipsec_vpn_server
There are two services running: Libreswan (pluto) for the IPsec VPN, and xl2tpd for L2TP support.
The default IPsec configuration supports:
- IKEv1 with PSK and XAuth (“Cisco IPsec”)
- IPsec/L2TP with PSK
The ports that are exposed for this container to work are:
- 4500/udp and 500/udp for IPsec
Install
For use on Raspberry Pis (ARM architecture), you must first build this Docker image on your RPi using instructions from Build from source code, instead of pulling from Docker Hub.
- Build from source code
- if you want to modify the source code:
1
2
3
4:~$ git clone https://github.com/hwdsl2/docker-ipsec-vpn-server.git
:~$ cd docker-ipsec-vpn-server
....
:~$ sudo docker build -t hwdsl2/ipsec-vpn-server . - use this if not modifying the source code:
1
:~$ sudo docker build -t hwdsl2/ipsec-vpn-server github.com/hwdsl2/docker-ipsec-vpn-server.git
- in x86_64 architecture, install with Docker Hub
1
2
3:~$ sudo docker search ipsec-vpn-server
...
:~$ sudo docker pull hwdsl2/ipsec-vpn-server
ipsec-vpn-server 配置
Set Environment variables:
1 | :~$ nano ./vpn.env |
Note: In your env file,
DO NOT put “” or ‘’ around values, or add space around =. DO NOT use these special characters within values: \ “ ‘. A secure IPsec PSK should consist of at least 20 random characters.
run ipsec-vpn-server and configure
- run the image of docker, bind
vpn.env
to local file1
2
3
4
5
6
7
8
9:~$ sudo docker run \
--name ipsec-vpn-server \
-v "$(pwd)/vpn.env:/opt/src/vpn.env:ro" \
--restart=always \
-p 500:500/udp \
-p 4500:4500/udp \
-d --privileged \
hwdsl2/ipsec-vpn-server
# -v "local file:file in docker:file permission" - Bash shell inside container
1
2
3
4
5:~$ sudo docker exec -it ipsec-vpn-server env TERM=xterm bash -l
root@docker:~$ apt-get update && apt-get -y install nano
root@docker:~$ ...some other command
root@docker:~$ exit
:~$ sudo docker restart ipsec-vpn-server - Retrieve VPN login details
- show the vpn name,password,ipsec-preshare-key
1
:~$ sudo docker logs ipsec-vpn-server
- Check server status
1
:~$ sudo docker exec -it ipsec-vpn-server ipsec status
- display current established VPN connections
1
:~$ sudo docker exec -it ipsec-vpn-server ipsec whack --trafficstatus
- add, edit or remove VPN user accounts
- update your
env
file, - restart the Docker container
1
:~$ sudo docker restart ipsec-vpn-server
svn server image 镜像
具体查看 SVN Tutorial。
Transmisson-Daemon 镜像
具体查看 Transmission-Daemon。
KMS 服务镜像
查看 KMS Server
References:
Docker.com
Angles by @daydreamerro
docker-ipsec-vpn-server
docker-svn-server
docker-transmission-daemon
docker-kms