docker安装nginx,docker部署vue前端,以及docker部署java的jar部署

一、部署前端部分

  • 前端部分使用vue 2,通过nginx进行部署,首先从nginx安装开始

1.搜索并拉去Nginx镜像

复制代码
[root@localhost ~]# docker search nginx
[root@localhost /]# docker pull nginx:latest
latest: Pulling from library/nginx
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
[root@localhost /]# docker ps

2.启动一个nginx,用于复制配置文件到宿主机

复制代码
[root@localhost /]# docker run -d -p 80:80 --restart=always nginx:latest
c52a824e9245f4ebde4775629133d3370b4ee270baa65d2e2a8a2631579c9e9a
[root@localhost /]# cd /home/


# -d 后台启动 -p 宿主机的80端口映射容器的80端口
# --restart=always 伴随docker重启自动重启该容器
# -p linux服务器端口:docker内部端口。映射

3.创建Nginx配置文件目录

启动前需要先创建Nginx外部挂载的配置文件( /home/nginx/conf/nginx.conf)

  • 创建挂载目录

    mkdir -p /home/nginx/{conf,html,logs}

4.查看宿主机的目录

复制代码
[root@localhost ~]# tree /home/nginx/
/home/nginx/
├── conf
├── html
└── log

5.配置复制到宿主机

容器中的nginx.conf文件和conf.d文件、html、logs文件夹复制到宿主机

复制代码
#将容器nginx.conf文件夹下内容复制到宿主机
[root@localhost nginx]# docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/
Successfully copied 2.56kB to /home/nginx/conf/
#将容器conf.d文件夹下内容复制到宿主机
[root@localhost conf]# docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/
Successfully copied 3.58kB to /home/nginx/conf/
#将容器中的html文件夹复制到宿主机
[root@localhost nginx]# docker cp nginx:/usr/share/nginx/html /home/nginx/html
Successfully copied 4.1kB to /home/nginx/html
  • 复制完成后,停止刚刚启动的nginx,并删除容器

    root@localhost html# docker stop nginx

    nginx

    root@localhost html# docker rm nginx

    nginx

  • 重新启动新的容器

    下面代码-v前面被处理过,可直接复制使用, 表示换下一行继续

    -d: 后台启动

    -p: 宿主机的80端口映射容器的80端口

    -v: 挂载宿主机文件或目录到容器

    --restart=always: 伴随docker重启自动重启该容器

    root@localhost html# docker run

    -p 80:80

    --name nginx

    -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf

    -v /home/nginx/conf/conf.d:/etc/nginx/conf.d

    -v /home/nginx/html:/usr/share/nginx/html

    -v /home/nginx/logs:/var/log/nginx/

    --restart=always

    -d nginx

    a26f1a599eee1f5fe25e5cd8e0e2c8b9071ed97a0ffca821555cb3922fee5697

    root@localhost html# diocker ps -a

查看挂载绑定

复制代码
[root@localhost html]# docker inspect nginx

对应位置结果如下:

复制代码
 "HostConfig": {
            "Binds": [
                "/home/nginx/html:/usr/share/nginx/html",
                "/home/nginx/logs:/var/log/nginx/",
                "/home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf",
                "/home/nginx/conf/conf.d:/etc/nginx/conf.d"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },

查看进程

复制代码
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS         PORTS                                                  NAMES
d19f05d93ff7   nginx       "/docker-entrypoint...."   30 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp                      nginx
859d2a023c54   redis       "docker-entrypoint.s..."   2 hours ago      Up 2 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
e536f06efb83   mysql:5.7   "docker-entrypoint.s..."   4 days ago       Up 2 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

容器运行后,需要再重新运行加载配置文件,需要stop容器,并删除容器,镜像如需重新定义创建在执行rmi参数删除

关闭容器

root@localhost \~# docker stop nginx

删除容器

root@localhost \~# docker rm nginx

进入容器查看

复制代码
[root@localhost ~]# docker exec -it nginx /bin/bash
root@d19f05d93ff7:/# cd /etc/nginx/
root@d19f05d93ff7:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@d19f05d93ff7:/etc/nginx# exit
exit
[root@localhost ~]# 

访问页面

  1. 修改nginx.conf文件,找到进入刚刚挂载宿主机位置的配置文件

    vim /home/nginx/conf/nginx.conf

    #gzip on;

    复制代码
    #默认文件中无server块,新增自定义server块,注释掉include /etc/nginx/conf.d/*.conf;
    #include /etc/nginx/conf.d/*.conf;
        server {
        listen       80;
        server_name  192.168.116.135;
    
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   /usr/share/nginx/html; #注意此处改为容器中html地址,改为宿主机找不到html
            index  index.html index.htm;
            #去除vue访问路径中#
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.html?s=$1 last;
                break;
                }
          }
        }
  2. 访问

    访问的页面放到挂载的目录(宿主机,如:/home/nginx/html),不用进入容器,通过xftp等上传编辑好的文件

二、部署准备后端环境

定义路径转发,后台访问部署java,若使用redis等,需要进行docker安装,同时还有数据库也需要安装,这两个的安装比较容易,基本下一步,再设置好开机启动随着docker启动而启动即可。

1.部署java环境

idea打包,准备上传jar包

2.linux中创建目录

复制代码
mkdir -p /home/java-core

将jar上传到目录

在和jar包在相同目录下创建Dockerfile

复制代码
[root@localhost ~]# sudo vim Dockerfile

编辑内容如下:

复制代码
#拉取jdk8作为基础镜像
FROM java:8
#作者
MAINTAINER name
#添加jar到镜像并命名为juror.jar
ADD juror-0.0.1-SNAPSHOT.jar juror.jar
#镜像启动后暴露的端口
EXPOSE 8300
# jar运行命令,参数使用逗号隔开
ENTRYPOINT ["java","-jar","juror.jar"]

3,然后使用命令打包

若build失败,大概是网络不通,更换国内docker镜像。

复制代码
docker build -t juror .

user表示镜像名称

最后的(点.)表示Dockerfile在当前目录

打包完成后使用docker images查看镜像

4.启动

使用docker run命令创建并运行容器:

此处的端口映射为前端访问后端的接口端口,后面会在nginx中配置路径匹配转发访问接口

复制代码
docker run -d --name juror -p 8300:8300 juror

命令

功能

docker run

创建并启动容器

-d

后台运行容器,并返回容器ID

--name

指定容器名称

juror

juror需要启动的镜像(名称+版本)不指定版本默认最新版本

:

符号左边为宿主机,右边为容器空间。此为端口映射

5. 在server块中新增location块,监听端口如上,不删除。

复制代码
 location /juror-api {
                rewrite ^.+juror-api/?(.*)$ /$1 break;  #去掉/juror-api前缀
                proxy_pass  http://192.168.116.135:8300; #转发代理,java后端地址和端口访问
                proxy_redirect off;     #关闭重定向
                proxy_set_header  Host $host;  #携带host请求头
                proxy_set_header  X-Real-IP $remote_addr;   #自定义请求头X-Real-IP将客户真实ip转发给服务器
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;  #用户访问cdn服务器转发nginx用户真实ip给后
台
                }

6.访问地址,在java部署完成情况下

7,启动完成,查看启动日志:

docker logs -f -t juror

jar日志启动成功,查看容器:

docker ps

部署完成后如需要开机自启,随着docker启动而启动,命令:

复制代码
[root@localhost ~]# docker update --restart=always 容器

三、若要进行挂载

修改Dockerfile文件

复制代码
sudo vim Dockerfile

修改后内容如下(docker中给jar存放一个目录,方便挂载到宿主机):

拉取jdk8作为基础镜像

FROM java:8

复制代码
# 作者
MAINTAINER name
# 添加jar到镜像并命名为juror.jar,下面为在宿主机中目录
ADD juror-0.0.1-SNAPSHOT.jar /home/java-core/juror.jar
# 镜像启动后暴露的端口
EXPOSE 8300
# jar运行命令,参数使用逗号隔开,下位容器中需要目录
ENTRYPOINT ["java","-jar","/home/java-core/juror.jar"]

在宿主机中创建挂载目录

复制代码
[root@localhost java-core]# mkdir -p app
[root@localhost java-core]# ls
app  juror-0.0.1-SNAPSHOT.jar  Dockerfile

启动容器

复制代码
docker run -d --name juror -e SPRING_PROFILES_ACTIVE="prod" -p 8300:8300 -v /home/java-core/app:/app juror

参数

作用

  • v

/home/java-core/app此处为宿主机jar所在目录,/app为挂载到容器目录下

-e

SPRING_PROFILES_ACTIVE="prod"为启动application-prod.yml环境

这样的方式启动完成之后,更新服务时只需要更换宿主机/home/java-core/app目录下的jar包,然后重启容器即可实现更新,省略了每次更新删除打包创建等过程。

相关推荐
benbenAItalk5 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl5 小时前
Java学习二 基本语法2, 算术运算符
java·学习
niucloud-admin5 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885725 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
生活爱好者!5 小时前
哇!影视新玩法!docker部署NEOWATCH NAS
运维·docker·容器
滕州市燕猫虎计算机科技工作室个体工商户5 小时前
Java锁
java·开发语言
西瓜太郎12346 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
shehuiyuelaiyuehao7 小时前
1计算机是如何工作的
java·计算机网络
陈随易7 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
letisgo58 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理