使用docker部署springboot服务

上一篇,在centos7中搭建好了docker,并尝试了基础的image镜像和container容器的命令操作。
这一篇就尝试自己在docker容器中启动并使用springboot服务,基本步骤就是准备jar、配置Docker、构建image、启动container、测试服务功能。

准备springboot的jar

为了简单演示,我创建了一个新的springboot项目,只写了一个controller接口以供查看效果,controller接口代码如下:

@RestController
@RequestMapping
public class TestController {
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

确定上述代码可以正常运行并在浏览器正常访问后,生成springboot可运行的jar,我这里命名为demo.jar,然后把这个文件上传到linux虚拟机中准备构建docker镜像的目录,例如/root/docker/demo

配置Dockerfile

有了jar之后,接下来就可以配置Dockerfile文件了,我这里是按这个顺序来的,因为Dockerfile里需要指定jar文件。
而实际上Dockerfile文件只是一个静态文件,在jar之前配置也没有问题,只需要后续生成的jar名字及路径和Dockerfile里的保持一致即可。
在上边jar所在目录,使用vi命令创建并编辑Dockerfile文件:

vi Dockerfile

编辑文件内容:

FROM java:8
VOLUME /tmp
COPY demo.jar app.jar
RUN bash -c “touch /app.jar”
ENTRYPOINT ["java","-jar","/app.jar"]

以上内容的含义如下:

第一行,本Dockerfile文件生成的image镜像,基于java8的镜像;
第三行,把当前目录下的demo.jar文件拷贝到docker容器中,同时重命名为app.jar
第四行和第五行,运行app.jar,即启动spingboot服务。

上記の説明では2行目に触れていないことに注意してください。この行は必要ないためです。この行は、ファイルシステムを使用する必要がある場合にのみ使用されます。つまり、ファイルを直接操作するときにdockerのプログラムを構成する必要があります。これです。
さらに、この書き込み方法は、Dockerとホストファイルを関連付ける方法の1つにすぎません。他の書き込み方法もあり、詳細については後で説明します。

上記の構成は、多くのオンラインチュートリアルで記述されているものと類似しています。ある程度、不明確な人々に誤解を与える可能性があり、それらの多くは修正された記述であると思われますが、実際、上記の内容の多くは他の方法で記述できます。
まず、上記の各行の先頭の単語はすべて大文字ですが、mysqlクエリを使用する場合のsqlキーワードと同様に、ここのキーワードは大文字である必要はなく、小文字も使用できます。
第2に、2行目が必要な場合は、後ろが指すディレクトリでtmpを使用する必要はなく、他のディレクトリも使用できます。
次に、ローカルファイルをコンテナに追加する操作があり、これを使用copyまたは使用できますadd。どちらも2つのパラメータが必要です。1つはローカルファイルパスとファイル名、もう1つはDockerコンテナ内のファイル名です。
したがって、後ろのapp.jarは、使用時に一貫している限り、他の名前で呼び出すこともできます。
したがって、上記の構成の表現を次のように変更することもできます。

from java:8
volume /test
add demo.jar demo.jar
run bash -c "touch /demo.jar"
entrypoint ["java","-jar","/demo.jar"]

画像ビルド

実行する必要のあるjarファイルと構成済みのDockerfileファイルが用意できたので、準備が完了し、次のコマンドを使用してイメージイメージをビルドできます。

docker build -t docker-spring .

上記のコマンドの最後にあるドット記号に特に注意してください.。簡単に無視できます。上記のコマンドを実行すると、次の出力が表示されます。

Sending build context to Docker daemon  16.52MB
Step 1/6 : from java:8
 ---> d23bdf5b1b1b
Step 2/6 : volume /test
 ---> Running in 5533951f04ca
Removing intermediate container 5533951f04ca
 ---> 0965f253bac5
Step 3/6 : add demo.jar demo.jar
 ---> bff720047ccb
Step 4/6 : run bash -c "touch /demo.jar"
 ---> Running in 900c847c14a4
Removing intermediate container 900c847c14a4
 ---> edb32f0ef654
Step 5/6 : expose 8080
 ---> Running in c25a898a3e37
Removing intermediate container c25a898a3e37
 ---> 55bbf5e81907
Step 6/6 : entrypoint ["java","-jar","/demo.jar"]
 ---> Running in b891f3caeeb3
Removing intermediate container b891f3caeeb3
 ---> 8caaec5d617b
Successfully built 8caaec5d617b
Successfully tagged docker-spring:latest

上記の出力は、イメージが正常にビルドされたことを意味します。このマシンで初めてdockerが使用され、java8ミラーがない場合、上記のコマンドの実行は遅くなり、最初でない場合は、リモートミラーライブラリからjava8ミラーがプルされます。このミラーはすでにローカルに存在し、直接使用されるため、2回目ははるかに高速になります。

コンテナを開始

イメージが完了したら、コンテナーを開始するイメージを指定できます。コンテナー自体はサービスの実行後にポートを開始しますが、物理マシンのポートを直接使用しないため、開始時にdockerのサービスポートを外部ポートにマップする必要があります。同時に、操作を容易にするために、バックグラウンド実行モードを使用してを使用することもできます。-d最後の開始コマンドは次のとおりです。

docker run -d -p 8000:8080 docker-spring

上記の操作により、Docker-Springイメージが開始され、Dockerコンテナーのポート8080が使用され、ポート8080が仮想マシンのポート8000​​にマップされます。
なお、実際の使用では、上記のパラメーター指定はミラー名の前に指定する必要があり、ミラー名を書き込んだ後にパラメーターを指定すると、パラメーターが有効になりません。

検証

コンテナーとサービスが開始されたら、ブラウザーで仮想マシンのIPとマップされたポートを使用して、Dockerのサービスにアクセスできます。たとえば、私の仮想マシンは192.168.139.91です。最初のインターフェースコードによると、ブラウザーに次のURLを入力できます。

http://192.168.139.91:8000/hello

ブラウザが通常のhello文字列を返すことがわかります。これは、Dockerのspringbootサービスが正常にデプロイされていることを示しています。

おすすめ

転載: blog.csdn.net/tuzongxun/article/details/108401296