Java项目Docker部署

发布于:2024-12-07 ⋅ 阅读:(151) ⋅ 点赞:(0)

        docker将应用程序与该程序的依赖打包在一个文件里。运行这个文件就会生成一个虚拟容器,就不用担心环境问题,还可以进行版本管理、复制修改等。

docker安装

由于在CentOS下安装docker最常用,所以以Linux环境安装为主

1.安装工具包

缺少依赖无法完成

    $ sudo yum install -y yum-utils

2.设置远程仓库

    $sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3.安装

    $ sudo yum install docker-ce

4.启动

    $ sudo systemctl start docker
    或者
    $ sudo service docker start
    service docker start        #启动docker
    chkconfig docker on         #加入开机启动

5.查看版本

    $ sudo docker version

6.相关命令
镜像相关

        docker imager: 列出本地的镜像

        docker pull <image_name>: 从远程仓库拉取镜像到本地。

        docker push <image_name>: 将本地镜像推送到远程仓库。

        docker build -t <image_name> <dockerfile_path>: 基于 Dockerfile 构建镜像。

        docker tag <image_id> <new_image_name>: 为镜像添加标签。

        docker rmi <image_id>: 删除指定的镜像

      容器相关

        docker ps: 列出正在运行的容器。
        docker ps -a: 列出所有容器,包括停止的容器。
        docker run <image_name>: 创建并启动一个容器。
        docker start <container_id>: 启动一个已停止的容器。
        docker stop <container_id>: 停止一个正在运行的容器。
        docker restart <container_id>: 重启一个容器。
        docker rm <container_id>: 删除一个容器。
        docker exec -it <container_id> <command>: 在正在运行的容器中执行命令。
        docker logs <container_id>: 查看容器的日志

docker自定义网络

加入自定义网络中的容器才可以通过容器名相互访问

1.创建网络:网络名称为:lgcgknetwork

 docker network create lgcgknetwork

2.查看网络名称

docker network ls

 3.连接容器到网络

把名为mysql的容器加入到lgcgknetwork网络中:

docker network connect lgcgknetwork mysql

4.断开容器与网络的连接

把名为mysql的容器在lgcgknetwork网络中断开

 docker network disconnect lgcgknetwork mysql

5.删除网络

删除指定网络lgcgknetwork

 docker network rm lgcgknetwork

docker数据卷挂载

数据容器卷:是一种将容器内部目录和本地目录进行挂载的技术,它允许将容器内的数据持久化,并且可以在容器之间共享数据和重用数据

1.创建数据卷

docker volume create myvolume

2.运行容器时挂载数据卷

docker run -d --name mycontainer -v myvolume:/data myimage

解释:

myvolume 是数据卷的名称,/data 是容器内挂载点的路径,myimage 是要运行的 Docker 镜像

3.挂载主机目录到容器

docker run -d --name mycontainer -v /path/on/host:/path/in/container myimage

解释:

挂载一个数据卷。/path/on/host 是宿主机上的路径,/path/in/container 是容器内部的路径。容器启动后,宿主机的 /path/on/host 目录将被挂载到容器的 /path/in/container 目录,容器内对 /path/in/container 的操作会反映到宿主机的 /path/on/host 上。

4.查看数据卷信息

docker volume inspect myvolume

5.删除数据卷

docker volume rm myvolume

6.本地目录挂载

-v ./mysql8/data:/var/lib/mysql

在执行docker run命令时,使用-v 本地目录:容器内目录 可以完成本地目录挂载

本地目录必须以“/”或"./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录

        -v mysql:/var/lib/mysgl 会被识别为一个数据卷叫mysql

        -v ./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录

docker部署mysql

1.拉取mysql镜像

2.运行mysql容器

docker run -d --name mysql8 \

        -p 3306:3306 \

        -e TZ=Asia/Shanghai \

        -e MYSQL_ROOT_PASSWORD=123456 \

        -v ./mysql8/data:/var/lib/mysql \

        -v ./mysql8/conf:/etc/mysql/conf.d \

        -v ./mysql8/init:/docker-entrypoint-initdb.d \

        --network lgcgknetwork \

mysql:8.0

参数的解释:

  1. docker run:Docker 命令,用于创建并启动一个新的容器。

  2. -d:以分离模式运行容器,即在后台运行。

  3. --name mysql8:为容器指定一个名称,这里是 mysql8

  4. -p 3306:3306:将容器的 3306 端口映射到宿主机的 3306 端口。这样,宿主机和其他机器可以通过宿主机的 3306 端口访问容器中的 MySQL 服务。

  5. -e TZ=Asia/Shanghai:设置容器的时区为上海时区。

  6. -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 的 root 用户的密码为 123456。这个环境变量用于在 MySQL 启动时设置 root 用户的密码。

  7. -v ./mysql8/data:/var/lib/mysql:将宿主机的 ./mysql8/data 目录挂载到容器的 /var/lib/mysql 目录。这样,MySQL 的数据文件就存储在宿主机上,容器重启后数据不会丢失。

  8. -v ./mysql8/conf:/etc/mysql/conf.d:将宿主机的 ./mysql8/conf 目录挂载到容器的 /etc/mysql/conf.d 目录。这样,可以自定义 MySQL 的配置文件。

  9. -v ./mysql8/init:/docker-entrypoint-initdb.d:将宿主机的 ./mysql8/init 目录挂载到容器的 /docker-entrypoint-initdb.d 目录。这个目录用于存放初始化 MySQL 数据库时执行的 SQL 脚本。

  10. --network lgcgknetwork:指定容器连接的 Docker 网络,这里是 lgcgknetwork

  11. mysql:8.0:指定要运行的 Docker 镜像名称,这里是 MySQL 镜像及版本。

docker部署nginx

创建并运行nginx容器

docker run -d --name \

        -p 6001:6001 \

        -v ./nginx/html:/usr/share/nginx/html \

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

        --network lgcgknetwork \

nginx

访问:ip:端口/index.html

docker部署java应用jar包

1.下载Java8镜像容器

docker run -d -it --name java-8 openjdk:8

2.编写Dockerfile文件

FROM openjdk:8

ENV PARAMS=""

ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD target/xxl-job-admin-*.jar /xxl-job-admin.jar

ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /xxl-job-admin.jar $PARAMS"]

解释:

# 指定基础镜像为 openjdk:8,这是一个官方提供的带有 Java 8 的 Docker 镜像
FROM openjdk:8

# 设置环境变量 PARAMS,初始为空字符串,可以在构建时通过 --build-arg 参数传递值
ENV PARAMS=""

# 设置时区为 PRC(中国标准时间)
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 将本地的 target 目录下以 xxl-job-admin- 开头的 jar 文件复制到容器中的当前目录,并重命名为 /xxl-job-admin.jar
ADD target/xxl-job-admin-*.jar /xxl-job-admin.jar

# 设置容器启动时执行的命令,使用 java -jar 启动 /xxl-job-admin.jar,并传递环境变量 PARAMS 和 JAVA_OPTS(如果设置了 JAVA_OPTS)
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /xxl-job-admin.jar $PARAMS"]

3.启动

把Dockerfile文件和jar包上传到root目录下:

构建镜像:

docker build -t xxlJobAdmin .

 创建并运行容器

docker run -d --name xxlJobAdmin  -p 6002:6002 --network lgcgknetwork xxlJobAdmin

浏览器访问: