使用docker部署一个jar项目

简介:

通过docker镜像, docker可以在服务器上运行包含项目所需运行环境的docker容器, 在线仓库里有很多各个软件公司官方发布的镜像, 或者第三方的镜像. 如果我们需要使用docker把我们的应用程序打包成镜像, 别的机器上只要安装了docker, 就可以直接运行镜像, 而不需要再安装应用程序所需要的环境(比如 jre)了.

定制自己的镜像:

更新已有的镜像,再构建新的自定义镜像.

1. 使用docker pull 镜像名:版本从在线docker仓库中拉取一个镜像

docker pull ubuntu:18.04 ​ 使用docker images 可以看到你的镜像: (默认路径: /var/lib/docker/containers)

复制代码
root@iZbp13tcf8gaqn21r6m8viZ:/var/lib/docker/containers# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lifetrack           1.0                 881e666fc6b3        21 minutes ago      1.49GB
ubuntu_jdk          1.0                 42d9398e7f50        40 minutes ago      1.46GB
ubuntu              18.04               8e4ce0a6ce69        3 weeks ago         64.2MB
star7th/showdoc     latest              e169aaaa88e2        3 months ago        389MB

各个选项说明:

  • **REPOSITORY:**表示镜像的仓库源

  • **TAG:**镜像的标签

  • **IMAGE ID:**镜像ID

  • **CREATED:**镜像创建时间

  • **SIZE:**镜像大小

2.使用docker run -t -i -d 镜像名:版本 /bin/bash 来根据镜像运行一个容器</u>

参数说明:

  • -i: 交互式操作。

  • -t: 终端。

  • -d:在后台运行(加了这个 -i -t就没用了)

  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。

  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

    如果在后台运行容器, 想进入容器有两种方法:

    复制代码
    1. docker attach 容器ID   : 退出时(exit)会停止容器
    1. docker exec -it 容器ID /bin/bash :退出时(exit)不会停止容器, 一般用这个
3. 修改容器

进入这个ubuntu容器后, 你可以自己安装你的应用所需要的运行环境, 比如我要安装

mysql: sudo apt-get install mysql

JDK: sudo apt-get install openjdk-8-jdk 以上在容器内操作, 退出输入: exit

4. 将容器提交为一个新镜像:

docker commit -m="has update" -a="qds" 容器ID 镜像名:版本号

5. 用包含运行环境的新镜像, 打包我们的应用程序为docker镜像

把我们的java程序的jar包, 放在一个新建空文件夹, 然后新建一个Dockerfile文件

编辑Docerfile文件:

复制代码
   FROM 镜像名:版本号
   
   MAINTAINER 作者签名
​
   RUN 打包时运行的linux命令
​
   COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
​
   CMD nohup java -jar xxxx.jar > xxx.log  2>&1 &```
​

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 格式:

复制代码
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec 格式:

复制代码
RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

COPY: 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

CMD: 类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

复制代码
CMD 在docker run 时运行。
RUN 是在 docker build。
​
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
​
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
6. 根据Dockerfile文件构建包含应用程序的新镜像:

docker build -t runoob/centos:6.7 .

复制代码
   runoob@runoob:~$ docker build -t runoob/centos:6.7 .
   Sending build context to Docker daemon 17.92 kB
   Step 1 : FROM centos:6.7
    ---&gt; d95b5ca17cc3
   Step 2 : MAINTAINER Fisher "fisher@sudops.com"
    ---&gt; Using cache
    ---&gt; 0c92299c6f03
   Step 3 : RUN /bin/echo 'root:123456' |chpasswd
    ---&gt; Using cache
    ---&gt; 0397ce2fbd0a
   Step 4 : RUN useradd runoob
   ......

参数说明:

  • -t :指定要创建的目标镜像名

  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

7. 使用 docker images 查看我们新建的镜像
8. 使用docker run -it 镜像名:版本 运行我们的镜像并访问其中的应用程序.
9. 这个镜像可以在其他安装了docker的设备上直接运行, 不需要提前装jdk等环境了.

以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了

各位想获取资料的朋友请 点赞 + 评论 + 收藏 ,三连!

三连之后我会在评论区挨个私信发给你们~

相关推荐
川石课堂软件测试31 分钟前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
Jack黄从零学c++1 小时前
C++ 的异常处理详解
c++·经验分享
昌sit!7 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
追风林8 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
A ?Charis9 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
城南vision10 小时前
Docker学习—Docker核心概念总结
java·学习·docker
wclass-zhengge10 小时前
Docker篇(Docker Compose)
运维·docker·容器
北漂IT民工_程序员_ZG10 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
做网站建设制作设计小程序推广11 小时前
如何建购物网站提升用户体验
经验分享
程思扬11 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节