Docker部署springboot项目
目录
二 在dockerfile和jar包的上级目录执行... 3
5 查看端口是否监听成功 netstat -lntp 端口... 7
一 spring boot 应用发布到 docker
网址:https://blog.csdn.net/anxpp/article/details/73478883
2.创建dockerfile文件
touch dockerfile
vim dockerfile
[telecom@CNA-82-19 springboot]$ vim dockerfile
FROM 120.110.119.110:1108/library/java:8u_112
MAINTAINER gdeop
VOLUME /tmp
ARG user=yan
ARG user_id=1102
ARG user_group=1102
ENV USER=${user} \
USER_ID=${user_id} \
USER_GROUP=${user_group} \
LOG_PATH=/data/gdeop/springboot \
TERM=xterm
#时区设置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN mkdir -p /data/gdeop/springboot && rm -rf /data/gdeop/springboot && groupadd -g ${USER_GROUP} ${USER} && useradd -u ${USER_ID} -g ${USER_GROUP} -d /data/gdeop/springboot ${USER}
RUN mkdir -p ${LOG_PATH} && chmod a+x /data/gdeop/springboot/ && chown -R ${USER_ID}:${USER_GROUP} ${LOG_PATH} /data/gdeop/springboot/
USER ${USER}
#指定工作目录
WORKDIR /data/gdeop/springboot
ENV LANG=en_US.UTF-8
ENV TZ=Asia/Shanghai
COPY api-info2018122916408611-0.0.1-SNAPSHOT.jar /data/gdeop/springboot/api-info/
ENTRYPOINT ["java" ,"-jar","/data/gdeop/springboot/api-info/api-info2018122916408611-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
注意:dockerfile和jar包必须在同一级目录,否则失败
二 在dockerfile和jar包的上级目录执行
docker build -t 创建者/镜像名:版本号(自定义) .
如果出现以下情况,检查dockerfile是否写对
在执行docker build -t tele/apiinfo2018101016158611:1.1.1 . 命令
一种:构建镜像的dockerfile文件及所放的位置要注意的事项:
二种:打包的jar包直接放在dockerfile同目录,少一个放jar包的目录 如图:
[telecom@CNA-82-19 register-server]$ ls
dockerfile register-server-0.0.1-SNAPSHOT-201809300853.jar
[telecom@CNA-82-19 register-server]$ vim dockerfile
FROM java:1.8.171
MAINTAINER tele
VOLUME /tmp
COPY register-server-0.0.1-SNAPSHOT-201809300853.jar /data/telecom/springboot/register-server/
ENTRYPOINT ["java" ,"-jar","/data/telecom/springboot/register-server/register-server-0.0.1-SNAPSHOT-201809300853.jar"]
即正确
如下图所示
3.用docker run 运行容器
看端口映射容器是否成功及是否可以正确访问
docker run -d -p 1101:1101 --name apiinfo2018101017108612 tele/apiinfo2018101016158611:1.1.1
4 docker ps查看容器及端口映射
查看端口是否监听成功 netstat -lntp 端口
三 浏览器中访问,看外部是否可访问正确与否
容器所在服务器IP+容器映射本地端口+项目访问路径
docker inspect 容器id
docker stop 容器id
3 查看所有容器
docker rm 容器id
5 删除镜像
docker rmi 镜像id
四 压缩保存到本地
1 压缩文件或文件夹
tar zcvf springboot.tar.gz springboot
2传到远程服务器
1.镜像上传
Docker save 保存的镜像,上传到服务器
2 加载镜像
在用docker load加载镜像 docker load < /data/gdeop/img/centos7.2.2.tar
Docker load < /存镜像的路径/镜像文件(名)
3 查看镜像
Docker images
4 为镜像打标签
镜像无标签名,用 docker tag 镜像id 镜像名:版本号(自定义)
docker tag 49f7960eb7e4 centos:7.2.2
docker tag 324b8e08f947 java:1.8.1
4.1 保存镜像
Docker保存镜像docker save -o 镜像名(自定义) 镜像名
docker save -o /data/telecom/saveimg/monitoragentd2018101523508631:1.2.tar tele/monitoragentd2018101523508631
4,2 上传镜像到远程
从132.121.117.241传到132.121.117.242中
4.3 加载
在用docker load加载镜像
4.4 镜像实例(运行容器)
运行容器成功
4.5 浏览器范问成功
4.6将本地目录拷贝到远程
scp -r 目录名 用户名@计算机IP或者计算机名称:远程路径
scp -r /data/telecom/saveimg/apicenter201810129268622:1.2.tar telecom@110.121.120.119:/data/telecom/saveimg/
从远程将目录拷回本地:
scp -r 用户名@计算机IP或者计算机名称:目录名 本地路径
docker容器的备份、恢复、迁移
一 容器的备份
- 第一种 docker commit -p 容器id 容器备份的名字
例如:
docker commit -p 622a4c92eac0 container-backup
看是否备份成功,备份后即镜像,用docker images查看
Dockerfile文件springboot项目
Dockerfile:
FROM 120.110.119.110:1108/library/java:8u_112
MAINTAINER gdeop
VOLUME /tmp
ARG user=yan
ARG user_id=1102
ARG user_group=1102
ENV USER=${user} \
USER_ID=${user_id} \
USER_GROUP=${user_group} \
LOG_PATH=/data/gdeop/springboot \
TERM=xterm
#时区设置
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN mkdir -p /data/gdeop/springboot && rm -rf /data/gdeop/springboot && groupadd -g ${USER_GROUP} ${USER} && useradd -u ${USER_ID} -g ${USER_GROUP} -d /data/gdeop/springboot ${USER}
RUN mkdir -p ${LOG_PATH} && chmod a+x /data/gdeop/springboot/ && chown -R ${USER_ID}:${USER_GROUP} ${LOG_PATH} /data/gdeop/springboot/
USER ${USER}
#指定工作目录
WORKDIR /data/gdeop/springboot
ENV LANG=en_US.UTF-8
ENV TZ=Asia/Shanghai
COPY api-info2018122916408611-0.0.1-SNAPSHOT.jar /data/gdeop/springboot/api-info/
ENTRYPOINT ["java" ,"-jar","/data/gdeop/springboot/api-info/api-info2018122916408611-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
七 Docker导入、导出、删除容器
1 导出某个容器
导出某个容器,非常简单,使用docker export命令,语法:docker export container_id > 容器快照名
docker export 5e015d422cd6 > /data/gdeop/saveimg/monitoragentd20181017100286311.0.tar
导出后在本地可以看到有一个centos.tar的容器快照。
2 导入某个容器
docker import命令
有了容器快照之后,我们可以在想要的时候随时导入。导入快照使用docker import命令。
例如我们可以使用cat centos.tar | docker import - my/centos:v888 导入容器快照作为镜像
处理本地的容器快照导入为镜像,我们还可以通过指定一个URL或者目录来导入。
例如在某个网络上有个快照image_test.tgz:docker import http://xxxx.com/image_test.tgz test/image_test
3 镜像保存/载入
docker load/docker save;将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
4 容器导入/导出
docker import/docker export;将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
5删除容器
可以使用"docker rm 容器id"来删除一个终止状态的容器;若要删除一个运行中的容器,需要加-f参数。
八 Docker部署swagger
1.Swagger的作用
在docker中部署swagger。对于swagger自己进行后端开发可以用来管理接口,我们写的方法都会在swagger中显示出来,我们也可以在swagger上进行测试。
2.官网的解释
Swagger是面向OpenAPI规范(OAS)的API开发人员工具的世界上最大的框架,可以在整个API生命周期中进行开发,从设计和文档到测试和部署。
3.自己理解
我们开发的契约,当前端和后端分离的时候,我们依据swagger上提供的api进行开发,我们共同遵循这同一个契约。利用在线的swagger我们只需要一个json文件,或xml文件加上swagger自己封装的接口我们就可以模拟真实的功能。
4.为什么部署
why?为什么要本地部署呢?最近做项目网络总是不给力,一个页面要加载好长时间,于是我们项目组长先发制人要大家本地的swagger。
5 .环境
运行docker容器的服务器
6. 下载镜像
下载所需要的镜像,这些不是必要的操作,方便我们之后的查看。
docker pull swaggerapi/swagger-ui
docker pull swaggerapi/swagger-editor
引入项目
官网上有本地搭建服务器的文件,我们可以拿下来直接用,这是链接:https://github.com/swagger-api/swagger-ui,我们将整个文件夹拉到服务器上。
7. 保存到本地
8. 上传到远程服务器
9. 加载
10. 运行镜像
运行swaggerapi-swagger-editor镜像
docker run -d --name swagger-editor8088 -m 4096m --memory-swap=4096m -p 8088:8080 swaggerapi/swagger-editor:latest
九 浏览器中访问查看
1 修改swagger.json
出现界面后,可以编辑,然后点击file文件下载到本地 修改成swagger.json在上传到远程服务器
3 运行swagger-ui容器页面
docker run -p 8089:8080 -e SWAGGER_JSON=/foo/swagger.json -v /data/telecom/saveimg:/foo swaggerapi/swagger-ui:latest
4 浏览器访问