Docker部署springboot项目
目录
一 spring boot 应用发布到 docker 2
1. 上传已打包好的jar包,即应用程序... 2
2.创建dockerfile文件... 2
2. 编辑dockerfile 文件... 3
二 在dockerfile和jar包的上级目录执行... 3
1. 构建镜像... 3
2. 用docker images命令查看... 6
3.用docker run 运行容器... 6
4 docker ps查看容器及端口映射... 6
5 查看端口是否监听成功 netstat -lntp 端口... 7
三 浏览器中访问,看外部是否可访问正确与否... 7
1. 查看容器详细信息... 7
2 Docker停止容器... 8
3 查看所有容器... 8
4 删除容器... 8
5 删除镜像... 9
四 压缩保存到本地... 9
1 压缩文件或文件夹... 9
2传到远程服务器... 10
五 保存镜像... 10
1.镜像上传... 10
2 加载镜像... 11
3 查看镜像... 11
4 为镜像打标签... 11
六.Dockerfile指定用户运行... 15
七 Docker导入、导出、删除容器... 16
1 导出某个容器... 16
2 导入某个容器... 17
3 镜像保存/载入... 17
4 容器导入/导出... 17
5删除容器... 18
八 Docker部署swagger 18
1.Swagger的作用... 18
2.官网的解释... 18
3.自己理解... 19
4.为什么部署... 19
5 .环境... 19
6. 下载镜像... 19
7. 保存到本地... 20
8. 上传到远程服务器... 21
9. 加载... 21
10. 运行镜像... 21
九 浏览器中访问查看... 22
1 修改swagger.json. 22
2 配置swagger-ui界面... 24
3 运行swagger-ui容器页面... 24
4 浏览器访问... 24
网址:https://blog.csdn.net/anxpp/article/details/73478883
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包必须在同一级目录,否则失败
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"]
即正确
如下图所示
看端口映射容器是否成功及是否可以正确访问
docker run -d -p 1101:1101 --name apiinfo2018101017108612 tele/apiinfo2018101016158611:1.1.1
端口映射成功
查看端口是否监听成功 netstat -lntp 端口
容器所在服务器IP+容器映射本地端口+项目访问路径
docker inspect 容器id
2 Docker停止容器
docker stop 容器id
4 删除容器
docker rm 容器id
docker rmi 镜像id
tar zcvf springboot.tar.gz springboot
五 保存镜像
Docker save 保存的镜像,上传到服务器
在用docker load加载镜像 docker load < /data/gdeop/img/centos7.2.2.tar
Docker load < /存镜像的路径/镜像文件(名)
Docker images
镜像无标签名,用 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 [email protected]:/data/telecom/saveimg/
从远程将目录拷回本地:
scp -r 用户名@计算机IP或者计算机名称:目录名 本地路径
docker容器的备份、恢复、迁移
一 容器的备份
例如:
docker commit -p 622a4c92eac0 container-backup
看是否备份成功,备份后即镜像,用docker images查看
六.Dockerfile指定用户运行
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 export命令,语法:docker export container_id > 容器快照名
docker export 5e015d422cd6 > /data/gdeop/saveimg/monitoragentd20181017100286311.0.tar
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
docker load/docker save;将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
docker import/docker export;将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。
可以使用"docker rm 容器id"来删除一个终止状态的容器;若要删除一个运行中的容器,需要加-f参数。
在docker中部署swagger。对于swagger自己进行后端开发可以用来管理接口,我们写的方法都会在swagger中显示出来,我们也可以在swagger上进行测试。
Swagger是面向OpenAPI规范(OAS)的API开发人员工具的世界上最大的框架,可以在整个API生命周期中进行开发,从设计和文档到测试和部署。
我们开发的契约,当前端和后端分离的时候,我们依据swagger上提供的api进行开发,我们共同遵循这同一个契约。利用在线的swagger我们只需要一个json文件,或xml文件加上swagger自己封装的接口我们就可以模拟真实的功能。
why?为什么要本地部署呢?最近做项目网络总是不给力,一个页面要加载好长时间,于是我们项目组长先发制人要大家本地的swagger。
运行docker容器的服务器
下载所需要的镜像,这些不是必要的操作,方便我们之后的查看。
docker pull swaggerapi/swagger-ui
docker pull swaggerapi/swagger-editor
引入项目
官网上有本地搭建服务器的文件,我们可以拿下来直接用,这是链接:https://github.com/swagger-api/swagger-ui,我们将整个文件夹拉到服务器上。
运行swaggerapi-swagger-editor镜像
docker run -d --name swagger-editor8088 -m 4096m --memory-swap=4096m -p 8088:8080 swaggerapi/swagger-editor:latest
出现界面后,可以编辑,然后点击file文件下载到本地 修改成swagger.json在上传到远程服务器
2 配置swagger-ui界面
docker run -p 8089:8080 -e SWAGGER_JSON=/foo/swagger.json -v /data/telecom/saveimg:/foo swaggerapi/swagger-ui:latest