本文主要介绍docker部署jar包项目全流程,从服务器购买到项目部署运行

1.阿里云购买轻量级服务器(不做介绍)

2.登录阿里云服务器,下载docker

(1)安装yum工具

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

(2)更新本地镜像源

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
 
yum makecache fas

(3)正式安装docker

yum install -y docker-ce

(4)启动docker

systemctl start docker

(5)查看docker版本
 

Docker -v

出现上述结果表明docker安装成功

因为我项目需要用到mysql以及redis,所以需要先在docker中安装mysql和redis

3. 安装mysql

(1)拉取mysql,后面不加版本号默认拉取最新版本的mysql

docker pull mysql

(2)运行 MySQL 容器

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

--name mysql:为容器指定一个名称,比如这里容器名称就为mysql
-e MYSQL_ROOT_PASSWORD=admin:设置mysql的root用户密码,比如admin
-d mysql:latest: 以后台模式运行mysql容器

(3)验证连接

docker exec -it mysql mysql -uroot -p

输入刚刚设置的密码,进入到mysql命令行,表明mysql连接成功。

此处成功后,可以通过navicat尝试连接该数据库

注意:可能会出现问题(仅针对我遇到的问题)

1.云服务器:需要在阿里云安全组开放3306端口号 

2.轻量级服务器:需要在防火墙模板处开放3306端口号

3.还会报错Public Key Retrieval is not allowed,需要在驱动设置处将allowPublicKeyRetrieval设置成true

至此数据库创建连接成功

4.安装redis

(1)拉取redis

Docker pull redis

 (2)运行redis容器

docker run -itd --name redis --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 -v /data/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data  redis redis-server /etc/redis/redis.conf --appendonly yes  --requirepass admin

--name redis:为容器指定一个名称,比如这里容器名称就为redis

--requirepass admin:设置redis的root用户密码,比如admin

(3)执行docker ps查看容器具体信息

docker ps

注意:

docker ps查看正在运行的容器

docker ps -a 查看所有的容器(包括停止的容器)

docker stop 容器名:用来停止相应的容器

docker rm 容器id:删除对应的容器

如果想要删除某个容器,需要先将容器停止,然后才能删除

先执行docker stop 容器名,再执行docker rm 容器id,容器id可以通过docker ps查看获取

(4)验证redis是否运行

docker logs -f redis

 出现上述信息,redis运行成功

下面就进行项目打包部署

5.项目打jar包,准备dockerfile文件,需要在linux中将jar包以及dockerfile文件放在同一目录下

(1)项目打jar包,可以直接在idea中执行

也可以在终端执行命令:

1.mvn clean

2.mvn package

或者直接执行mvn clean package 

(2)上传到服务器,可以自己创建一个目录,比如在data目录下创建一个car目录

先进入到data目录

cd data
mkdir car

输入ls查看data目录下具体内容

 

可以看到目前有car和redis两个目录,进入到car目录,将jar包放入

(3)上传dockerfile文件

FROM openjdk:8-jdk

MAINTAINER mozz

RUN apt-get update && \
    apt-get install -y curl bash tzdata && \
    rm -rf /var/lib/apt/lists/*

ENV ACTIVE="prod"
VOLUME ["/tmp"]
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Dspring.profiles.active=${ACTIVE}","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

一定要注意:

1.from一定写在最开始,不要写在run下面,不然会报错

2.现在都是openjdk:8-jdk,旧版java:8已经不适用了

3.将该文件放入到car目录下

此时执行ls,可以看到car目录下有jar包可dockerfile文件,一定要放在一个目录下

 

(4)构建jar包

docker build --build-arg JAR_FILE=crud.jar -t webcam-back:new .

其中:

JAR_FILE=crud.jar:对应的jar包位置

-t webcam-back: 容器名称比如webcam-back

(5)启动构建好的容器webcam-back

docker run -d -p 8080:8888 --name webcam-back --restart=always webcam-back:new

这边需要注意的是端口映射问题:我代码中的端口是8888,可以做一个8080端口映射,这样最终访问的时候可以直接访问ip:8080

注意:8080端口需要在阿里云安全组或者防火墙模板中开放一下

(5)查看日志

docker log -f webcam-back

最终访问地址:

 

可以看到,启动成功

注意:重新上传jar包都需要重新构建一下,比如上图我正在运行中的容器有webcam-back,但是我修改了代码,需要重新上传jar包,具体流程:

1.停止运行的容器:docker stop   webcam-back,此时docker ps(正在运行的容器)看不到webcam-back容器,但是docker ps -a(所有容器)可以看到

2.删除对应容器:docker rm 0120ea433af6(这个可以通过docker ps -a 查看得到),此时再执行docker ps -a查看所有容器,就看不到webcam-back了

3.再次执行构建命令并运行

docker build --build-arg JAR_FILE=crud.jar -t webcam-back:new .
docker run -d -p 8080:8888 --name webcam-back --restart=always webcam-back:new

4.再次查看日志启动情况

docker log -f webcam-back

至此整个项目部署结束。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐