背景说明

PWD由于资源的限制有时候无法正确访问,可以自己本地部署供自己和相关人员使用。

官网地址

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

解决方案

环境安装

环境准备

本机已经事先安装了Docker和epel源

运行环境

  1. [root@vm1 ~]# yum install go
  2. [root@vm1 ~]# go version
  3. go version go1.16.13 linux/amd64
  4. [root@vm1 ~]#

依赖镜像

[root@vm1 ~]# go env -w GO111MODULE=on
[root@vm1 ~]# go env -w GOPROXY=https://goproxy.cn,direct
[root@vm1 ~]# go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/root/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/root/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn"
GOROOT="/usr/lib/golang"
GOSUMDB="off"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.16.13"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build3446745042=/tmp/go-build -gno-record-gcc-switches"
[root@vm1 ~]#

源码下载

[root@vm1 ~]# git clone https://github.com/play-with-docker/play-with-docker
Cloning into 'play-with-docker'...

如果无法通过克隆进行下载,也可以通过浏览器进行下载zip文件然后解压并改名为play-with-docker即可

环境安装

进入目录play-with-docker

[root@vm1 ~]# cd play-with-docker/
[root@vm1 play-with-docker]# ls
api.go  docker              Dockerfile     dockerfiles  go.mod  handlers  id        k8s      prometheus.yml  pwd        router     storage
config  docker-compose.yml  Dockerfile.l2  event        go.sum  haproxy   internal  LICENSE  provisioner     README.md  scheduler  vendor
[root@vm1 play-with-docker]#

加载内核模块

[root@vm1 play-with-docker]# modprobe xt_ipvs
[root@vm1 play-with-docker]#

初始化swarm

[root@vm1 play-with-docker]# docker swarm init

下载镜像

[root@vm1 play-with-docker]# docker pull franela/dind

安装依赖

[root@vm1 play-with-docker]# go mod vendor

安装docker compose

[root@vm1 ~]# yum install docker-compose
[root@vm1 ~]# docker-compose --version
docker-compose version 1.18.0, build 8dd22a9
[root@vm1 ~]#

服务运行

[root@vm1 play-with-docker]# docker-compose up

后台运行 docker-compose up -d

访问验证

如果当前机器安装了图形化界面直接通过浏览器访问http://localhost即可正常访问,如果没有图形化界面,则可以使用wget命令进行验证

[root@vm1 play-with-docker]# cd ../
[root@vm1 ~]# wget http://localhost
--2022-04-10 18:38:23--  http://localhost/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... failed: Connection refused.
Connecting to localhost (localhost)|127.0.0.1|:80... failed: Connection refused.
[root@vm1 ~]# ls
anaconda-ks.cfg index.html  play-with-docker
[root@vm1 ~]# cat index.html 

<!DOCTYPE html>
<html lang="en" ng-app="PWDLanding" ng-controller="LoginController">
  <head>
    <script src="https://unpkg.com/angular@1.6.6/angular.min.js"></script>
    <script src="https://unpkg.com/angular-cookies@1.6.6/angular-cookies.min.js"></script>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

此时不能通过机器的IP地址进行访问,只能通过localhost进行访问

高级配置

实例模板

由于云主机的性能资源有限,所以每次启动PWD,只提供了四个小时的在线实验时间,所以,当你的实验完成或者因为各种原因终止实验的时候,应当关闭当前终端,即点击左上角的橙色按钮“CLOSE SEESION”。此外,PWD还提供了预定义模板功能,可以用鼠标单击左侧的扳手icon,请注意,如果需要使用预定义模板功能,需要关闭当前 seesion 才可以正确启动。
模板功能提供了三个快速启动集群的选项:

  • 3 Managers and 2 Workers
  • 5 Managers and no Workers
  • 1 Manager and 1 Workers

image.png

主机配置

修改监听地址和域名,如果部署在VPS上需要把localhost修改为域名或IP,编辑文件api.go,在api.go文件的 config.ParseFlags()下面添加config.PlaygroundDomain = “YOU-IP or DOMAIN

config.PlaygroundDomain = "192.168.184.130"

如下图所示
image.png
启动服务

[root@vm1 play-with-docker]# docker-compose up 
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Starting l2 ... 
Starting haproxy ... 
Starting l2 ... done
Attaching to pwd, haproxy, l2
haproxy    | [NOTICE]   (1) : haproxy version is 2.5.0-f2e0833

打开浏览器进行访问
image.png
点击Start并新增实例
image.png

内外穿透

如果配置了内网穿透
image.png
则需要编辑文件api.go,在api.go文件的 config.ParseFlags()下面添加config.PlaygroundDomain = “穿透地址”
image.png
运行并访问

[root@vm1 play-with-docker]# docker-compose up 
WARNING: The Docker Engine you're using is running in swarm mode.

Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.

To deploy your application across the swarm, use `docker stack deploy`.

Starting l2 ... 
Starting haproxy ... 
Starting l2 ... done
Attaching to haproxy, pwd, l2
haproxy    | [NOTICE]   (1) : haproxy version is 2.5.0-f2e0833
haproxy    | [NOTICE]   (1) : path to executable is /usr/local/sbin/haproxy
haproxy    | [WARNING]  (1) : config : missing timeouts for frontend 'http-in'.

image.png
image.png

学习文档

开源地址:https://github.com/play-with-docker/play-with-docker.github.io
官网地址: http://training.play-with-docker.com/
image.png
image.png
安装步骤先下载文件,然后进入目录,执行

[root@vm1 ~]# unzip play-with-docker.github.io-master.zip 
Archive:  play-with-docker.github.io-master.zip
bbd428c78f6916bc6f70eaf4e3aa29417f69d8e6
   creating: play-with-docker.github.io-master/
[root@vm1 ~]# mv play-with-docker.github.io-master play-with-docker.github.io
[root@vm1 ~]# cd play-with-docker.github.io/
[root@vm1 play-with-docker.github.io]# docker run --rm --label=jekyll --volume=$(pwd):/srv/jekyll -it -p 4000:4000 jekyll/jekyll:3.2 jekyll serve
Configuration file: /srv/jekyll/_config.yml
            Source: /srv/jekyll
       Destination: /srv/jekyll/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
                    done in 4.987 seconds.
 Auto-regeneration: enabled for '/srv/jekyll'
Configuration file: /srv/jekyll/_config.yml
    Server address: http://0.0.0.0:4000/
  Server running... press ctrl-c to stop.

打开浏览器访问:http://192.168.184.130:4000/
image.png

文档参考

https://blog.k8s.li/play-with-docker.html
https://github.com/bingohuang/docker-labs
https://github.com/lean-soft/play-with-docker

[

](https://www.jianshu.com/p/4c618b4d222b)