【docker综合篇】关于我用docker搭建了6个应用服务的事

server/2024/9/22 21:15:04/

最近一直在捣鼓docker,利用测试服务器,本着犯错就重来(重装系统)的大无畏精神,不断尝试,总结经验,然后在网上搜寻一些关于docker有关的服务镜像,并搭建起来。看着一个个服务在我的服务器跑起来,那种成功的喜悦真是一件值得让人高兴的事。总结一下,我成功运行的docker镜像服务觉得不错的有dnmp,kaillinux,Lsky Pro,shipyard,ollama,ward,vocechat,下面就跟随我一起来了解这些服务吧。

目录

1.前言温故知新 

docker%E9%95%9C%E5%83%8F%E6%BA%90-toc" style="margin-left:40px;">2.docker镜像源

3.6大应用服务

3.1 DNMP集成web

3.2 Docker容器管理shipyard

3.3 Lsky Pro图床

3.4 服务器监控ward

3.5 聊天应用VoceChat

3.6 ollama大模型   

4.从零开始实操篇

 4.1 安装dnmp

4.2 大模型ollama

docker%E5%8F%AF%E8%A7%86%E5%8C%96shipyard-toc" style="margin-left:80px;">4.3 docker可视化shipyard

4.4 Ward、Lsky Pro、VoceChat

5.总结畅想


1.前言温故知新 

        关于docker,我接触的不多,从lz的历史博客中也能看出来,最初的接触也是因为搭建一个自己的php+nginx的web服务,所以,一切故事的开始就要从这个web服务dnmp说起了。

DNMP:基于docker搭建集成LNMP(nginx+mysql+php)-CSDN博客

玩转Docker:Lsky pro图床+私有化部署大模型(Ollama+Openwebui)-CSDN博客

        所谓的dnmp,就是docker+nginx+mysql+php的集成环境,前面两篇博客已经做了汇总了。并且为了方便,lz还做了一键集成脚本。 通过 bash dnmp.sh 运行脚本,这里是基于lz的服务器系统为Ubuntu 22.04.4。会在当前目录下生成一个dnmp目录(tips:记住这个dnmp目录,里面有一个配置文件很关键,后面会用到)

相当于安装了dockerdocker-compose,git,并构建了对应的dnmp容器

不出意外的话,当你访问 http://IP地址 就能看到提示dnmp安装成功的页面。

dnmp.sh

#!/bin/bash
#wget http://114.116.118.165/dnmp.sh && bash dnmp.sh
# 定义颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # 无颜色# 第一步:安装 Docker、Docker Compose 和 Git
function install_tools() {echo "开始安装 Docker、Docker Compose 和 Git..."# 更新软件包列表sudo apt update# 安装 Dockerif ! sudo apt install -y docker.io; thenecho -e "${RED}Docker 安装失败,请检查错误并重试。${NC}"exit 1fi# 安装 Docker Composeif ! curl -K -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; thenecho -e "${RED}Docker Compose 下载失败,请检查错误并重试。${NC}"exit 1fiif ! sudo chmod +x /usr/local/bin/docker-compose; thenecho -e "${RED}Docker Compose 权限修改失败,请检查错误并重试。${NC}"exit 1fi# 安装 Gitif ! sudo apt install -y git; thenecho -e "${RED}Git 安装失败,请检查错误并重试。${NC}"exit 1fiecho -e "${GREEN}Docker、Docker Compose 和 Git 安装完成。${NC}"
}# 第二步:通过 Git 克隆 DNMP 项目
function clone_dnmp() {echo "开始克隆 DNMP 项目..."if ! git clone https://gitee.com/yeszao/dnmp.git; thenecho -e "${RED}Git 克隆失败,请检查错误并重试。${NC}"exit 1fiecho -e "${GREEN}DNMP 项目克隆成功。${NC}"
}# 第三步:复制配置文件并进入项目目录
function setup_dnmp() {echo "开始设置 DNMP 项目..."dnmp_dir="dnmp"  # 假设 dnmp 目录相对于当前脚本的路径# 确保 dnmp 目录存在if [ ! -d "$dnmp_dir" ]; thenecho "dnmp 目录不存在: $dnmp_dir"exit 1fi# 进入 dnmp 目录并执行命令(cd "$dnmp_dir" && {# 复制环境变量文件if ! cp env.sample .env; thenecho -e "${RED}复制 env.sample 失败,请检查错误并重试。${NC}"exit 1fi# 复制 docker-compose 配置文件if ! cp docker-compose.sample.yml docker-compose.yml; thenecho -e "${RED}复制 docker-compose.sample.yml 失败,请检查错误并重试。${NC}"exit 1fi# 启动 docker-composeif ! docker-compose up -d; thenecho -e "${RED}docker-compose up 失败,请检查错误并重试。${NC}"exit 1fiecho -e "${GREEN}DNMP 项目设置完成,docker-compose 启动成功。${NC}"}) || {echo "在 dnmp 目录中执行命令失败"exit 1}
}# 主函数,按顺序执行上述步骤
function main() {install_toolsclone_dnmpsetup_dnmpecho "所有操作已完成,DNMP集成环境搭建并启动成功!"
}# 执行主函数
main

当然,什么事都不是一帆风顺的,在运行这个脚本命令的过程中,你可能会遇到问题:

这个脚本命令大概的运行流程就是:

安装docker——> 安装docker-compose——>安装git——>git克隆dnmp代码——>cd dnmp代码目录——>复制docker-compose文件——>开始docker-compose up构建并运行容器

        如果前面三步都进行不下去,可能是因为你的系统是centos的,命令不支持;ssl 握手失败;连接超时失败;谁知道呢!这里你就要想其他办法去安装了。

        如果前面三步顺利的情况下,你的服务器是国内的服务器,在进行docker-compse up时大概率可能会出现拉取镜像超时的问题。因为国内的docker很多被禁了,所以这里要找到能用的镜像源进行配置才行。

docker%E9%95%9C%E5%83%8F%E6%BA%90">2.docker镜像源

        国内的很多大厂镜像源基本都无法访问了,有的就算能访问,但是镜像也不全,在进行docker pull时可能会出现镜像不存在的问题。

关于这个,大致有两种解决办法:

1.找对应服务器商提供的镜像加速地址

2.寻找第三方可用镜像源地址

再不行,就网上找吧,总有能用的。这里以lz的镜像源配置为例:

服务器版本配置:华为云 Ubuntu 22.04.4 LTS 2H4G 100GB (华为测试,一核更比六核强) 

vi /etc/docker/daemon.json

没有daemon.json文件,就手动创建 touch daemon.json

{"registry-mirrors": ["https://2cc2e98fbd5b4ca482a3faf3884425e2.mirror.swr.myhuaweicloud.com","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu"]
}

然后使用 systemctl restart docker命令重启Docker即可。然后使用docker info命令查看镜像仓库信息,如果出现你所配置的源地址,就说明成功了。之后可以继续去执行脚本命令bash dnmp.sh去构建了。

        还有一个问题,就是在利用apt下载docke和git时,可能会很慢,这就是apt源的问题,也要进行更换。配置文件地址在:/etc/apt/sources.list

清华大学开源软件镜像站

阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区

网易镜像开源Ubuntu镜像使用帮助

中科大开源镜像站

找到你服务器对应的版本,配置之后,执行apt update 更新下即可。

#更新本地包索引:
sudo apt update#升级已安装的软件包:
sudo apt upgrade清理本地存储的已删除软件包的存档:
sudo apt autoremove清理下载的软件包缓存:
sudo apt clean

3.6大应用服务

        前面的DNMP服务已经讲了,接下来下面说一下lz为什么要选择这几个应用服务,明明有那么多镜像。lz选择这几个自然有他的道理。下面会大致介绍并给出应用服务展示效果。

3.1 DNMP集成web

        一个web站点离不开web服务器,更离不开数据库,再考虑到支持它的开发语言运行环境,还有ssl证书配置,Redis数据缓存等等各种服务,更遑论他们之间要产生关联的配置。试问让你一个个安装,你就不会出错吗?不会?那好,当我没说,你直接跳过看下一个吧。

        而DNMP一键集成Docker+php多版本控制+nginx+mysql多版本+ssl+Redis配置。我只能说很香

3.2 Docker容器管理shipyard

        shipyard是一个开源的docker管理平台,shipyard主要是把多个 Docker host上的 containers 统一管理(支持跨越多个host)意思就是可以做集群化管理,Shipyard是在Docker Swarm实现对容器、镜像、docker集群、仓库、节点进行管理的web系统。界面简洁友好,缺点是涉及的镜像服务有点多,不像其他的几个docker容器管理可视化,安装一个镜像就够了。

3.3 Lsky Pro图床

        Lsky Pro(也称:兰空图床),是一个基于PHP 8.0+和Laravel框架开发的云端相册程序。它允许用户上传、管理和分享图片,并提供了多种强大的功能。Lsky Pro支持多种第三方云储存服务,如AWS S3、阿里云OSS、腾讯云COS等,还提供了图片审核、水印、分享、商业化等多种功能。用户可以根据自己的需求选择开源版或付费版,享受简单且实用的图片管理体验。

 

3.4 服务器监控ward

        Ward是一个简单而优雅的解决方案,用于实时查看服务器的关键信息。它以适应性设计系统为特色,支持黑暗模式,让你的监控面板充满现代感。非常轻量,就一个web页面,能实时监控CPU,内存和存储使用状态。

3.5 聊天应用VoceChat

        VoceChat 是一款支持独立部署的个人云社交媒体聊天服务。15MB 的大小可部署在任何的服务器上,部署简单,很少需要维护。前端可以内嵌到自己的网站下,作为网页装饰提供客服咨询应用场景,数据完全由用户自己掌握,传输过程加密。支持创建聊天频道,添加好友私聊等功能。

3.6 ollama大模型   

        ollama是一款可以使用本地的大型语言模型。启动并运行大型语言模型。运行Llama 2、Code Llama和其他模型。自定义并创建您自己的模型,一般配合Openwebui可视化一起使用。支持多种模型库选择,包括并不局限以下几种:

(ollama run gemma)安装谷歌gemma大模型

 (ollama run llama2)安装Meta llama2大模型

  (ollama run qwen)安装阿里的qwen大模型

缺点是比较吃内存,要运行以上几种大模型,最好确保你本地服务器内存8G以上,当然,也可以选择小一点的模型,lz的服务器2G内存,运行的模型时ollama run qwen2:0.5b 就是感觉不太聪明的样子

4.从零开始实操篇

       这里从头到尾实操一下,lz买的是华为云的测试服务器:华为云 Ubuntu 22.04.4 LTS 2H4G 100GB。因为也只有这个配置才能带的动6个应用服务啊。当然,在座的各位按需安装即可。因为我是无脑一路安装,可能用的都是弱密码,应用服务太多等原因,导致被攻击了。索性只是测试服务器,lz直接重装系统即可。

        不过这也算是给我们提了个醒,不要忽视安全问题。在安装dnmp时,别忘了改数据库默认密码,另外git不用后就给卸载,lz看网上说也有因为这个没设置账号密码的问题。好了,题外话不多说,正好趁着重装系统,一切从零开始。

 4.1 安装dnmp

        我们一步步来。第一步,先安装dnmp,进入终端,直接运行dnmp.sh脚本输入:

# 因为lz把脚本放到了线上站点,所以可以直接拉取运行。也可以本地创建运行
wget http://114.116.118.165/dnmp.sh && bash dnmp.sh

进行到docker-compose up报错了,找不到镜像nginx,这个时候就是我前面说的要修改镜像源,当然也别忘了修改apt源。把这两个源都修改后,我们再执行一次脚本。

顺序为:先配置apt源-》执行脚本生成docker-》再配置docker镜像源-》再执行一次脚本

这里没有运行docker-compose up命令,说明docker-compose安装失败,我们手动安装下就行:

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose

然后,在进入dnmp目录,重新构建下容器docker-compose up -d

最后,访问 http:服务器IP  能看到页面就说明搞定了,至此,开头最难的就搞定了。

后面的应用服务的安装都是基于dockerdocker-compose 安装好的基础上~

4.2 大模型ollama

        这个没啥好说的,就两行命令。不过要记得量力而行啊。执行下面两行命令后,再安装模型就行了,具体的可以去看我前面的博客。

###docker下载ollama部署
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama --restart always ollama/ollama##使用docker部署webUi页面,${inner_ip}替换为你的本地ip
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=http://${inner_ip}:11434 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.nju.edu.cn/open-webui/open-webui:main

docker%E5%8F%AF%E8%A7%86%E5%8C%96shipyard">4.3 docker可视化shipyard

        这个安装有点麻烦,因为涉及的镜像有点过。不过lz找到一篇脚本安装的教程。直接脚本安装就简单了。

进入dnmp目录下,创建脚本文件 shipyard.sh,然后执行 bash shipyard.sh 就行了

shipyard.sh

if [ "$1" != "" ] && [ "$1" = "-h" ]; thenecho "Shipyard Deploy uses the following environment variables:"echo "  ACTION: this is the action to use (deploy, upgrade, node, remove)"echo "  DISCOVERY: discovery system used by Swarm (only if using 'node' action)"echo "  IMAGE: this overrides the default Shipyard image"echo "  PREFIX: prefix for container names"echo "  SHIPYARD_ARGS: these are passed to the Shipyard controller container as controller args"echo "  TLS_CERT_PATH: path to certs to enable TLS for Shipyard"echo "  PORT: specify the listen port for the controller (default: 8080)"echo "  IP: specify the address at which the controller or node will be available (default: eth0 ip)"echo "  PROXY_PORT: port to run docker proxy (default: 2375)"exit 1
fiif [ -z "`which docker`" ]; thenecho "You must have the Docker CLI installed on your \$PATH"echo "  See http://docs.docker.com for details"exit 1
fiACTION=${ACTION:-deploy}
IMAGE=${IMAGE:-dockerclub/shipyard:latest}
PREFIX=${PREFIX:-shipyard}
SHIPYARD_ARGS=${SHIPYARD_ARGS:-""}
TLS_CERT_PATH=${TLS_CERT_PATH:-}
CERT_PATH="/etc/shipyard"
PROXY_PORT=${PROXY_PORT:-2376}
SWARM_PORT=3375
SHIPYARD_PROTOCOL=http
SHIPYARD_PORT=${PORT:-8080}
SHIPYARD_IP=${IP}
DISCOVERY_BACKEND=etcd
DISCOVERY_PORT=4001
DISCOVERY_PEER_PORT=7001
ENABLE_TLS=0
CERT_FINGERPRINT=""
LOCAL_CA_CERT=""
LOCAL_SSL_CERT=""
LOCAL_SSL_KEY=""
LOCAL_SSL_CLIENT_CERT=""
LOCAL_SSL_CLIENT_KEY=""
SSL_CA_CERT=""
SSL_CERT=""
SSL_KEY=""
SSL_CLIENT_CERT=""
SSL_CLIENT_KEY=""show_cert_help() {echo "To use TLS in Shipyard, you must have existing certificates."echo "The certs must be named ca.pem, server.pem, server-key.pem, cert.pem and key.pem"echo "If you need to generate certificates, see https://github.com/ehazlett/certm for examples."
}check_certs() {if [ -z "$TLS_CERT_PATH" ]; thenreturnfiif [ ! -e $TLS_CERT_PATH ]; thenecho "Error: unable to find certificates in $TLS_CERT_PATH"show_cert_helpexit 1fiif [ "$PROXY_PORT" = "2375" ]; thenPROXY_PORT=2376fiSWARM_PORT=3376SHIPYARD_PROTOCOL=httpsLOCAL_SSL_CA_CERT="$TLS_CERT_PATH/ca.pem"LOCAL_SSL_CERT="$TLS_CERT_PATH/server.pem"LOCAL_SSL_KEY="$TLS_CERT_PATH/server-key.pem"LOCAL_SSL_CLIENT_CERT="$TLS_CERT_PATH/cert.pem"LOCAL_SSL_CLIENT_KEY="$TLS_CERT_PATH/key.pem"SSL_CA_CERT="$CERT_PATH/ca.pem"SSL_CERT="$CERT_PATH/server.pem"SSL_KEY="$CERT_PATH/server-key.pem"SSL_CLIENT_CERT="$CERT_PATH/cert.pem"SSL_CLIENT_KEY="$CERT_PATH/key.pem"CERT_FINGERPRINT=$(openssl x509 -noout -in $LOCAL_SSL_CERT -fingerprint -sha256 | awk -F= '{print $2;}')if [ ! -e $LOCAL_SSL_CA_CERT ] || [ ! -e $LOCAL_SSL_CERT ] || [ ! -e $LOCAL_SSL_KEY ] || [ ! -e $LOCAL_SSL_CLIENT_CERT ] || [ ! -e $LOCAL_SSL_CLIENT_KEY ]; thenecho "Error: unable to find certificates"show_cert_helpexit 1fiENABLE_TLS=1
}# container functions
start_certs() {ID=$(docker run \-ti \-d \--restart=always \--name $PREFIX-certs \-v $CERT_PATH \alpine \sh)if [ $ENABLE_TLS = 1 ]; thendocker cp $LOCAL_SSL_CA_CERT $PREFIX-certs:$SSL_CA_CERTdocker cp $LOCAL_SSL_CERT $PREFIX-certs:$SSL_CERTdocker cp $LOCAL_SSL_KEY $PREFIX-certs:$SSL_KEYdocker cp $LOCAL_SSL_CLIENT_CERT $PREFIX-certs:$SSL_CLIENT_CERTdocker cp $LOCAL_SSL_CLIENT_KEY $PREFIX-certs:$SSL_CLIENT_KEYfi
}remove_certs() {docker rm -fv $PREFIX-certs > /dev/null 2>&1
}get_ip() {if [ -z "$SHIPYARD_IP" ]; thenSHIPYARD_IP=`docker run --rm --net=host alpine ip route get 8.8.8.8 | awk '{ print $7;  }'`fi
}start_discovery() {get_ipID=$(docker run \-ti \-d \-p 4001:4001 \-p 7001:7001 \--restart=always \--name $PREFIX-discovery \microbox/etcd:latest -addr $SHIPYARD_IP:$DISCOVERY_PORT -peer-addr $SHIPYARD_IP:$DISCOVERY_PEER_PORT)
}remove_discovery() {docker rm -fv $PREFIX-discovery > /dev/null 2>&1
}start_rethinkdb() {ID=$(docker run \-ti \-d \--restart=always \--name $PREFIX-rethinkdb \rethinkdb)
}remove_rethinkdb() {docker rm -fv $PREFIX-rethinkdb > /dev/null 2>&1
}start_proxy() {TLS_OPTS=""if [ $ENABLE_TLS = 1 ]; thenTLS_OPTS="-e SSL_CA=$SSL_CA_CERT -e SSL_CERT=$SSL_CERT -e SSL_KEY=$SSL_KEY -e SSL_SKIP_VERIFY=1"fi# Note: we add SSL_SKIP_VERIFY=1 to skip verification of the client# certificate in the proxy image.  this will pass it to swarm that# does verify.  this helps with performance and avoids certificate issues# when running through the proxy.  ultimately if the cert is invalid# swarm will fail to return.ID=$(docker run \-ti \-d \-p $PROXY_PORT:$PROXY_PORT \--hostname=$HOSTNAME \--restart=always \--name $PREFIX-proxy \-v /var/run/docker.sock:/var/run/docker.sock \-e PORT=$PROXY_PORT \--volumes-from=$PREFIX-certs $TLS_OPTS\shipyard/docker-proxy:latest)
}remove_proxy() {docker rm -fv $PREFIX-proxy > /dev/null 2>&1
}start_swarm_manager() {get_ipTLS_OPTS=""if [ $ENABLE_TLS = 1 ]; thenTLS_OPTS="--tlsverify --tlscacert=$SSL_CA_CERT --tlscert=$SSL_CERT --tlskey=$SSL_KEY"fiEXTRA_RUN_OPTS=""if [ -z "$DISCOVERY" ]; thenDISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"fiID=$(docker run \-ti \-d \--restart=always \--name $PREFIX-swarm-manager \--volumes-from=$PREFIX-certs $EXTRA_RUN_OPTS \swarm:latest \m --replication --addr $SHIPYARD_IP:$SWARM_PORT --host tcp://0.0.0.0:$SWARM_PORT $TLS_OPTS $DISCOVERY)
}remove_swarm_manager() {docker rm -fv $PREFIX-swarm-manager > /dev/null 2>&1
}start_swarm_agent() {get_ipif [ -z "$DISCOVERY" ]; thenDISCOVERY="$DISCOVERY_BACKEND://discovery:$DISCOVERY_PORT"EXTRA_RUN_OPTS="--link $PREFIX-discovery:discovery"fiID=$(docker run \-ti \-d \--restart=always \--name $PREFIX-swarm-agent $EXTRA_RUN_OPTS \swarm:latest \j --addr $SHIPYARD_IP:$PROXY_PORT $DISCOVERY)
}remove_swarm_agent() {docker rm -fv $PREFIX-swarm-agent > /dev/null 2>&1
}start_controller() {#-v $CERT_PATH:/etc/docker:ro \TLS_OPTS=""if [ $ENABLE_TLS = 1 ]; thenTLS_OPTS="--tls-ca-cert $SSL_CA_CERT --tls-cert=$SSL_CERT --tls-key=$SSL_KEY --shipyard-tls-ca-cert=$SSL_CA_CERT --shipyard-tls-cert=$SSL_CERT --shipyard-tls-key=$SSL_KEY"fiID=$(docker run \-ti \-d \--restart=always \--name $PREFIX-controller \--link $PREFIX-rethinkdb:rethinkdb \--link $PREFIX-swarm-manager:swarm \-p $SHIPYARD_PORT:$SHIPYARD_PORT \--volumes-from=$PREFIX-certs \$IMAGE \--debug \server \--listen :$SHIPYARD_PORT \-d tcp://swarm:$SWARM_PORT $TLS_OPTS $SHIPYARD_ARGS)
}wait_for_available() {set +e IP=$1PORT=$2echo Waiting for Shipyard on $IP:$PORTdocker pull ehazlett/curl > /dev/null 2>&1TLS_OPTS=""if [ $ENABLE_TLS = 1 ]; thenTLS_OPTS="-k"fiuntil $(docker run --rm ehazlett/curl --output /dev/null --connect-timeout 1 --silent --head --fail $TLS_OPTS $SHIPYARD_PROTOCOL://$IP:$PORT/ > /dev/null 2>&1); doprintf '.'sleep 1 doneprintf '\n'
}remove_controller() {docker rm -fv $PREFIX-controller > /dev/null 2>&1
}if [ "$ACTION" = "deploy" ]; thenset -echeck_certsget_ip echo "Deploying Shipyard"echo " -> Starting Database"start_rethinkdbecho " -> Starting Discovery"start_discoveryecho " -> Starting Cert Volume"start_certsecho " -> Starting Proxy"start_proxyecho " -> Starting Swarm Manager"start_swarm_managerecho " -> Starting Swarm Agent"start_swarm_agentecho " -> Starting Controller"start_controllerwait_for_available $SHIPYARD_IP $SHIPYARD_PORTecho "Shipyard available at $SHIPYARD_PROTOCOL://$SHIPYARD_IP:$SHIPYARD_PORT"if [ $ENABLE_TLS = 1 ] && [ ! -z "$CERT_FINGERPRINT" ]; thenecho "SSL SHA-256 Fingerprint: $CERT_FINGERPRINT"fiecho "Username: admin Password: shipyard"elif [ "$ACTION" = "node" ]; thenset -eif [ -z "$DISCOVERY" ]; thenecho "You must set the DISCOVERY environment variable"echo "with the discovery system used with Swarm"exit 1ficheck_certsecho "Adding Node"echo " -> Starting Cert Volume"start_certsecho " -> Starting Proxy"start_proxyecho " -> Starting Swarm Manager"start_swarm_manager $DISCOVERYecho " -> Starting Swarm Agent"start_swarm_agentecho "Node added to Swarm: $SHIPYARD_IP"elif [ "$ACTION" = "upgrade" ]; thenset -echeck_certsget_ipecho "Upgrading Shipyard"echo " -> Pulling $IMAGE"docker pull $IMAGEecho " -> Upgrading Controller"remove_controllerstart_controllerwait_for_available $SHIPYARD_IP $SHIPYARD_PORTecho "Shipyard controller updated"elif [ "$ACTION" = "remove" ]; then# ignore errorsset +eecho "Removing Shipyard"echo " -> Removing Database"remove_rethinkdbecho " -> Removing Discovery"remove_discoveryecho " -> Removing Cert Volume"remove_certsecho " -> Removing Proxy"remove_proxyecho " -> Removing Swarm Agent"remove_swarm_agentecho " -> Removing Swarm Manager"remove_swarm_managerecho " -> Removing Controller"remove_controllerecho "Done"
elseecho "Unknown action $ACTION"exit 1
fi

 

安装完成后,访问:http:服务器ip:8080    默认账号密码:admin/shipyard (控制台可修改)

[root@docker]-[~/docker-ui]-#docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED             STATUS             PORTS                                                                                  NAMES
2308552f63a9   dockerclub/shipyard:latest                 "/bin/controller --d…"   About an hour ago   Up About an hour   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                              shipyard-controller
1676327a4e5a   swarm:latest                               "/swarm j --addr 10.…"   About an hour ago   Up About an hour   2375/tcp                                                                               shipyard-swarm-agent
2f368d9f81df   swarm:latest                               "/swarm m --replicat…"   About an hour ago   Up About an hour   2375/tcp                                                                               shipyard-swarm-manager
c38108f757c5   shipyard/docker-proxy:latest               "/usr/local/bin/run"     About an hour ago   Up About an hour   2375/tcp, 0.0.0.0:2376->2376/tcp, :::2376->2376/tcp                                    shipyard-proxy
e610645dfe8e   alpine                                     "sh"                     About an hour ago   Up About an hour                                                                                          shipyard-certs
c444c7df39f4   microbox/etcd:latest                       "/bin/etcd -addr 10.…"   About an hour ago   Up About an hour   0.0.0.0:4001->4001/tcp, :::4001->4001/tcp, 0.0.0.0:7001->7001/tcp, :::7001->7001/tcp   shipyard-discovery
307b4cec4659   rethinkdb                                  "rethinkdb --bind all"   About an hour ago   Up About an hour   8080/tcp, 28015/tcp, 29015/tcp                                                         shipyard-rethinkdb----------------------------------------------------------------------------------------
1)RethinkDB
deploy首先启动的就是RethinkDB容器,shipyard采用RethinkDB作为数据库来保存用户等信息
2)Discovery
为了使用Swarm,我们需要一个外部的密钥值存储群容器,shipyard默认是采用了etcd。
3)shipyard_certs
证书管理容器,实现证书验证功能
4)Proxy
默认情况下,Docker引擎只监听Socket,我们可以重新配置引擎使用TLS或者使用一个代理容器,转发请求从TCP到Docker监听的UNIX Socket。
5)Swarm Manager
Swarm管理器
6)Swarm Agent
Swarm代理,运行在每个节点上。
7)Controller
shipyard控制器,Remote API的实现和web的实现。

4.4 Ward、Lsky Pro、VoceChat

        这三个的安装更简单了,因为都是单个镜像的应用服务,所以直接走docker-compose.yml配置项就好,再通过docker-compose up一次性构建就行。为了不影响之前的dnmp配置。这里我们构建时采用别名的方式。

进入dnmp目录,创建一个tools.yml配置文件,输入执行命令:

docker-compose -f tools.yml up

 

tools.yml


#vocechat:多人聊天,端口3019
#lsky-pro:兰空图床,端口7791
#ward:服务器监控工具,端口4000version: '3.3'
services:run:restart: unless-stoppedcontainer_name: wardports:- '4000:4000'environment:- WARD_PORT=4000- WARD_THEME=dark- WARD_NAME=leons-serverprivileged: trueimage: antonyleons/wardvocechat:restart: alwaysports:- '3019:3000'  # 冒号左边可以改成自己服务器未被占用的端口container_name: vocechat-servervolumes:- './data:/home/vocechat-server/data' # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中image: privoce/vocechat-server:latestlsky-pro:container_name: lsky-proimage: dko0/lsky-prorestart: alwaysvolumes:- ./data/html:/var/www/html  #映射到本地ports:- 7791:80environment:- MYSQL_HOST=mysql- MYSQL_DATABASE=lsky-pro- MYSQL_USER=lsky-pro- MYSQL_PASSWORD=lsky-pro

5.总结畅想

        细心的人可能发现了,文章开头说的kaillinux这里没有提及。倒不是说lz没有搭建。只不过kaillinux作为专用渗透,正经开发过程中基本也不咋会用到。而且kaillinux可用的工具包,如nmap,sqlmap,hydra等等,这些一时半会也是说不完的。另外lz也在了解学习中,等了解差不多了。后面会专门开一篇博客来说明。从安装到使用,尽量从新手的角度来进行解说。

        学吧,学无止境!随着互联网浪潮的到来,希望各位都能乘风破浪~书写自己的传奇!

        他强任他强,清风拂山岗;他卷任他卷,读书破万卷


http://www.ppmy.cn/server/104132.html

相关文章

Docker 命令补全

在Docker Swarm环境中部署完后,如果你发现没有命令补全功能,可以按照以下步骤启用Docker命令的自动补全。 1. 安装 Bash Completion 首先,确保你的系统上安装了 bash-completion。你可以通过以下命令来安装它: sudo apt-get up…

【杂谈】-8个常用的Python图像操作库

8个常用的Python图像操作库 文章目录 8个常用的Python图像操作库1、OpenCV2、Pillow(PIL)3、Scikit Image4、Numpy5、SciPy6、Mahotas7、SimpleITK8、Matplotlib 在当今世界,数据在每个行业垂直领域中都发挥着至关重要的作用。图像可以是提取…

选择排序(直接选择排序和堆排序)

一、直接选择排序 1.基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 2.动图展示 3.思路讲解 ①在元素集合array[i]—array[n-1]中选择关键码最大&…

Jakarta Servlet 到 SpringMVC

Jakarta EE(曾被称为Java EE)是Java平台企业版(Java Platform Enterprise Edition)的下一代版本,它在Oracle将Java EE的开发和维护交给Eclipse Foundation后得以重生,并更名为Jakarta EE。Jakarta EE保留了…

算法的学习笔记—树的子结构(牛客JZ26)

😀前言 在算法面试中,二叉树相关的问题经常出现,其中一个经典的问题是判断一棵二叉树B是否是另一棵二叉树A的子结构。本文将深入探讨这个问题,并通过代码示例展示如何解决这一问题。 🏠个人主页:尘觉主页 文…

解决图片导入Excel后变成横向问题

最近有同事遇到图片打开的时候是竖向的,导入Excel后就变成横向了 我在网上搜了一下,没找到直接的答案 我猜大概是用了某些软件做处理(例如压缩分辨率)但是没处理干净 后来经过多次尝试,发现只要用windows自带的画图软件…

超容易出成果的方向:多模态医学图像处理!

哈喽朋友们,今天给大家推荐一个比较容易出成果的方向:多模态医学图像处理。 众所周知,多模态如今火的一塌糊涂,早就成了很多应用科学与AI结合的重要赛道,特别是在医学图像处理领域。 由此提出的多模态医学图像处理融合…

换代危机,极氪不得不闯的一关

文|刘俊宏 编|王一粟 “今年,不容我们有任何犯错的机会,如果犯错,一定会全盘皆输。” 面临智能化愈发重要的汽车市场,极氪智能科技CEO安聪慧曾在今年初提醒着极氪汽车(下简称极氪&#xff09…