这篇帖子服务于踩坑的自己,如果这篇帖子对你能起到帮助,那将更又意义。
首选你要又台Linux机器 (本篇帖子为阿里云Centos 8)
docker 安装的方法很多,这里不做赘述,推荐官网查看(docker是个轻量的很好装)
systemctl enable docker#设置开机启动 systemctl disable docker#关闭开机启动下图仅仅关注 nginx latest 即可
我拉取了两个nginx 我们用latest那个版本讲解,这里nginx镜像已经搞定,我们先放一放
准备一个Spring Boot 的Jar包,分别设置端口 9092 9093 (看你心情搞)
首选你需要准备一个 Dockerfile 文件,我也郁闷为啥非叫“Dockerfile”这个名字,也没后缀,后续等我明白在补充
sp-docker-0.0.1-SNAPSHOT.jar: 这个就是boot 的普通jar。你需要打包两次,分别9092和9093端口,为实现后面负载效果准备
Dockerfile 说明 注意替换你自己的jar包名
#创建文件,或者touch vim Dockerfile # 写入 # Docker image for springboot file run # VERSION 0.0.1 # Author: eangulee # 基础镜像使用java 如果你用的是别的jdk记得换,另外如果你的虚拟机没安装过jdk镜像,那么等下会自动拉取jdk FROM java:8 # 作者 MAINTAINER eangulee <lhl> # VOLUME 指定了临时文件目录为/tmp。 # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp # 将jar包添加到容器中并更名为app.jar ADD sp-docker-0.0.1-SNAPSHOT.jar app.jar # 运行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] :wq!把 Dockerfile 和你的jar放在通一个文件夹
docker build -t boot2 .build :构建
-t [镜像名称]
重复动作,更换Jar中的端口,在打一个包, 构建镜像为 boot3, 这样你就又俩镜像了,准备好你会的到如下图结果
boot 工程的镜像我们已经主备好,那么我们启动这两个工程
# 启动 boot2 镜像 docker run --name boot2Name -d -p 8082:9092 boot2 # 启动 boot3 镜像 docker run --name boot3Name -d -p 8083:9093 boot3--name:容器名称(方便后续进入实例获取他的文件)
-d 后台运行 -p 端口映射
8082 、8083:是宿主机的端口
9092、9093:是你Jar真实端口
--restart=always (本次没有运行,这个表示docker容器在停止或服务器开机之后会自动重新启动)
拓展:
# 查看多有镜像 docker images # 列举当前运行的容器: docker ps # 查询所有容器 docker ps -a # 检查容器内部信息: docker inspect [容器名称] # 停止容器 docker stop [容器名称] # 重启容器 docker start [容器名称] # 移除容器 docker rm [容器名称] #杀死所有正在运行的容器: docker kill $(docker ps -a -q) # 删除所有停止的容器: docker rm $(docker ps -a -q)把虚拟机添加安全组:
启动nginx
# 启动nginx 镜像内部 docker run --name mynginx -d -p 8080:80 nginx访问下试试:
copy 容器内部的nginx文件到外部
# 首先你要把 /home/nginx/conf log conf.d 文件夹建立 mkdir 命令 # mynginx 为你刚才启动的容器名称 docker cp mynginx:/etc/nginx/nginx.conf /home/nginx/conf docker cp mynginx:/var/log/nginx /home/nginx/log docker cp mynginx:/etc/nginx/conf.d/default.conf /home/nginx/conf/conf.d/然后停止 容器ngixn
# 停止容器 docker stop mynginx # 移除容器 因为下次我还想用 mynginx 名字 docker rm mynginx修改nginx配置文件
# 修改nginx.conf文件 vim /home/nginx/conf/nginx.conf # 把下面内容写入 仅供参考 user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; upstream app{ server app2:9092 max_fails=1 fail_timeout=60s weight=1; server app3:9093 max_fails=1 fail_timeout=60s weight=1; } server { listen 81; listen [::]:81; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { proxy_pass http://app; root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } }说明:
启动ngixn
# 启动nginx docker run --name mynginx -p 8080:81 --link boot3Name:app3 --link boot2Name:app2 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/log:/var/log/nginx -d nginx访问:
搞定
小白上路,希望对您有所帮助!