当前位置:   article > 正文

学习docker记录(二)_docker error: unable to access jarfile

docker error: unable to access jarfile

查看命令

输入docker image或者 docker container 可以出现对应的命令:

docker container 相关命令

docker image命令

也可以输入docker --help查看。

操作镜像

首先拉取镜像

执行docker pull docker.io/library/ubuntu:18.04命令或者docker pull ubuntu:18.04,因为是从docker hub拉取ubunto官方镜像,可以省略掉仓库地址以及仓库名中的用户名。

其次运行镜像
执行命令:
  • 1
$ docker run -it --rm \
    ubuntu:18.04 \
    bash
  • 1
  • 2
  • 3

运行镜像其实就是创建一个容器并且运行启动这个容器:

● -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
● --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
● ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。
● bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

每一行的结尾的 \ 是换行符,这样看起来更清晰。

执行完命令之后就会进入到这个创建ubuntu的容器的终端中。
执行命令 cat /etc/os-release 查看一下操作系统的版本:

在这里插入图片描述

确实是拉取的ubuntu:18.04的版本。输入exit可以退出容器。

创建镜像

用docker commit来对某个镜像做出改动,然后制作成定制的镜像:

  • 创建一个nginx的镜像: docker run --name testNginx -d -p 9009:80 nginx (刚开始的时候,访问域名:9009一直访问失败,原来是ECS安全组端口没有放行)
  • 进入到这个容器中,通过命令修改nginx文字: docker exec -it testNginx bash echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html exit
  • 再次访问,会发现访问页面修改了。

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

执行命令 docker comit --author zhuruilin testNginx testNginx:0.2

在这里插入图片描述

可以发现新制作的镜像就查询到了,但是这种docker commit定制的镜像是在另外的镜像的基础上执行了很多其他命令之后得到的,但是执行过什么命令其他使用者是不会知道的,创建人不一定就能完整记得。而且在其他镜像上再次定制镜像,只会让镜像变得越来越臃肿,所以正常不使用这种方式来制作镜像,应该是Dockerfile的方式来制作镜像。

部署一个简答的springboot项目

项目极其简单,就是有一个固定写死返回字符的接口:

在这里插入图片描述

使用idea中的maven工具打成一个jar包,利用工具上传jar包到服务器,cd到jar包的同级目录下,新增Dockerfile,

vim Dockerfile


FROM openjdk:8-jre
MAINTAINER zhuruilin
VOLUME /www/wwwroot/dockerPractise/day1029
RUN mkdir -p /www/wwwroot/dockerPractise/day1029
WORKDIR /www/wwwroot/dockerPractise/day1029
ENTRYPOINT ["java","-jar","dockerDemo-1.jar"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

根据Dockerfile制作镜像:

docker build -t dockerdemo:0.1 .
  • 1

末尾的点不能缺失,构建镜像完毕之后就可以根据镜像创建容器

这里末尾的 . 并不是指当前目录,docker build 是调用docker remote api 去都调用docker 服务端接口,docker build 会将一些本地的文件发送给服务端, 因为通常是在Dockerfile文件同级目录下执行docker build,所以将这一层目录作为上下文路径。如果Dockerfile中有COPY ,ADD命令,会将本地文件传给docker服务端 ; 如果Dockerfile中这么写:

 COPY    /test/test1.jar   /result
  • 1

就会将docker run命令中指定的上下文路径中的 /test/test1.jar包复制,而不是复制 Dockerfile目录中的 /test/test1.jar文件。

 docker run --name dockerdemo  -d -p 90009:9009 dockerdemo:0.1
  • 1

访问域名:9009/docker/test,会出现文字,说明运行成功。

出现问题:
使用命令 docker container ls,并没有运行的容器,使用 docker container ls -a 才可以看见容器,说明运行容器失败。
,删除掉这个容器,再次创建,命令如下:

docker run --name demo1030 -p 9009:9009 demo:0.1 -d
  • 1

会出现提示 Error: Unable to access jarfile dockerDemo-1.jar。

最后发现在Dockerfile中添加一个 copy xxx.jar /www/wwwroot/dockerPractise/day1029/test/xx.jar,
也就是说没有把jar包发送给docker服务端,导致启动jar失败。修改完Dockerfile之后就可以了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/661578
推荐阅读
相关标签
  

闽ICP备14008679号