java应用jar部署在docker容器上


 
1,pom.xml文件配置插件    
<!--直接打包到远程服务器的docker中-->
    <plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.0.0</version>
    <!--将插件绑定在某个phase执行-->
    <executions>
        <execution>
            <id>build-image</id>
            <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <!--指定生成的镜像名-->
        <imageName>motormmcs</imageName>
        <!--指定标签-->
        <imageTags>
            <imageTag>latest</imageTag>
        </imageTags>
        <!-- 指定 Dockerfile 路径 ${project.basedir}:项目根路径下-->
        <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
        <!--指定远程 docker api地址-->
        <dockerHost>http://填写IP:端口</dockerHost>
        <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <!--jar 包所在的路径 此处配置的 即对应 target 目录-->
                <directory>${project.build.directory}</directory>
                <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <!-- 以下两行是为了docker push到DockerHub使用的。 -->
        <serverId>docker-hub</serverId>
        <registryUrl>https://index.docker.io/v1</registryUrl>
    </configuration>
    </plugin>
</plugins>
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
            <include>**/*.json</include>
            <include>**/*.ftl</include>
        </includes>
    </resource>
</resources>

2,创建docker文件夹,新建dockerfile(可以忽略大小写),内容

#jdk版本
FROM java:8

VOLUME /tmp
#打包是motormmcs-1.0.2.jar    motor.jar是别名
ADD motormmcs-1.0.2.jar  motor.jar
#路径
RUN bash -c 'touch /motor.jar'

#对外端口
EXPOSE 8082

#启动jar
ENTRYPOINT ["java", "-jar", "motor.jar"]

3,idea下载docker,指定上面写的dockerfile文件

4,在配置docker时,记录相关问题,可以查看一下

学习网站
https://www.runoob.com/docke

查看所有镜像
docker images

常用命令linux是一样的
创建文件夹,用于存放后面的相关东西。
mkdir -p /nginx/www /nginx/logs /nginx/conf

启动nginx,指定配置文件,我们实际修改是D盘的东西,指定到docker上面
docker run -d -p 8081:80 --name nginx-test-web -v /nginx/www:/usr/share/nginx/html -v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf  nginx

杀进程,杀了后还能访问
docker kill -s HUP nginx-test-web

重启
docker restart nginx-test-web

停止,不能访问了
docker stop  nginx-test-web

查看正在运行的服务信息
docker ps

查看容器的信息 下面的5是看5列信息
docker ps -n 5 

有些服务stop和kill,查看看在运行,要移除就好了
参考https://blog.csdn.net/guyunzh/article/details/85779154
docker rm nginx-test-web , nginx-b-web


参考:https://www.cnblogs.com/spll/p/9957769.html
部署服务要挂载到服务器中
查找启动tomcat
docker ps  
找到id=9fccf0236619后,找到在docker容器的的地址
docker exec -it 9fccf0236619 /bin/bash
找到地址后bb276708a79a:/usr/local/tomcat/webapps
cp到服务器中
docker cp /usr/local/testJavaProject/test01.war 9fccf0236619:/usr/local/tomcat/webapps


在idea中连接不上,可能远程端口没有访问
参考:https://blog.csdn.net/ChineseYoung/article/details/83107353

docker在服务器上部署,
1,把已经打好包上传到服务器,(rz上传,记住打包要是可以运行的,自己现在本地试一遍,正常后再上传到服务器中)
2,创建dockerFile文件,下面是内容
每个命令开头都是大写,这是规则
FROM  java   --这是java程序,基础镜像就是java,没有他会自动到去下载,手动下载docker pull java

ADD   docker_test.jar   /docker_test.jar

EXPOSE 8080  --这个是对外的端口tomcat启动默认是8080  也可写  8080:8080(外:内)


ENTRYPOINT ["java", "-jar", "/docker_test.jar"]
保存文件
3,启动构建, -f 是文件配置  -t 是images名称   v1是版本  . 是当前路径
docker build -f dockerFile -t  liu/test:v1 .
4,启动程序
docker run --name docker_test -p 8086:8080 -d liu/test:v1
docker run --name docker_test22 -p 8087:8080 -d liu/test:v1
对外端口只能有一个不能重复,内部端可以重复用
5,访问
http://121.40.150.88:8086/

在idea镜像碰到坑,文件必须要以这个(dockerfile)命名,不分大小写

移除容器
1.docker stop<容器ID或容器名> ,容器停止了,当时没有及时移除,可能随着docker启动还能访问
2.docker rm <容器ID或容器名> ,移除后就不能在访问了

移除镜像
一个镜像名称可以有多个,如java ,java:8  ,但是images ID都是样,说明是同一个镜像,删除时就会提醒有引用
,这里需要强制删除才有效果
1,简单删除Docker rmi <容器ID或容器名>
2,docker rmi -f  974851f7993e  这里是强制删除的,主要是同一个id的都没有了

镜像后面的tag默认是latest,启动容器可以不写,如果你重新命名,那就要带上不然启动不了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章