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,啓動容器可以不寫,如果你重新命名,那就要帶上不然啓動不了

 

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