如何将Docker基础与Springboot项目高效部署?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2942个文字,预计阅读时间需要12分钟。
Docker简介:Docker是一种Linux容器技术,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案,有效解决了传统虚拟化技术的局限性。Linux容器技术是Linux发展出的另一种虚拟化技术,它通过轻量级的隔离实现应用与环境分离,简化了应用部署和运维。
Docker简介Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
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 dockerDocker系统常用命令 Docker镜像常用命令 搜索镜像
下载镜像docker search javadocker pull java:8查看镜像版本由于
docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过Docker Hub来搜索支持的版本。- 进入
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-SNAPSHOTDocker容器常用命令 新建并启动容器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
MySQL安装docker exec -it $ContainerName /bin/bash- 下载MySQL
5.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安装- 下载Redis
5.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-cliNginx安装- 下载Nginx
1.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.10RabbitMQ安装- 下载rabbitmq
3.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_managementSpringboot整合Docker打包Docker开启2375端口配合Spirngboot Maven打包插件实现镜像上传
前提条件:
1.安装好docker后开启2375端口 用于springboot远程连接实现镜像上传,此方案存在风险,一般只推荐测试环境使用。
2.Springboot配置maven插件
pom核心插件
服务器查看镜像 springboot项目启动配置服务器地址及插件 <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>正常打包docker run -p 8080:8080 --name springboottest --link mysql:db -d mall/springboot-mybatis-plus:0.0.1-SNAPSHOT直接访问端口即可测试接口
本文共计2942个文字,预计阅读时间需要12分钟。
Docker简介:Docker是一种Linux容器技术,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案,有效解决了传统虚拟化技术的局限性。Linux容器技术是Linux发展出的另一种虚拟化技术,它通过轻量级的隔离实现应用与环境分离,简化了应用部署和运维。
Docker简介Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
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 dockerDocker系统常用命令 Docker镜像常用命令 搜索镜像
下载镜像docker search javadocker pull java:8查看镜像版本由于
docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过Docker Hub来搜索支持的版本。- 进入
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-SNAPSHOTDocker容器常用命令 新建并启动容器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
MySQL安装docker exec -it $ContainerName /bin/bash- 下载MySQL
5.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安装- 下载Redis
5.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-cliNginx安装- 下载Nginx
1.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.10RabbitMQ安装- 下载rabbitmq
3.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_managementSpringboot整合Docker打包Docker开启2375端口配合Spirngboot Maven打包插件实现镜像上传
前提条件:
1.安装好docker后开启2375端口 用于springboot远程连接实现镜像上传,此方案存在风险,一般只推荐测试环境使用。
2.Springboot配置maven插件
pom核心插件
服务器查看镜像 springboot项目启动配置服务器地址及插件 <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>正常打包docker run -p 8080:8080 --name springboottest --link mysql:db -d mall/springboot-mybatis-plus:0.0.1-SNAPSHOT直接访问端口即可测试接口

