<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="Docker 实验环境:Play With Docker">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2023-11-01 19:45<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
Docker 实验环境:Play With Docker




免费学习 Docker 的最佳方法：Play-with-docker（PWD）


官网地址：http://play-with-docker.com/


k8s实验室(私人搭建)：https://labs.play-with-k8s.com/


GitHub：https://github.com/play-with-docker/play-with-docker


PWD 像是一个 Docker 游乐场，用户在几秒钟内就可以运行 Docker 命令。 还可以在浏览器中安装免费的 Alpine Linux 虚拟机，然后在虚拟机里面构建和运行 Docker 容器，甚至可以使用 Docker 集群模式创建集群。 有了 Docker-in-Docker（DinD）引擎，甚至可以体验到多个虚拟机/个人电脑的效果。 除了 Docker 游乐场外，PWD 还包括一个培训站点 training.play-with-docker.com，该站点提供大量的难度各异的 Docker 实验和测验。PWD: Docker在线沙盒模式（堪比微软sandbox）


1、 PWD Docker Machine 驱动和 SSH


随着 PWD 成功的成长，社区开始问他们是否可以使用 PWD 来运行自己的 Docker 研讨会和培训。 因此，对项目进行的第一次改进之一就是创建 PWD Docker Machine 驱动，从而用户可以通过自己喜爱的终端轻松创建管理 PWD 主机，包括使用 SSH 相关命令的选项。 


2、 支持文件在线编辑


最开始设计时，支持本地文件上传，随着发展成熟，此功能已移除，取而代之的是在线编辑功能，方便测试时直接修改Dockerfile 等文件。


3、 模板会话


除了文件编辑，PWD 还有一个功能，可以使用预定义的模板在几秒钟内启动 5 个节点的群集。


4、 一键使用 Docker 展示你的应用程序


PWD 附带的另一个很酷的功能是它的内嵌按钮，你可以在你的站点中使用它来设置 PWD 环境，并快速部署一个构建好的堆栈，另外还有一个 chrome 扩展 ，可以将 &ldquo;Try in PWD&rdquo; 按钮添加 DockerHub 最流行的镜像中。 




自己搭建 Play With Docker 服务




Play With Docker为您提供在云中拥有免费Alpine Linux虚拟机的体验。 您可以在其中构建和运行 Docker 容器，甚至可以创建具有 Docker 功能（如 Swarm 模式）的集群。DIND或Docker-in-Docker用于提供多个VM / PC的效果。


要求：


Docker版本：18.06.0+        Go（稳定版）


搭建教程：参考






XML/HTML代码


    # Clone this repo locally

    git clone https://github.com/play-with-docker/play-with-docker

    cd play-with-docker

     

    # Verify the Docker daemon is running

    docker run hello-world

     

    # Load the IPVS kernel module. Because swarms are created in dind,

    # the daemon won't load it automatically

    sudo modprobe xt_ipvs

     

    # Ensure the Docker daemon is running in swarm mode

    docker swarm init

     

    # Get the latest franela/dind image

    docker pull franela/dind

     

    # Optional (with go1.14): pre-fetch module requirements into vendor

    # so that no network requests are required within the containers.

    # The module cache is retained in the pwd and l2 containers so the

    # download is a one-off if you omit this step.

    go mod vendor

     

    # Start PWD as a container

    docker-compose up




现在导航到 http://localhost 并单击绿色的&ldquo;开始&rdquo;按钮 创建新会话，然后按&ldquo;添加新实例&rdquo;以启动新的终端实例。


每个会话有 5 个 Docker 操场的硬编码限制。4 小时后，会话将被删除。


注意：如果不是本机搭建，比如局域网或者vps搭建，就无法打开，因为默认解析是localhost，如需访问，需要修改配置文件。




设置文件在 play-with-docker/config/config.go 之中，需要修改以下配置：




XML/HTML代码


    flag.StringVar(&amp;PlaygroundDomain, &quot;playground-domain&quot;, &quot;localhost&quot;, &quot;Domain to use for the playground&quot;)  







可以看到 PWD这里可以设定要解析的网址就是 localhost，所以只要改变 pwd.example.com，就可以用这个网址址连上 PWD。




做完上面的设置，可以顺利启动 Docker 容器，但是想要连上特点 Port 会失败，因为他是用子网站的方式去连接 http://ip&lt;hyphen-ip&gt;-&lt;session_jd&gt;-&lt;port&gt;.direct.pwd.example.com，所以会遇到无法解析 DNS 的情況，可以在 DNS 的設定中把 pwd.example.com 和 *.pwd.example.com 都加入 A Record，才可以正常使用。


nginx反代设置（仅作参考）：




XML/HTML代码


    map $http_upgrade $connection_upgrade {  

        default upgrade;  

        ''      close;  

    }  

      

    server {  

        listen       80;  

        server_name  pwd.example.com *.pwd.example.com;  

      

        location / {  

            proxy_pass http://192.168.1.1:80;  

            proxy_set_header Upgrade $http_upgrade;  

            proxy_set_header Connection $connection_upgrade;  

            proxy_set_header Host $host;  

            proxy_cache_bypass $http_upgrade;  

        }  

      

        error_page   500 502 503 504  /50x.html;  

        location = /50x.html {  

            root   /usr/share/nginx/html;  

        }  

    }  




假设 PWD Server 跑在 192.168.1.1:80 上。






自测以上在alpine系统+docker环境完全没问题，在Debian系统会出现错误，这个跟系统环境有关，需要自己测试。


alpine安装过程如下：






XML/HTML代码


    docker安装（自己做的傻瓜安装包）：

    curl http://iii80.com/sh/docker.sh -o docker.sh &amp;&amp; chmod +x docker.sh &amp;&amp; bash docker.sh

    Play With Docker 环境安装：

    apk add go

    Play With Docker 安装：

    #拉取代码

    git clone https://github.com/play-with-docker/play-with-docker

    cd play-with-docker

    # 测试docker是否运行正常

    docker run hello-world

    # 加载ipvs模块

    sudo modprobe xt_ipvs

    # 初始化一个群集(Swarm)

    docker swarm init

    # 拉取 franela/dind 镜像（测试环境基础）

    docker pull franela/dind

    # 下载 go 语言组件

    go mod vendor

    # 启动 PWD 容器

    docker-compose up







记得在 docker-compose up 命令执行前修改 play-with-docker/config/config.go 中的 localhost 为自己的域名， 比如 lab.iii80.com ，然后在 dns 解析中，将 lab.iii80.com 和 *.lab.iii80.com 两个都解析到本地服务器ip，局域网就写局域网的ip ，vps 就写公网ip，就可以随便实验了。


以下是几个简单的实例：




XML/HTML代码


    docker run -d -p 8181:80 --restart=always baiyuetribe/oneindex   #演示oneindex搭建

    docker run -d -p 3001:3001 -v /opt/rrdata:/opt/work/store --name rrys baiyuetribe/rrshare   #人人影视

    docker run -t -p 10010:80 -v /opt/rrdata:/h5ai --name h5ai ilemonrain/h5ai:full  #在线播放视频

    下面命令可运行宝塔面板，本站做的mini版，可运行在4G小空间的服务器上，一分钟搭建，即可借用宝塔面板搭建任意web程序了。

    docker run -tid --name baota -p 80:80 -p 8888:8888 --restart always baiyuetribe/baota_mini

    麻雀虽小，五脏俱全，借用上面的命令就可以在线搭建网站了，非常方便。




更多好玩的自行开发。
</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
