java jar包CentOS系统docker运行全流程

0 阅读4分钟

1、提前准备centos系统,此步骤自行搜索

2、安装docker

2.1、安装yum-utils、 安装Docker所需的依赖包

先卸载旧docker

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-selinux 

安装yum-utils

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.2、配置国内源
#提升下载速达
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.3、安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io --nobest

我用的是centos8,其中已经安装了containerd.io,所以加上--nobest参数,让他自己选择相应的包即可

2.4查看docker版本
 docker -v
2.5启动docker并验证
 systemctl stop docker 
 # 重启 
 systemctl restart docker 
 # 设置开机自启 
 systemctl enable docker 
 # 执行docker ps命令,如果不报错,说明安装启动成功 
 docker ps
 

3、安装java环境 mysql、redis、nginx

- mysql:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /mysoft/mysql/data:/var/lib/mysql \
  -v /mysoft/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
  -v /mysoft/mysql/init:/docker-entrypoint-initdb.d \
  -v /mysoft/mysql/logs:/var/log/mysql \
  --network hm-net\
  mysql
  


docker run  :创建并运行一个容器 , -d 后台运行

--name mysql :容器名

-p 3306:3306 :设置端口映射 宿主机端口映射到容器端口

-e key=value :设置环境变量

-e TZ=Asia/Shanghai

-e MYSQL_ROOT_PASSWORD=123

-v path1:path2 :设置文件映射 宿主文件口映射到容器映射路径   容器映射路径不可更改

-v /root/mysql/data:/var/lib/mysql

-v /root/mysql/conf:/etc/mysql/conf.d

-v /root/mysql/init:/docker-entrypoint-initdb.d

 --network hm-net\  :设置网络
 
  --restart=always \ :开机自启

mysql :镜像名 镜像名结果 repository(镜像名):tag(版本号) 不指定tag时,默认是latest,代表最新版本的镜像

- nginx:

提前创建/mysoft/nginx/conf目录和default.conf文件

docker run -d \
  --name nginx \
  -p 80:80 \
  -v /mysoft/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \  #省略此行
  -v /mysoft/nginx/conf.d:/etc/nginx/conf.d \
  -v /mysoft/nginx/html:/usr/share/nginx/html \
  -v /mysoft/nginx/logs:/var/log/nginx \
  --network hm-net\
  nginx
  
  • nginx-temp:/etc/nginx/nginx.conf 容器内核心配置 nginx.conf,该文件是 Nginx 的全局配置,一般无需大幅修改,其中包括:

    #末尾已有该配置,无需修改,作用是加载 conf.d 目录下所有 .conf 后缀的配置 include /etc/nginx/conf.d/*.conf;

  • nginx-temp:/etc/nginx/conf.d 容器内虚拟主机配置目录,默认的站点配置default.conf,个人配置可在此文件实现

- redis:

提前创建/mysoft/redis/conf目录和redis.conf文件

  docker run -d \
     --name redis \
     -p 6379:6379 \
     -e TZ=Asia/Shanghai \
     -v /mysoft/redis/conf/redis.conf:/etc/redis/redis.conf \
     -v /mysoft/redis/data:/data \
     -v /mysoft/redis/logs:/var/log/redis \
     --network hm-net \
     redis:latest \
     redis-server /etc/redis/redis.conf

命令参数解释(关键部分重点说明)

  • -d:后台运行容器

  • --name redis:给容器命名为 redis,方便后续操作

  • --restart always:Docker 重启时,该容器也自动重启(实用配置)

  • -p 6379:6379:端口映射,本地 6379 端口映射到容器内 6379 端口(本地可通过 127.0.0.1:6379 访问

  • Redis)

  • 第一个 -v:/usr/local/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf

  • 本地配置文件 :/ 容器内配置文件(路径必须精确到 redis.conf,不是目录)

  • 容器内 Redis 配置文件路径可通过 docker inspect redis 确认,官方镜像默认在 /usr/local/etc/redis/redis.conf

  • 第二个 -v:/usr/local/redis/data:/data

  • 本地数据目录映射到容器内 /data 目录(对应 redis.conf 中 dir 配置,实现数据持久化)

  • redis:latest:使用的 Redis 镜像版本(latest 为最新版,可替换为 7.0、6.2 等指定版本)

  • redis-server /usr/local/etc/redis/redis.conf:容器启动命令,指定 Redis 以容器内的配置文件启动(这是映射配置生效的关键,必须加上)

4、构建jar包镜像

先编辑Dockerfile,可根据实际需求配置

 # 引用本机镜像
 FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/adoptopenjdk/openjdk8:x86_64-centos-jre8u472-b08

# 容器内工作目录
WORKDIR /app
# 拷贝本地 app.jar 到容器内
COPY app.jar /app/app.jar
# 暴露项目端口
EXPOSE 8080
# 容器启动命令
ENTRYPOINT ["java", "-jar", "-Djava.security.egd=file:/dev/./urandom", "/app/app.jar"]
4.1、将Dockerfile 和 jar包方在同一目录下,执行构建镜像命令,后面的“.”一带要带上。

在执行下方命令是,容易报错;大体意思就是因为各种原因无法拉取openJDK,(主要是docker官方镜像对国内不友好),可以先拉取jdk镜像, 然后引用本机jdk镜像打包。

docker build -t my-app:latest .   

若是一直报错,使用绝招

  • 从其他能正常访问 Docker 仓库的机器上拉取 openjdk:8-jre-alpine 镜像,导出为 tar 包:
docker pull openjdk:8-jre-alpine
docker save -o openjdk8-jre-alpine.tardisopenjdk:8-jre-alpine
  • 将 tar 包拷贝到你的服务器上,执行导入命令:
 docker load -i openjdk8-jre-alpine.tar
  • 导入成功后,重新构建镜像。

4.2、构建成功后docker images 检查是否构建成功,成功后启动
docker run -d \
    --name my-project \
    -p 8081:8080 \
    -v /mysoft/my-project/logs:/app/logs \
    --network hm-net\
   my-app