目录
然后在浏览器输入IP:4646就可以看到nomad图形化界面
要把代码目录映射到容器里面,同时在容器的/etc/nginx 也要映射到外面的目录 /nginx/conf
目录
然后在浏览器输入IP:4646就可以看到nomad图形化界面
要把代码目录映射到容器里面,同时在容器的/etc/nginx 也要映射到外面的目录 /nginx/conf
基本操作
-
把本地代码复制到远程
scp 本地文件 远程用户名@ip:远程目录
-
重启docker服务
systemctl restart docker
-
docker重启所有镜像
docker start $(docker ps -aq)
-
linux 杀死进程
-9 是强制杀死信号
pkill -9 nomad 杀死系统进程
-
加载镜像
docker load
docker save 保存镜像
给镜像打上标记:docker tag 17bdcd448d1e nginx:latest
搭建Nomad
-
安装nomad
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install nomad
-
启动nomad服务端
nohup nomad agent --config={路径} &sleep 10
server.hcl
log_level = "DEBUG"
data_dir = "/root/nomad/data" //nomad安装目录下新建一个data文件夹
server { enabled = true bootstrap_expect = 1 }
-
启动客户端
nohup nomad agent --config=/home/shr/nomad/config/client.hcl &sleep 10
client.hcl
log_level = "DEBUG"
data_dir = "/home/nomad/data"
name = "client1"
client { enabled = true servers = ["10.16.193.71:4647"] }
ports { http = 5656 }
plugin "docker" { config { volumes { enabled = true } gc { image = false } } } plugin "raw_exec" { config { enabled = true } }
-
然后在浏览器输入IP:4646就可以看到nomad图形化界面
部署前端
一般来讲会把容器里面的/etc/nginx映射出去,否则后期无法修改配置文件,比如突然要多映射一个文件服务
-
要把代码目录映射到容器里面,同时在容器的/etc/nginx 也要映射到外面的目录 /nginx/conf
-
nomad 新建一个jobs
job "frameui-qd-jobs" {
datacenters = ["dc1"]
type = "service"
group "app" {
task "frameui-qd-tasks" {
driver = "docker"
config {
volumes = ["/home/frontEnd:/home/frontEnd","/home/nginx/conf:/etc/nginx"]
image = "nginx:1.19.4"
port_map {
http = 80 //服务对外暴露的端口
}
work_dir="/home/frontEnd/dist"
}
service {
name = "frameui-qd-service"
port = "http"
check {
name = "alive"
type = "tcp"
interval = "10s"
timeout = "2s"
check_restart {
limit = 10 # 健康检查失败次数,超过此数量服务会重启
grace = "60s" # 在启动或者重启服务后进行健康检查前等待的时间
ignore_warnings = false # 是否忽视警告
}
}
}
resources {
cpu = 10
memory = 512
network {
port "http" {
static= 8847 //容器工作的端口
}
}
}
logs {
max_files = 5
max_file_size = 10
}
}
}
}
部署JAVA
job "shr-centralized-inspect-service-jobs" {
datacenters = ["dc1"]
type = "service"
group "app" {
task "shr-centralized-inspect-service-tasks" {
driver = "docker"
config {
volumes = ["/home/backEnd:/app"]
image = "openjdk:8"
port_map {
http = 18006
}
work_dir = "/app"
command = "java"
args = ["-jar","./shr-centralized-inspect-service.jar"]
extra_hosts = [""]
}
service {
name = "shr-centralized-inspect-service"
port = "http"
check {
name = "alive"
type = "tcp"
interval = "10s"
timeout = "2s"
check_restart {
limit = 10 # 健康检查失败次数,超过此数量服务会重启
grace = "60s" # 在启动或者重启服务后进行健康检查前等待的时间
ignore_warnings = false # 是否忽视警告
}
}
}
resources {
cpu = 1000
memory = 1024
network {
port "http" {
static= 8443
}
}
}
logs {
max_files = 5
max_file_size = 10
}
}
}
}
部署Node
job "node-generatedoc-jobs" {
datacenters = ["dc1"]
type = "service"
group "app" {
task "node-generatedoc-tasks" {
driver = "docker"
config {
volumes = ["/home/shr/node-generatedoc:/app"]
image = "node"
port_map {
http = 4000
}
work_dir = "/app"
command = "npm"
args = ["run","dev"]
extra_hosts = [""]
}
logs {
max_files = 5
max_file_size = 10
}
}
}
}
搭建consul
(为Kong提供DNS服务)
-
安装consul
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install consul
- 启动consol
nohup consul agent --config-file=/home/consul/config/server.json
搭建Kong
-
安装postgres
docker run -d --name kong-database \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ -e "POSTGRES_PASSWORD=123456" \ postgres:11
-
安装需要的镜像
docker run --rm \
--link kong-database:kong-database \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=123456" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong kong migrations bootstrap
-
启动kong start.sh
docker rm -f kong docker run -d --name kong \
--link kong-database:kong-database \
-v /home/kong/kong.conf:/etc/kong/kong.conf \
//不能忘记映射,不然配置文件没发改了,要修改dns_resolver-e "KONG_DATABASE=postgres" \-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=123456" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8001:8001 \
kong
搭建Konga
docker run -p 1337:1337 \
--name konga \
-e "NODE_ENV=production" \
-e "TOKEN_SECRET=SYhy_5000" \
pantsel/konga
注意坑
- 1.服务暴露出去的协议要和网关上对应的协议要一致,如暴露的端口是https端口,那么kong写服务的时候也得是https
- 如果服务暴露出去的是http协议,那么如果网关只支持http,那么就无法解析
- nginx映射的时候会先到/etc/nginx/nginx.conf找文件,然后到/usr/share/nginx/html 找入口的index.html ,所以对于前端来讲要把根目录的这个/指向自己的代码目录,也就是替换/user/share/nginx/html这个默认查找,这个是nginx的那个开始页
- 卷映射的时候左边没有东西,是没办法映射到右边的 ,如/路径1:/路径2,只能从路径1到路径2,不能从路径2到路径1