ホームページ  >  記事  >  Java  >  dockerfile を使用して springboot プロジェクトをデプロイする方法

dockerfile を使用して springboot プロジェクトをデプロイする方法

PHPz
PHPz転載
2023-05-15 23:55:133912ブラウズ

1. dockerfile の概要

Dockerfile は、Docker イメージを構築するために使用されるテキスト ファイルであり、イメージの構築に必要な命令とパラメーターで構成されるスクリプトです。

1. Dockerfile の基本

1: 各予約語命令 は大文字の であり、その後に少なくとも 1 つのパラメーターが続く必要があります
2: 命令は次のとおりです。上記と同様に一番下に移動して順番に実行します
3: # はコメントを表します
4: 各命令は新しいイメージ レイヤーを作成し、イメージを送信します

2. Docker 実行の一般的なプロセスDockerfile

(1) docker はベース イメージからコンテナを実行します
(2) 命令を実行し、コンテナに変更を加えます
(3) docker commit と同様の操作を実行して、新しいファイルを送信しますイメージ レイヤー
(4) Docker は送信されたばかりのイメージに基づいて新しいコンテナを実行します
(5) すべての命令が実行されるまで、dockerfile 内の次の命令を実行します

dockerfile を使用して springboot プロジェクトをデプロイする方法

3. ミラー、コンテナと dockerfile の関係

アプリケーション ソフトウェアの観点から見ると、Dockerfile、Docker イメージ、Docker コンテナはそれぞれソフトウェアの 3 つの異なる段階を表します。

  • Dockerfile はソフトウェアです 原材料

  • Docker イメージはソフトウェアの成果物です

  • Docker コンテナは実行中のコンテナと見なすことができますソフトウェアイメージの状態、つまりイメージに従って動作する コンテナインスタンス
    Dockerfileは開発指向、Dockerイメージは配信標準、Dockerコンテナはデプロイと運用保守を行う この3つは不可欠であり、一緒に行う必要があります。これらは Docker システムの基礎として機能します。

1 Dockerfile、プロセスに必要なものすべてを定義する Dockerfile を定義する必要があります。 Dockerfile に関係するコンテンツには、実行コードまたはファイル、環境変数、依存パッケージ、ランタイム環境、ダイナミック リンク ライブラリ、オペレーティング システムの配布、サービス プロセスおよびカーネル プロセスが含まれます (アプリケーション プロセスがシステム サービスおよびカーネル プロセスを処理する必要がある場合、このプロセスは名前空間の権限制御をどのように設計するかなどを検討する必要があります。;
2 Docker イメージ、Dockerfile でファイルを定義した後、docker build 時に Docker イメージが生成され、その Docker イメージが実行されると実際に起動しますサービスを提供する;
3 Docker コンテナの場合、コンテナはサービスを直接提供します。

基本的な構築手順: (1) Dockerfile ファイルを作成します (2) docker build コマンドでイメージを構築します (3) docker run でイメージに従ってコンテナー インスタンスを実行します

2. 共通予約dockerfile の単語

1. FROM

基本イメージ。現在の新しいイメージはどのイメージに基づいていますか? 既存のイメージをテンプレートとして指定します。最初のコマンドは FROM

# 命令格式
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
# 实例:
FROM centos:7.0
# である必要があります##2. MAINTAINER と LABEL

イメージ管理者の名前と電子メール アドレス

# 命令格式
MAINTAINER <name>

このコマンドは非推奨になりました。必要なメタデータを設定できる LABEL をお勧めします。

# 命令格式
LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

3. RUN

コンテナのビルド時に実行する必要があるコマンドです。RUN は docker build 中に実行されます

(1)シェル形式 (一般的に使用されます)

# <命令行命令> 等同于,在终端操作的shell命令
RUN <命令行命令>

(2) 実行形式

# 录入:RUN ["./test.php", "dev", "offline"] 等价于RUN ./test.php dev offline
RUN ["可执行文件", "param1", "param2"]

4, EXPOSE

現在のコンテナによって外部に公開されるポート

EXPOSE 80
EXPOSE 80/tcp
EXPOSE 80/udp

5, WORKDIR

コンテナの作成時に指定 その後、ターミナルはデフォルトでログインし、作業ディレクトリに入ります 開始点は

WORKDIR /path/to/workdir

6 です USER

は実行するユーザーを指定しますどちらも指定されていない場合、デフォルトは root

# 命令格式
USER <user>[:<group>]
USER <UID>[:<GID>]

# 实例
USER cxf

7、ENV

はイメージ構築プロセス中に環境変数を設定するために使用されます

# 命令格式
ENV <key>=<value> ...

# 实例
ENV MY_PATH /usr/mytest
#这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量,
#比如:WORKDIR $MY_PATH

8、ADD

ホスト ディレクトリ内のファイルをイメージにコピーします。すると、URL が自動的に処理され、tar 圧縮パッケージが解凍されます。

ADD a.tar.gz /mydir/

9, COPY

(ADD と同様に、ファイルをコピーします)そしてイメージへのディレクトリ。

ファイル/ディレクトリをビルド コンテキスト ディレクトリの からイメージの新しいレイヤーの の場所にコピーします

COPY src dest
COPY ["src", "dest"]
<src源路径>:源文件或者源目录
<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

10, VOLUME

コンテナ データ ボリューム。データ ストレージと永続化に使用されます。

11、CMD

コンテナの起動後に行うことを指定します。

注意! Dockerfile には複数の CMD 命令を含めることができますが、

最後の命令のみが有効になります。CMD は、docker run 後にパラメータに置き換えられます。

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

# 覆盖默认的CMD,不会启动tomcat
docker exec -it comcat /bin/bash

CMD は、docker run 時に実行されます。 RUN は docker のビルド中に実行されます。

12. ENTRYPOINT

は、コンテナーの起動時に実行するコマンドを指定するためにも使用されます。

CMD コマンドと似ていますが、

ENTRYPOINT は docker run 後のコマンドによって上書きされず、これらのコマンド ライン パラメータ は、コマンドによって指定されたプログラムへのパラメータとして使用されます。 ENTRYPOINT command

# 命令格式
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

ENTRYPOINT は CMD と一緒に使用できます。通常、CMD はパラメータを変更するために使用されます。ここでの CMD は ENTRYPOINT にパラメータを渡すことと同じです。

ENTRYPOINT を指定すると、CMD の意味が変わります。コマンドを直接実行する代わりに、CMD の内容がパラメータとして ENTRYPOINT 命令に渡されます。この 2 つの組み合わせは次のようになります: " ”

FROM ubuntu
ENTRYPOINT ["top", "-b"] # 定参
CMD ["-c"] # 变参
# 最终执行top -c,而如果使用命令行指定 -H,会替换CMD的-c

docker run を実行する際に、ENTRYPOINT の操作に必要なパラメータを指定できます。 Dockerfile に複数の ENTRYPOINT 命令がある場合、最後の命令のみが有効になります。

三、使用dockerfile构建一个自带jdk的centos

1、下载jdk并上传至linux

2、编写Dockerfile

# 注意大写字母D
vi Dockerfile
# 指定基础镜像,需要保证本地有这个镜像
FROM centos
# 指定作者邮箱
MAINTAINER cxf
# 工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 准备工作
RUN cd /etc/yum.repos.d/
RUN sed -i &#39;s/mirrorlist/#mirrorlist/g&#39; /etc/yum.repos.d/CentOS-*
RUN sed -i &#39;s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g&#39; /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN cd /usr/local
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

3、构建Dockerfile

注意!本目录下只有一个Dockerfile并且包含jdk安装包

dockerfile を使用して springboot プロジェクトをデプロイする方法

# 构建新镜像命令格式 。注意,上面TAG后面有个空格,有个点
docker build -t 新镜像名字:TAG .
# 构建我们的镜像,等一会就会构建成功
docker build -t centosjava8:1.0 .

[root@localhost myfile]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
centosjava8                   1.0       4dbff0755585   34 seconds ago   747MB
centos                        latest    5d0da3dc9764   19 months ago    231MB

4、运行一下试试

docker run -it 4dbff0755585 /bin/bash

#我们发现,新的镜像携带着vim、ifconfig和java环境了!

四、虚悬镜像

仓库名、标签都是的镜像,俗称dangling image

1、制造一个虚悬镜像

(1)创建Dockerfile

FROM centos
CMD echo &#39;action is success&#39;

(2)构建

docker build .

(3)查看

[root@localhost xu]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
centosjava8                   1.0       4dbff0755585   31 minutes ago   747MB
<none>                        <none>    9818ccf3738e   19 months ago    231MB
centos                        latest    5d0da3dc9764   19 months ago    231MB

# 查看所有虚悬镜像
[root@localhost xu]# docker image ls -f dangling=true
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
<none>       <none>    9818ccf3738e   19 months ago   231MB

(4)删除

# 删除虚悬镜像
docker image prune

虚悬镜像已经失去存在价值,可以删除

五、docker运行springboot项目

1、准备一个springboot项目

编写一个测试Controller,以供测试。

@RestController
@RequestMapping
public class TestController {

    @GetMapping("/test")
    public String test(){
        return "启动成功 ===================test";
    }
}

2、手动构建jar包

我们使用maven package命令手动打包并上传到服务器上。

[root@localhost ~]# cd mydocker/
[root@localhost mydocker]# ll
total 17084
-rw-r--r--. 1 root root 17491177 Apr  9 14:18 demo-0.0.1-SNAPSHOT.jar

注!通常来说这一步可以使用jenkins自动构建。

3、编写Dockerfile

# 基础镜像使用java
FROM centosjava8:1.0
# 作者
MAINTAINER cxf
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为cxf_docker.jar
ADD demo-0.0.1-SNAPSHOT.jar /cxf_docker.jar
# 运行jar包
RUN bash -c &#39;touch /cxf_docker.jar&#39;
ENTRYPOINT ["java","-jar","/cxf_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 8088

4、构建镜像

docker build -t mydemo:1.0 .

[root@localhost mydocker]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
mydemo                        1.0       7124eca083ad   26 seconds ago   764MB
centosjava8                   1.0       4dbff0755585   7 hours ago      747MB

5、运行容器

docker run -d -p 8088:8088 7124eca083ad

6、访问测试

访问服务器我们的接口,发现测试成功!

以上がdockerfile を使用して springboot プロジェクトをデプロイする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。