环境配置
maven设置
maven下载:Index of /maven/maven-3/3.6.3/binaries
windows:https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip
Linux:https://dlcdn.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
配置本地仓库件
<localRepository>C:\yykk\respository</localRepository>
配置阿里云镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
配置maven的环境变量
开一个cmd黑窗口输入:mvn -v ,查看是否配置成功
linux安装maven
参考文章:linux安装maven - 简书
购买服务器
准备阿里云ESC云服务器,操作系统是:centos7.x,并安装好Java环境,建议配置是:2core8G内存。
配置环境
安装finalshell
Windows版下载地址:
http://www.hostbuf.com/downloads/finalshell_install.exe
macOS版下载地址:
http://www.hostbuf.com/downloads/finalshell_install.pkg
连接服务器
链接成功以后,把系统更新一遍
yum update
安装jdk
yum install java-1.8.0-openjdk* -y
查看是否安装成功
java -v
一、SpringBoot原生打包部署jar
1、mvn clean package
将任何springboot应用程序项目使用:mvn clean package
命令打包。将在target目录下生成可执行的jar包。
springboot的打包方式是 jar,默认情况下可以不写
<packaging>jar</packaging>
默认情况下,springboot打包的包名是:<artifactId>-<version>.jar
mydemo-0.0.1-SNAPSHOT.jar
如果你指定包名,如下
<build>
<finalName>springdocker</finalName>
</build>
2、执行java -jar xxx.jar
然后在cmd中执行java -jar xxx.jar
来运行springboot程序。但是一旦关闭cmd窗口,程序便被立即关闭从而无法访问了。
3、进程(守护式)方式启动
# 启动项目并指定端口为8088,日志在1.txt中进行打印
nohup java -jar xxx.jar --server.port=8088 >>1.txt &
# 打开1.txt的日志文件
tail -f 1.txt
关闭窗口不会结束运行,继续在后台运行
可以通过命令来查看运行的springBoot应用程序
ps -ef | grep xxxx
之后通过kill杀死进程
kill xxx
kill -9 xxx 强制杀掉进程
访问端口端口时,阿里云一定要把安全组中的端口号打开
二、springboot打包部署docker
docker安装官网地址:Install Docker Engine on CentOS | Docker Documentation
1、安装docker
卸载旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
设置存储库
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装 Docker 引擎
sudo yum install docker-ce docker-ce-cli containerd.io
要安装特定版本的 Docker Engine,请在 repo 中列出可用版本,然后选择并安装:列出并排序您的存储库中可用的版本。此示例按版本号从最高到最低对结果进行排序,
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
返回的列表取决于启用了哪些存储库,并且特定于您的 CentOS 版本(.el7
在本例中由后缀表示)。
湾。通过其完全限定的包名称安装特定版本,即包名称 ( docker-ce
) 加上版本字符串(第 2 列),从第一个冒号 ( :
) 开始,一直到第一个连字符,用连字符 ( -
)分隔。例如,docker-ce-18.09.1
。
安装指定的版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
启动docker
sudo systemctl start docker
sudo systemctl status docker
通过运行hello-world
映像来验证 Docker 引擎是否已正确安装。
sudo docker run hello-world
或者
docker --version
或者
docker info #查看安装目录
配置docker镜像加速器
配置其他加速器
# 编辑该文件:
mkdir -p /etc/docker
vi /etc/docker/daemon.json
# 在该文件中输入如下内容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
# 配置多个如下:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"registry-mirrors": ["https://0wrdwnn6.mirror.aliyuncs.com"]
}
或者执行
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io
好处:可以快速帮助你下镜像。
2、Docker的命令
# 启动docker:
systemctl start docker
# 停止docker:
systemctl stop docker
# 重启docker:
systemctl restart docker
# 查看docker状态:
systemctl status docker
# 开机启动:
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker帮助文档
docker --help
# docker查看日志
docker logs -f 容器名字||容器Id
# 查看镜像
docker images
#镜像内容如下:
#REPOSITORY:镜像名称
#TAG:镜像标签 (默认是可以省略的,也就是latest)
#IMAGE ID:镜像ID
#CREATED:镜像的创建日期(不是获取该镜像的日期)
#SIZE:镜像大小
#这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
# 拉取镜像
docker pull 镜像名称
docker pull redis
#等价于
docker pull redis:latest
# 指定版本号
docker pull redis:6.2.6
# 删除镜像
docker rmi 镜像ID
docker rmi 镜像名称
docker rmi `docker images -q` 删除所有镜像(谨慎操作)
docker rmi $(docker images -f "dangling=true" -q) 删除所有没用为none的镜像
# 容器命令
# 查看容器
# 查看最后一次运行的容器
docker ps -l
# 查看运行容器
docker ps
# 查看所有容器
docker ps -a
#进入容器,其中字符串为容器ID:
docker exec -it d27bd3008ad9 /bin/bash
# 停用全部运行中的容器:
docker stop $(docker ps -q)
# 删除全部容器:
docker rm $(docker ps -aq)
# 一条命令实现停用并删除容器:
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
# 创建容器
#创建容器命令
docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
- -容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到容器上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
# 交互式方式创建容器(创建以后就进入到容器内部了)
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
#这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态
#退出当前容器
exit
# 守护式方式创建容器
docker run -di --name=容器名称 镜像名称:标签
# 登录守护式容器方式
docker exec -it 容器名称 (或者容器ID) /bin/bash
docker exec -it 容器名称 (或者容器ID) sh
#停止容器:
docker stop 容器名称(或者容器ID)
# 启动容器:
docker start 容器名称(或者容器ID)
# 重启容器:
docker start 容器名称(或者容器ID)
# 删除指定的容器:
# 删除容器的时候,一定要先执行停止容器命令
docker rm 容器名称(容器ID)
# 查看容器日志
$ docker logs [OPTIONS] CONTAINER
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
docker logs -f 容器名字||容器Id
# 查看指定时间后的日志,只显示最后100行
$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
# 查看最近30分钟的日志
$ docker logs --since 30m CONTAINER_ID
# 查看某时间之后的日志:
$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
# 查看某时间段日志
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
# 查看容器内部消息
docker inspect 容器名字||容器Id | 镜像id | 镜像名字
docker inspect tomcat
# 文件拷贝
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp hello.txt mynginx:/usr/local
#也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp mynginx:/usr/local/hello.txt hello.txt
# 目录文件挂载
# 就是目录映射,修改宿主机的文件,会自动修改容器内部的文件。
# 可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器。
# 创建容器 添加-v参数 后边为 宿主机目录:容器目录
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
搜索其他镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索 docker search 镜像名称
NAME:仓库名称 DESCRIPTION:镜像描述 STARS:用户评价,反应一个镜像的受欢迎程度 OFFICIAL:是否官方 AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
3、docker安装mysql
官网搜索:Docker Hub
拉取mysql镜像
docker pull mysql:5.7.36
创建容器
桥接模型:
docker run -di --name=mymysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mima mysql:5.7.36
# 或者
docker run --name mymysql1 -e MYSQL_ROOT_PASSWORD=mima -d mysql:5.7.36 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# 修改端口号
docker run -di --name=tensquare_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=mima centos/mysql-57-centos7
Host模型
docker run -di --name=mymysql2 --net=host -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mima mysql:5.7.36
p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
查看日志
docker logs -f mymysql
查询mysql服务的ip
docker inspect mymysql1
注意如果是云服务器上面宿主机的端口:3306(或修改端口的3307)必须在安全组开发。
在yml配置mysql时修改ip地址
4、dockerfile构建镜像
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
5、SpringBoot打包部署-Dockerfile + Maven发布项目
执行打包镜像命名
docker build -t='jdk1.8' .
.代表的就是:Dockerfile文件。jdk1.8:是镜像的名称
在项目根目录下创建Dockerfile
文件。与target目录平齐。
#FROM java:8 设置基础镜像
FROM openjdk:8-jdk-alpine
#指定镜像创建者信息
MAINTAINER KsdPug
#切换工作目录
WORKDIR /
#创建执行目录
RUN mkdir -p /servers
# 切换指定命令
RUN cd /servers
# 传递参数,微服务打包的jar包名字
ARG JAR_FILE
# 将指定的JAR_FILE拷贝到 /servers/app.jar
COPY ${JAR_FILE} /servers/app.jar
# 暴露指定的端口
EXPOSE 8082
# 执行发布命令
CMD ["nohup","java","-jar","/servers/app.jar","--server.port=8082","&"]
上面仅仅只是制作一个镜像,不是运行项目。
dockerfile-maven插件
在项目pom.xml文件的build中增加dockerfile-maven插件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.pug.ksd</groupId>
<artifactId>spring-docker-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-docker-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<docker.image.prefix>example</docker.image.prefix>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!--镜像的名称-->
<repository>${project.artifactId}</repository>
<!--镜像的版本号 latest-->
<tag>${project.version}</tag>
<!--构建的参数,给Dockerfile中ARG命令指定参数-->
<buildArgs>
<!--指定dockerfile的JAR_FILE的参数是-->
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</project>
Dockerfile必须和target平齐,否则找不到jar
镜像服务器的配置
参考配置地址:docker 远程连接设置 - 秋刀鱼的滋味w - 博客园
# 编辑docker
vim /lib/systemd/system/docker.service
修改此段
把上面的代码替换成下面的代码即可
很多网站可能都是使用默认的端口是:2375。建议使用别的端口替代比如:2280
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2280 -H unix:///var/run/docker.sock
重启配置和docker服务即可
systemctl daemon-reload && systemctl restart docker
配置环境变量
【我的电脑】 –【属性】—【高级系统设置】
DOCKER_HOST=tcp://47.107.225.126:2280 执行推送命令
mvn clean package -Dmaven.test.skip=true dockerfile:build
或
创建docker容器
安装docker插件
创建docker服务
创建和运行容器
容器发布项目
-
未来只需要修改代码
-
打包项目
-
重新发布项目即可
连接docker中的mysql
由于已经在linux中安装过MySQL,所以3306端口已经被使用,因此在安装docker的mysql时映射的是3307端口。
在连接sqlyog时可以采用如下方式连接:
idea连接数据库
方法一host模式、使用阿里云私有ip地址+3307端口
方案二桥接模式、docker inspect CONTAINER ID,得到"IPAddress": "xxxxxx",idea数据库连接配置为xxxxxx:3306
关于IDEA打包的时候构建镜像读取不到系统环境变量更换的问题
在开发中,如果你更换了服务器,可能会直接去改系统环境变量参数。这个改了以后你会发现如下状况:
-
在外部的cmd命令有效
-
但是在idea还是旧的docker服务。
原因是:idea工具命令行有缓存,必须手动的去同步一下环境变量。修改如下: