Linux&Dockerfile部署相关-把项目部署到云服务器(二)

一、部署项目,配置基本环境

  • 1、MySQL部署

(1)拉取MySQL镜像

docker pull mysql:5.7

(2)查看镜像

docker images

(3)创建MySQL容器

docker run -id --name test_mysql  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口

-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码

(4)进入MySQL容器

docker exec -it  test_mysql  /bin/bash

(5)登陆MySQL

 mysql -uroot -p123456

(6)开启远程访问MySQL

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
flush privileges;
  • 2、 redis部署
  • (1)拉取镜像
docker pull redis
  • (2)运行容器
docker run -id --name test_redis -p 6379:6379 redis:latest --requirepass "123456"
  • 3、与当前项目无关的部分部署

(1)nginx部署

 拉取nginx镜像:docker pull nginx 		
 运行nginx容器:docker run -id--name test_nginx -p 80:80 nginx:latest 		
 测试nginx容器是否正常:浏览器正常访问   http://目标IP 	

(2)FastDFS部署

拉取FastDfs镜像:  
docker pull registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs 		
创建FastDfs容器:	
systemctl start firewalld 
docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=47.95.234.255 -e WEB_PORT=80 -v ${HOME}/fastdfs:/var/local/fdfs registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs

***注: 需要先开启防火墙,运行完容器后再开放对应的端口或者是关闭防火墙,否则访问不到

(3)测试FastDfs

关闭防火墙:systemctl stop firewalld
docker exec -id --name fastdfs /bin/bash
进入到Fastdfs容器中执行: echo “hello” > index.html
fdfs_test /etc/fdfs/client.conf upload index.html

二、项目部署,Dockerfile构建

  • 1、拉取centos7用作镜像运行基础环境
docker pull centos:7
  • 2、从Oracle官网下载jdk1.8的包放于构建jdk的文件夹(没有特别规定文件夹)
    指定下载版本

下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
在同一文件夹下创建Dockerfile,输入如下内容:

FROM centos:7
MAINTAINER Joi
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u281-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8-8u281
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin/:$PATH

Dockerfile部分指令说明:Dockerfile部分指令说明

## 执行构建:    
docker build -t="jdk1.8" .
## 进入容器:   
docker exec -it jdk1.8  /bin/bash
## 测试jdk配置,查看版本号: 
java -version

注:
1、如果不使用默认的Dockerfile文件名,可以通过 . -f JDKDockerfile指定文件名构建( . 不可缺少)
2、如果遇到“/bin/bash: java: command not
found”的问题,获取容器中jdk安装在/usr/local/java/jdk1.8.0_281/的目录,执行以下命令:

ln -s -f /usr/local/java/jdk1.8.0_281/bin/java /usr/bin/java

  • 3、部署项目
docker run -id --name=test_project.jar -p=8282:8082 -v=/test_project:/test_project jdk1.8:8u281 java -jar /test_project/test_project.jar

-v挂在宿主机目录到jdk1.8容器中的指定目录
//除了在容器中运行,也可以直接在Linux中配置好jdk环境(我尝试的这种方式,因为我没有挂载成功- _ -!)
//直接运行java -jar test_project.jar
//通过 “tail -f 目标日志文件” 或者 “tailf 目标日志文件” 指令实时查看运行日志

三、maven插件构建镜像

构建关系

  • 1、开启Docker远程访问
vi /lib/systemd/system/docker.service

其中ExecStart=后添加配置

-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

修改后如图:
修改后图片

  • 2、刷新配置,重启服务
systemctl daemon-reload 
systemctl restart docker 

访问测试:http://目标IP:2375
如果测试不通过,检查安全组合防火墙。

  • 3、增加Docker插件

在工程pom.xml 增加插件

<build>
    <finalName>test_project</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
        <!--docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin-->
        <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
        <!--镜像名 PetHome:1.0-->
        <imageName>${project.artifactId}:${project.version}</imageName>
        <!--基础镜像-->
        <baseImage>jdk1.8</baseImage>
        <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}
                </directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <!--docker远程主机-->
        <dockerHost>http://ip:2375</dockerHost>
    </configuration>
</plugin>
    </plugins>
</build>
  • 4、构建镜像

进入test_project所在的目录,输入以下命令,进行打包和上传镜像
注意:项目名 artifactId中的名称不能有大写,否则不认识

mvn clean package -Dmaven.test.skip=true docker:build

四、部署实战

  • 学习的部署方案
    docker部署方案
  • 1、后端部署,基于test_project镜像运行容器(使用link方式)
docker run -id --name=test_project-p 8082:8082 --link test_redis:test_redis --link test_mysql:test_mysql test_project:1.0-SNAPSHOT
  • 2、前端部署
    (1)把前端打包
    前端使用Nginx进行部署,首先我们需要把前端项目打包成静态资源 , 然后使用Dockerfile自动构建一个Ningx镜像,Docerfile脚本构建镜像时需要把前端代码自动拷贝到容器中。
    需要在Window电脑上准备前段项目并打包,准备好Dockerfile和nginx.config配置等,待会儿直接打包上传到Linux执行镜像构建即可。
    把前端代码准备好之后需要使用压缩工具(7z2000-x64.exe)把前端代码打包成 tar.gz格式,因为这种格式在构建Dockerfile镜像的时候可以自动解压。打包操作如下:
    在这里插入图片描述
    在这里插入图片描述
    压缩成tar之后,再压缩一次,改一下名字,变成 test_project.tar.gz
    在这里插入图片描述
    在这里插入图片描述

(2)编写Dockerfile脚本

编写Dockerfile脚本,构建Nginx镜像,同时拷贝前段到Nginx镜像中。

FROM nginx:latest
RUN mkdir /usr/share/nginx/test_admin
RUN mkdir /usr/share/nginx/test_front
ADD ./pethome_admin.tar.gz /usr/share/nginx/test_admin
ADD ./pethome_front.tar.gz /usr/share/nginx/test_front
ADD ./nginx.conf /etc/nginx/conf.d/
WORKDIR /usr/share/nginx
RUN chmod -R a+rx * test_admin
RUN chmod -R a+rx * test_front  

(3)编写Nginx配置文件

server {
      listen 80;
      server_name  www.wolfboy.xyz;
      location / {
              root   /usr/share/nginx/test_front;
              index  index.html;
      }
    }
    server {
      listen 80;
      server_name  admin.wolfboy.xyz;
      location / {   
              root   /usr/share/nginx/test_admin;
              index  index.html;
      }
    }
    server {
      listen 80;
      server_name  api.wolfboy.xyz;
	  location / {
		add_header 'Access-Control-Allow-Origin' $http_origin;
		add_header 'Access-Control-Allow-Credentials' 'true';
		add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,PUT,OPTIONS';
		add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,U-TOKEN,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
		add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
		if ($request_method = 'OPTIONS') {
			add_header 'Access-Control-Allow-Origin' $http_origin;
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,PUT,OPTIONS';
			add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,U-TOKEN,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
			add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
			add_header 'Access-Control-Max-Age' 1728000;
			add_header 'Content-Type' 'text/plain; charset=utf-8';
			add_header 'Content-Length' 0;
			return 204;
		}
		root   html;
		index  index.html index.htm;
		proxy_pass http://test_project:8082;  #这里跟后端服务的link名字
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_connect_timeout 5;
	  }
	}

准备好的目录结构与下图相似
在这里插入图片描述
(4)上传代码到Linux,构建镜像

## cd到 项目上传的目录,执行镜像构建命令,下面构建的镜像名字为: test_nginx
docker pull  nginx:latest
docker build -t="test_nginx" ./

(5) 创建容器

docker run -di --name=test_web -p 80:80 --link test_project:test_project test_nginx
docker run -id --name=test_web --link test_project:test_project  -p=8881:80 -p=8882:80 pethome-nginx

注意:这里一定要是“–link test_project:test_project” ,因为在nginx.conf中使用了这个link名字来反向代理到后端服务
启动测试

另,简单的将jar包构建成镜像可以参考这篇博客

将jar包打包为docker镜像

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值