Docker部署(1)

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

一、首先下载java镜像

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

Docker部署(1)插图

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

Docker部署(1)插图1

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

docker search jdk8
Docker部署(1)插图2

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

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

Docker部署(1)插图4

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

Docker部署(1)插图5

Docker部署(1)插图6

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

Docker部署(1)插图7

三、新建一个Dockerfile文件

Docker部署(1)插图8

文件内容如下:

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"]

Docker部署(1)插图9

代码解释

  • 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部署(1)插图10

而命令 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

原文链接:https://blog.csdn.net/weixin_49171365/article/details/131031451?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836884016800178552552%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836884016800178552552&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-20-131031451-null-null.nonecase&utm_term=docker%E9%83%A8%E7%BD%B2

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享