Docker部署jar包实例解决方案

目录

1.安装虚拟机vaware

2.安装cnetos7

3.安装docker

4.制作dockerfile:

5.关闭虚拟机防火墙,开放端口访问:22

6.将文件上传至dockerfile同级目录:

7. 制作镜像:

8. docker run start exec之间的区别:

9. docker ps 与docker ps -a的区别:

10.dockefilec常见命令:

1. from 

2.add、copy

3.entrypoint

4cmd

5.run 

11. docker打包容器上传


1.安装虚拟机vaware
2.安装cnetos7

坑:

解决win11虚拟机与Hype -v冲突:(VMware Workstation 与 Device/Credential Guard 不兼容)

参照:
https://www.cnblogs.com/ixanq008/p/17429844.html

        1. 关闭hv服务;

        2.关闭hyper-v;

        3.找不到 hyper-v的生成bat脚本,运行以下:

pushd "%~dp0"

dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt

for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"

del hyper-v.txt

Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

        4.在控制面板-程序功能-开启关闭windows功能-中关闭hyper-v;

        5.以管理员身份启动cmd,输入bcdedit /set hypervisorlaunchtype off,重启

3.安装docker

坑:

centos7里的docker不能直接用yum -y intall docker而是要安装docker-ce

参照:

https://www.cnblogs.com/shineen/p/16440302.htmlhttps://www.cnblogs.com/shineen/p/16440302.html

1. 安装:

        yum install -y yum-utils device-mapper-persistent-data lvm2

2. 添加源:

        yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)

        yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

3. 安装docker:

        yum -y intall docker-ce

坑:

        centos yum安装使用时提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法

详情:

centos yum安装使用时提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法_D-小白兔的博客-CSDN博客

        出现这个原因90%可能是centos系统没有配制dns,同时也有可能没有激活网卡。

4.制作dockerfile:

坑:dockerfile里使用 from java:8 build时docker找不到java8

修改成 from openjdk:8

坑:打包后docker运行容器时一直提示,no mainfest in container:

运行的项目,没有指定主类:

pom添加:

 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
              
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

坑:重新打包项目的时候提示版本不对:

org.codehaus.plexus.component.repository.exception.ComponentLookupException: org/springframework/boot/maven/BuildInfoMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

spring-boot-maven-plugin未指定版本导致编译错误-spring-boot-maven-plugin:3.0.0_spring-boot-maven-plugin 版本号_南巷Dong的博客-CSDN博客

在build标签里指定版本就行

   <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.2.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
5.关闭虚拟机防火墙,开放端口访问:22

详情:

1、命令行界面输入“systemctl status firewalld.service”
2、可以查看得到“active(running)”,表示防火墙已经被打开了。
3、然后输入 systemctl stop firewalld.service 命令,关闭防火墙。
4、在输入命令 systemctl status firewalld.service,下方出现disavtive(dead),说明防火墙已经关闭。
5、输入命令“systemctl disable firewalld.service”就可以永久关闭防火墙

6.将文件上传至dockerfile同级目录:

        FileZilla Client,虚拟机ip地址,用户名,密码,端口22;

7. 制作镜像:

        docker build -t   imagename  .   

8. docker run start exec之间的区别

 run 是在第一次启动镜像的时候使用,会创建一个容器;

        docker run -d -p 20000:20000 --name  eureka-server  imagename 

start 是已经有了容器之后启动时使用;

        docker start eureka-server

exec是直接与容器进行交互,比如进入容器里的命令行

        docker exec -it eureka-server   /bin/bash

9. docker ps 与docker ps -a的区别:

docker ps:只显示正在运行的容器;

docker ps -a:显示所有的容器状态等;

10.dockefilec常见命令:
1. from 

定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。

2.add、copy

ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

  • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

  • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

3.entrypoint

似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。

优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

4cmd

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

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。
  • 作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
5.run 

        用于执行后面跟着的命令行命令

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz

参考:

Docker Dockerfile | 菜鸟教程

11. docker打包容器上传

docker commit:从容器创建一个新的镜像。

  • -a :提交的镜像作者;

  • -c :使用Dockerfile指令来创建镜像;

  • -m :提交时的说明文字;

  • -p :在commit时,将容器暂停。

docker push myapache:v1 镜像上传。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值