Docker部署(1)——将jar包打成docker镜像并启动容器

        在代码编写完成即将部署的时候,如果采用docker容器的方法,需要将jar包打成docker镜像并通过镜像将容器启动起来。具体的步骤如下。

一、首先下载java镜像

        先使用docker search java命令进行搜索。

         然而在拉取镜像的时候要注意不能直接去选择pull java ,不然会出现manifest for java:latest not found: manifest unknown: manifest unknown 的报错。

 正确的做法是:在search的时候指明好版本,然后在进行pull操作。

docker search jdk8

         然而在pull的时候,发现还是超时了,出现这种情况一般是没有配好镜像源或者配置的镜像源失效了。

         我打开镜像源进行查看,并且对镜像源进行ping的操作,然而发现前面两个镜像都能 ping通,但后面尝试继续去pull 镜像,发现仍然失败,最后我只保留了自己配置的阿里云镜像,发现可以正常pull 成功。(这里我其实也没有弄的很明白,原来配置了三个镜像源地址反而pull不成功,而且前面两个地址可以ping通,但是发现这几个网站单独并不能打开)

改成一个镜像后再search 和 pull 好了

 二、新建一个工作目录,将jar包拷贝进去

 三、新建一个Dockerfile文件

文件内容如下:

FROM dockette/jdk8
WORKDIR /test
COPY  jx-system-0.0.1-SNAPSHOT.jar   /test/jx-system-0.0.1-SNAPSHOT.jar
CMD ["java","-jar","jx-system-0.0.1-SNAPSHOT.jar","-Dfile.encoding=utf-8"]

代码解释

  • FROM dockette/jdk8 ——表示基于dockette/jdk8镜像构建
  • WORKDIR /test ——表示指定容器内的工作目录为/test
  • COPY ——拷贝jx-system-0.0.1-SNAPSHOT.jar到容器工作目录/test
  • CMD ——执行java启动jar的指令。

 四、构建镜像并启动容器

docker build -t app-docker .

        表示从当前目录构建镜像,这条命令会把当前目录下文件全部打包发送到docker引擎服务端,然后在服务端根据Dockerfile进行构建操作。其中的-t 是 Docker 命令 docker build 的一个选项,用于指定生成的镜像的名称和标签,格式为 name:tag。在命令行中,-t 选项后面可以紧接着将生成的镜像命名为一个字符串。

例如,docker build -t remdocker . 命令中的 -t remdocker 意思是将生成的镜像命名为 remdocker.  表示指定当前目录作为 Dockerfile 文件的构建上下文。

通常情况下,生成的镜像名称包含命名空间(Namespace)的名称,以便在 Docker Hub 上进行管理和分享,例如 username/repo:tag。不过如果没有 Docker Hub 账号,也可以不指定命名空间,只用标准格式 name:tag

        而命令 docker run -it --network my-net  -p 20233:20233 --name appd -d app-docker 表示把容器启动起来。根据刚才的Dockerfile配置,容器生成后,必然会在容器根目录下生成test目录,并且test目录下存在app.jar文件,容器执行CMD定义的指令也是基于test目录的。

docker run -it --network my-net  -p 20233:20233 --name appd -d app-docker

具体的命令的含义如下:

  • docker run:启动一个Docker容器。
  • -it:将Docker容器的输入绑定到当前终端,以便可以进行交互式操作。
  • --network my-net:将Docker容器连入名为my-net的网络中。这个网络需要先通过docker network create命令创建。
  • -p 20233:20233:将Docker容器的20233端口映射到主机的20233端口。这样,可以通过主机的20233端口访问Docker容器。
  • --name appd:给Docker容器命名为appd。
  • -d app-docker:以名为app-docker的镜像为基础启动Docker容器并将其放入后台运行。

综上所述,这条命令启动了一个交互式的Docker容器,并将其放入已经创建的名为my-net的网络中,在主机的20233端口与Docker容器的20233端口建立了映射,给Docker容器命名为appd,以名为app-docker的镜像为基础启动并将其放入后台运行。

【此处还要注意:-p(小写p)和-P(大写P)选项在Docker命令行中有不同的含义。

-p host_port:container_port(小写p)选项用于将主机端口映射到Docker容器端口,例如:

docker run -p 8080:80 nginx

        此命令将host的8080端口映射到Docker容器中的80端口,因此可以通过 http://localhost:8080 访问NGINX欢迎页面。而-P(大写P)选项用于将Docker容器的所有暴露的端口映射到主机上随机端口。例如:

docker run -P nginx

        是将nginx容器的所有暴露的端口映射到主机上的随机端口,您可以通过 docker container port <container_name> 命令来查看每个映射的端口。总之,小写p用于将主机端口映射到Docker容器端口,而大写P用于将所有暴露的端口映射到主机上随机端口。】

完成之后可进入容器内部查看

docker exec -it app /bin/bash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4551.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

改进的白鲸优化算法

改进的白鲸优化算法 一、算法灵感二、算法介绍2.1 初始化2.2 探索阶段2.3 开发阶段2.4 鲸落阶段 三、改进的白鲸优化算法3.1 集体行动策略3.2 小孔成像策略3.3 二次插值策略3.4 IBWO伪代码 一、算法灵感 白鲸优化算法(Beluga whale optimization, BWO)是2022年提出的一种元启发…

需求分析引言:架构漫谈(三)可用性专题

前文介绍了非功能性需求的各个指标和一些业界的标准。 非功能性需求里有一项可靠性&#xff0c;与之关联的一个指标叫可用性 本文对非功能性需求里的可用性、可靠性&#xff0c;进行一些详细的说明。 概念 我们在网上的云服务商处&#xff0c;经常看到产品介绍里会有这种字样…

系列五、NotePad++下载安装

一、下载 链接&#xff1a;https://pan.baidu.com/s/1U2f74vfBJIds7W2wJYnBxg?pwdyyds 提取码&#xff1a;yyds 二、安装 2.1、安装NotePad 解压NotePad-x64.zip至指定目录即可&#xff0c;例如 2.2、安装NppFTP 2.2.1、查看NotePad对应的位数&#xff08;32位or64位&a…

最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)

Linux命令相关查看指标 CPU 指标 vmstat指令 vmstat -n m该命令用于每隔n秒采集系统的性能统计信息&#xff0c;共采集m次。 [rootsvr01]$ vmstat 1 3procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----r b swpd free buff cache …

行业榜单揭晓:项目管理软件排行榜中的行业翘楚!

在当今复杂的商业环境中&#xff0c;项目管理软件已经成为企业管理不可或缺的工具之一。它们帮助企业组织和协调各个部门的工作&#xff0c;并确保项目能够按时、按预算、按质量要求完成。这就是为什么许多公司都在积极寻找最好的项目管理软件。但是&#xff0c;市场上有许多项…

一个人也可以是【大厂】,三年程序员的生活规划心路分享!

自从工作之后&#xff0c;我就经常思考以下这些问题&#xff1a; 还有多久退休&#xff1f;明天可以退休吗&#xff1f;地球什么时候爆炸&#xff1f;我什么时候可以暴富辞职&#xff1f;我真的需要这份工作吗&#xff1f; 要问是从什么时候开始有这些问题的&#xff0c;大概…

探索嵌入式开发领域:单片机、ARM、Android底层的紧密联系

作为一个曾编写ARM教程和参与Android产品开发的专家&#xff0c;我发现单片机、ARM、嵌入式开发和Android底层开发之间存在紧密的联系。对于那些希望在嵌入式开发领域发展的人来说&#xff0c;了解这些领域的知识至关重要。为了帮助你更好地学习这些内容&#xff0c;我总结了一…

CGAL使用心得 转

CGAL使用心得 转 作者&#xff1a;李浩 首先我说说我研究CGAL的背景&#xff0c;由于&#xff0c;早一阵子&#xff0c;有一个需求&#xff0c;需要求出在一堆二维线中&#xff08;包括直线和弧线&#xff09;&#xff0c;找出所有的最小区域和最大外包。如下图所示。 在这两…

Redis简介

Redis是基于内存&#xff0c;也可以基于磁盘持久化nosql数据库&#xff0c;使用c语言开发。 数据存储结构&#xff1a;key-value 安装环境准备 Redis使用c语言开发&#xff0c;需要使用gcc编译程序进行编译。 1&#xff09; 安装gcc a) 从磁盘镜像中进行安装&#xff1a;&…

结合ace编辑器实现MapboxGL热力图样式在线配置

概述 MapboxGL热力图的配置参数并不多&#xff0c;但是有时候为了或得一个比较好用的热力图配置参数&#xff0c;我们不得不改代码再预览&#xff0c;显得尤为麻烦&#xff0c;为方便配置&#xff0c;实现实时预览&#xff0c;本文使用ace实现了一个热力图样式在线配置页面。 …

MapReduce分布式计算(二)

MapReduce工作流程 原始数据File 1T数据被切分成块存放在HDFS上&#xff0c;每一个块有128M大小 数据块Block hdfs上数据存储的一个单元,同一个文件中块的大小都是相同的 因为数据存储到HDFS上不可变&#xff0c;所以有可能块的数量和集群的计算能力不匹配 我们需要一个动态…

Java面试题3

[TOC]目录 1. spring事务 事务简介 事务在逻辑上是一组操作&#xff0c;要么执行&#xff0c;要不都不执行。主要是针对数据库而言的&#xff0c;比如说 MySQL。 为了保证事务是正确可靠的&#xff0c;在数据库进行写入或者更新操作时&#xff0c;就必须得表现出 ACID 的 4 …