如何将Docker基础与Springboot项目高效部署?

2026-04-18 01:432阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2942个文字,预计阅读时间需要12分钟。

如何将Docker基础与Springboot项目高效部署?

Docker简介:Docker是一种Linux容器技术,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案,有效解决了传统虚拟化技术的局限性。Linux容器技术是Linux发展出的另一种虚拟化技术,它通过轻量级的隔离实现应用与环境分离,简化了应用部署和运维。

Docker简介

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker重要概念

1)image镜像: docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下一个已经做好的镜像来直接使用

2)container容器 :docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序

3)repostory仓库 :仓库是集中存储镜像文件的沧桑,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag) 仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下载,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。

Docker基础安装及常用环境配置使用 Docker环境安装
  • 安装yum-utils

yum install -y yum-utils device-mapper-persistent-data lvm2

  • 为yum源添加docker仓库位置:

    使用官方源地址(比较慢)可以更换repo地址到国内的镜像

    阿里云镜像: download.docker.com/linux/centos/docker-ce.repo

    • 安装docker:

    yum install docker-ce

    • 启动docker:

    systemctl start docker Docker系统常用命令 Docker镜像常用命令 搜索镜像

    docker search java

    下载镜像

    docker pull java:8 查看镜像版本

    由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过Docker Hub来搜索支持的版本。

    如何将Docker基础与Springboot项目高效部署?

    • 进入Docker Hub的官网,地址:hub.docker.com
    • 然后搜索需要的镜像:

    • 查看镜像支持的版本:
    • 进行镜像的下载操作:

    docker pull nginx:1.17.0 列出镜像

    docker images

    删除镜像
    • 指定名称删除镜像:

    docker rmi java:8

    • 指定名称删除镜像(强制):

    docker rmi -f java:8

    • 删除所有没有引用的镜像:

    docker rmi `docker images | grep none | awk '{print $3}'`

    • 强制删除所有镜像:

    docker rmi -f $(docker images) 打包镜像

    # -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile文件 docker build -t mall/mall-admin:1.0-SNAPSHOT . 推送镜像

    # 登录Docker Hub docker login # 给本地镜像打标签为远程仓库名称 docker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOT # 推送到远程仓库 docker push macrodocker/mall-admin:1.0-SNAPSHOT Docker容器常用命令 新建并启动容器

    docker run -p 80:80 --name nginx \ -e TZ="Asia/Shanghai" \ -v /mydata/nginx/html:/usr/share/nginx/html \ -d nginx:1.17.0

    • -p:将宿主机和容器端口进行映射,格式为:宿主机端口:容器端口;
    • --name:指定容器名称,之后可以通过容器名称来操作容器;
    • -e:设置容器的环境变量,这里设置的是时区;
    • -v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;
    • -d:表示容器以后台方式运行。
    列出容器
    • 列出运行中的容器:

    docker ps

    • 列出所有容器:

    docker ps -a

    停止容器

    注意:$ContainerName表示容器名称,$ContainerId表示容器ID,可以使用容器名称的命令,基本也支持使用容器ID,比如下面的停止容器命令。

    docker stop $ContainerName(or $ContainerId)

    例如:

    docker stop nginx #或者 docker stop c5f5d5125587 启动容器

    docker start $ContainerName 删除容器

    • 删除指定容器:

    docker rm $ContainerName 查看容器的日志

    • 查看容器产生的全部日志:

    docker logs $ContainerName

    • 动态查看容器产生的日志:

    docker logs -f $ContainerName 查看容器资源占用状况

    • 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:

    docker stats $ContainerName

    • 查看所有容器资源占用情况:

    docker stats -a

    查看容器磁盘使用情况

    docker system df

    执行容器内部命令

    docker exec -it $ContainerName /bin/bash

    MySQL安装
    • 下载MySQL5.7的docker镜像:

    docker pull mysql:5.7

    • 使用如下命令启动MySQL服务:

    docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7

    • 参数说明
      • -p 3306:3306:将容器的3306端口映射到主机的3306端口
      • -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
      • -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
      • -v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
      • -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
    • 进入运行MySQL的docker容器:

    docker exec -it mysql /bin/bash

    • 使用MySQL命令打开客户端:

    mysql -uroot -proot --default-character-set=utf8

    • 创建mall数据库:

    create database mall character set utf8

    • 安装上传下载插件,并将document/sql/mall.sql上传到Linux服务器上:

    yum -y install lrzsz

    • mall.sql文件拷贝到mysql容器的/目录下:

    docker cp /mydata/mall.sql mysql:/

    • 将sql文件导入到数据库:

    use mall; source /mall.sql;

    • 创建一个reader:123456帐号并修改权限,使得任何ip都能访问:

    grant all privileges on *.* to 'reader' @'%' identified by '123456'; Redis安装

    • 下载Redis5.0的docker镜像:

    docker pull redis:5

    • 使用如下命令启动Redis服务:

    docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -d redis:5 redis-server --appendonly yes

    • 进入Redis容器使用redis-cli命令进行连接:

    docker exec -it redis redis-cli Nginx安装

    • 下载Nginx1.10的docker镜像:

    docker pull nginx:1.10

    • 先运行一次容器(为了拷贝配置文件):

    docker run -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -d nginx:1.10

    • 将容器内的配置文件拷贝到指定目录:

    docker container cp nginx:/etc/nginx /mydata/nginx/

    • 修改文件名称:

    mv nginx conf

    • 终止并删除容器:

    docker stop nginx docker rm nginx

    • 使用如下命令启动Nginx服务:

    docker run -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -v /mydata/nginx/conf:/etc/nginx \ -d nginx:1.10 RabbitMQ安装

    • 下载rabbitmq3.7.15的docker镜像:

    docker pull rabbitmq:3.7.15

    • 使用如下命令启动RabbitMQ服务:

    docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \ -d rabbitmq:3.7.15

    • 进入容器并开启管理功能:

    docker exec -it rabbitmq /bin/bash rabbitmq-plugins enable rabbitmq_management Springboot整合Docker打包

    Docker开启2375端口配合Spirngboot Maven打包插件实现镜像上传

    前提条件:

    1.安装好docker后开启2375端口 用于springboot远程连接实现镜像上传,此方案存在风险,一般只推荐测试环境使用。

    2.Springboot配置maven插件

    pom核心插件

    配置服务器地址及插件 <properties> <java.version>1.8</java.version> <docker.host>127.0.0.1:2375</docker.host> <docker.maven.plugin.version>1.2.2</docker.maven.plugin.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--Docker 打包插件--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.maven.plugin.version}</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>mall/${project.artifactId}:${project.version}</imageName> <dockerHost>${docker.host}</dockerHost> <baseImage>java: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> </configuration> </plugin> </plugins> </build> 正常打包

    服务器查看镜像

    springboot项目启动

    docker run -p 8080:8080 --name springboottest --link mysql:db -d mall/springboot-mybatis-plus:0.0.1-SNAPSHOT

    直接访问端口即可测试接口

本文共计2942个文字,预计阅读时间需要12分钟。

如何将Docker基础与Springboot项目高效部署?

Docker简介:Docker是一种Linux容器技术,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案,有效解决了传统虚拟化技术的局限性。Linux容器技术是Linux发展出的另一种虚拟化技术,它通过轻量级的隔离实现应用与环境分离,简化了应用部署和运维。

Docker简介

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker重要概念

1)image镜像: docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下一个已经做好的镜像来直接使用

2)container容器 :docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序

3)repostory仓库 :仓库是集中存储镜像文件的沧桑,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag) 仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下载,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。

Docker基础安装及常用环境配置使用 Docker环境安装
  • 安装yum-utils

yum install -y yum-utils device-mapper-persistent-data lvm2

  • 为yum源添加docker仓库位置:

    使用官方源地址(比较慢)可以更换repo地址到国内的镜像

    阿里云镜像: download.docker.com/linux/centos/docker-ce.repo

    • 安装docker:

    yum install docker-ce

    • 启动docker:

    systemctl start docker Docker系统常用命令 Docker镜像常用命令 搜索镜像

    docker search java

    下载镜像

    docker pull java:8 查看镜像版本

    由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过Docker Hub来搜索支持的版本。

    如何将Docker基础与Springboot项目高效部署?

    • 进入Docker Hub的官网,地址:hub.docker.com
    • 然后搜索需要的镜像:

    • 查看镜像支持的版本:
    • 进行镜像的下载操作:

    docker pull nginx:1.17.0 列出镜像

    docker images

    删除镜像
    • 指定名称删除镜像:

    docker rmi java:8

    • 指定名称删除镜像(强制):

    docker rmi -f java:8

    • 删除所有没有引用的镜像:

    docker rmi `docker images | grep none | awk '{print $3}'`

    • 强制删除所有镜像:

    docker rmi -f $(docker images) 打包镜像

    # -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile文件 docker build -t mall/mall-admin:1.0-SNAPSHOT . 推送镜像

    # 登录Docker Hub docker login # 给本地镜像打标签为远程仓库名称 docker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOT # 推送到远程仓库 docker push macrodocker/mall-admin:1.0-SNAPSHOT Docker容器常用命令 新建并启动容器

    docker run -p 80:80 --name nginx \ -e TZ="Asia/Shanghai" \ -v /mydata/nginx/html:/usr/share/nginx/html \ -d nginx:1.17.0

    • -p:将宿主机和容器端口进行映射,格式为:宿主机端口:容器端口;
    • --name:指定容器名称,之后可以通过容器名称来操作容器;
    • -e:设置容器的环境变量,这里设置的是时区;
    • -v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;
    • -d:表示容器以后台方式运行。
    列出容器
    • 列出运行中的容器:

    docker ps

    • 列出所有容器:

    docker ps -a

    停止容器

    注意:$ContainerName表示容器名称,$ContainerId表示容器ID,可以使用容器名称的命令,基本也支持使用容器ID,比如下面的停止容器命令。

    docker stop $ContainerName(or $ContainerId)

    例如:

    docker stop nginx #或者 docker stop c5f5d5125587 启动容器

    docker start $ContainerName 删除容器

    • 删除指定容器:

    docker rm $ContainerName 查看容器的日志

    • 查看容器产生的全部日志:

    docker logs $ContainerName

    • 动态查看容器产生的日志:

    docker logs -f $ContainerName 查看容器资源占用状况

    • 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:

    docker stats $ContainerName

    • 查看所有容器资源占用情况:

    docker stats -a

    查看容器磁盘使用情况

    docker system df

    执行容器内部命令

    docker exec -it $ContainerName /bin/bash

    MySQL安装
    • 下载MySQL5.7的docker镜像:

    docker pull mysql:5.7

    • 使用如下命令启动MySQL服务:

    docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7

    • 参数说明
      • -p 3306:3306:将容器的3306端口映射到主机的3306端口
      • -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机
      • -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
      • -v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机
      • -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
    • 进入运行MySQL的docker容器:

    docker exec -it mysql /bin/bash

    • 使用MySQL命令打开客户端:

    mysql -uroot -proot --default-character-set=utf8

    • 创建mall数据库:

    create database mall character set utf8

    • 安装上传下载插件,并将document/sql/mall.sql上传到Linux服务器上:

    yum -y install lrzsz

    • mall.sql文件拷贝到mysql容器的/目录下:

    docker cp /mydata/mall.sql mysql:/

    • 将sql文件导入到数据库:

    use mall; source /mall.sql;

    • 创建一个reader:123456帐号并修改权限,使得任何ip都能访问:

    grant all privileges on *.* to 'reader' @'%' identified by '123456'; Redis安装

    • 下载Redis5.0的docker镜像:

    docker pull redis:5

    • 使用如下命令启动Redis服务:

    docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -d redis:5 redis-server --appendonly yes

    • 进入Redis容器使用redis-cli命令进行连接:

    docker exec -it redis redis-cli Nginx安装

    • 下载Nginx1.10的docker镜像:

    docker pull nginx:1.10

    • 先运行一次容器(为了拷贝配置文件):

    docker run -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -d nginx:1.10

    • 将容器内的配置文件拷贝到指定目录:

    docker container cp nginx:/etc/nginx /mydata/nginx/

    • 修改文件名称:

    mv nginx conf

    • 终止并删除容器:

    docker stop nginx docker rm nginx

    • 使用如下命令启动Nginx服务:

    docker run -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -v /mydata/nginx/conf:/etc/nginx \ -d nginx:1.10 RabbitMQ安装

    • 下载rabbitmq3.7.15的docker镜像:

    docker pull rabbitmq:3.7.15

    • 使用如下命令启动RabbitMQ服务:

    docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \ -d rabbitmq:3.7.15

    • 进入容器并开启管理功能:

    docker exec -it rabbitmq /bin/bash rabbitmq-plugins enable rabbitmq_management Springboot整合Docker打包

    Docker开启2375端口配合Spirngboot Maven打包插件实现镜像上传

    前提条件:

    1.安装好docker后开启2375端口 用于springboot远程连接实现镜像上传,此方案存在风险,一般只推荐测试环境使用。

    2.Springboot配置maven插件

    pom核心插件

    配置服务器地址及插件 <properties> <java.version>1.8</java.version> <docker.host>127.0.0.1:2375</docker.host> <docker.maven.plugin.version>1.2.2</docker.maven.plugin.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--Docker 打包插件--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.maven.plugin.version}</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>mall/${project.artifactId}:${project.version}</imageName> <dockerHost>${docker.host}</dockerHost> <baseImage>java: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> </configuration> </plugin> </plugins> </build> 正常打包

    服务器查看镜像

    springboot项目启动

    docker run -p 8080:8080 --name springboottest --link mysql:db -d mall/springboot-mybatis-plus:0.0.1-SNAPSHOT

    直接访问端口即可测试接口