Rumah  >  Artikel  >  Java  >  Bagaimana untuk membina imej aplikasi web springboot dan menggunakan ia menggunakan bekas

Bagaimana untuk membina imej aplikasi web springboot dan menggunakan ia menggunakan bekas

WBOY
WBOYke hadapan
2023-05-19 14:10:481335semak imbas

    Kami mengetahui tiga konsep utama Docker: imej, kontena dan gudang Imej adalah asas untuk operasi kontena kami adalah untuk mendapatkan imej asas Docker Hub. , lakukan pembangunan tersuai tertentu berdasarkan imej asas (contohnya, meletakkan aplikasi dalam imej), jana imej baharu dan mulakan bekas berdasarkan imej baharu ini untuk menjalankan aplikasi.

    1. Dua kaedah menjana imej

    Secara umumnya terdapat dua kaedah untuk membuat imej Docker Satu adalah berdasarkan fail konfigurasi fail docker dan dilakukan menggunakan docker build dan kaedah pengeluaran cermin yang sahih; yang kedua ialah menjana cermin baharu secara manual daripada kandungan yang diubah suai dengan menggunakan arahan seperti docker commit.

    1.1. Gunakan komit untuk menjana imej

    Kaedah ini tidak sesuai untuk penjanaan imej berskala besar Pertama, kandungan pembinaan imej tidak dapat dikesan kembali agak rendah, tetapi dalam keadaan tertentu Ia juga mempunyai kemudahannya dalam beberapa situasi sementara, terutamanya semasa pembangunan dan ujian Jika anda perlu memasang beberapa perisian baharu buat sementara waktu, anda boleh menjana imej baharu dengan cepat.

    Berikut ialah contoh penjanaan imej yang disertakan dengan Golang untuk menunjukkan cara menggunakan commit untuk menjana imej.

    1.1.1. Tarik imej asas Centos

    Mula-mula kita perlu menarik imej asas Centos akan berdasarkan imej asas ini.

    Cari imej centos:

    [root@node1 ~]# docker search centos
    INDEX       NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/centos                                       DEPRECATED; The official build of CentOS.       7529      [OK]
    docker.io   docker.io/kasmweb/centos-7-desktop                     CentOS 7 desktop for Kasm Workspaces            33
    docker.io   docker.io/couchbase/centos7-systemd                    centos7-systemd images with additional deb...   7                    [OK]

    Tarik imej rasmi dengan bilangan BINTANG tertinggi

    [root@node1 ~]# docker pull centos
    Using default tag: latest
    Trying to pull repository docker.io/library/centos ...
    latest: Pulling from docker.io/library/centos
    a1d0c7532777: Pull complete
    Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
    Status: Downloaded newer image for docker.io/centos:latest
    1.1.2, mulakan bekas Centos dan pasang Go
    [root@node1 ~]# docker run -it centos /bin/bash
    [root@311c53f54f2f /]#
    [root@311c53f54f2f /]# go version
    bash: go: command not found

    di sini Ia membuktikan tiada golang dalam centos asas.

    Menggunakan yum untuk memasang golang, saya menemui mesej ralat berikut

    [root@311c53f54f2f /]# yum install go
    Failed to set locale, defaulting to C.UTF-8
    CentOS Linux 8 - AppStream                                                                                            71  B/s |  38  B     00:00
    Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

    Ini kerana masalah sumber yum, yang boleh diselesaikan dengan melaksanakan arahan berikut:

    [root@311c53f54f2f yum.repos.d]# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
    [root@311c53f54f2f yum.repos.d]# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
    [root@311c53f54f2f yum.repos.d]# yum clean all
    Failed to set locale, defaulting to C.UTF-8
    0 files removed
    [root@311c53f54f2f yum.repos.d]# yum makecache
    Failed to set locale, defaulting to C.UTF-8
    CentOS Linux 8 - AppStream                                                                                           2.6 MB/s | 8.4 MB     00:03
    CentOS Linux 8 - BaseOS                                                                                              2.0 MB/s | 4.6 MB     00:02
    CentOS Linux 8 - Extras                                                                                              7.7 kB/s |  10 kB     00:01
    Metadata cache created.

    Golang telah berjaya dipasang seperti biasa

    [root@311c53f54f2f yum.repos.d]# yum install go
    [root@311c53f54f2f yum.repos.d]# go version
    go version go1.16.12 linux/amd64
    1.1.3, komited untuk menjana imej baharu

    Penggunaan pertama docker ps untuk melihat id bekas semasa, berikut ialah 311c53f54f2f.

    [root@node1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    311c53f54f2f        centos              "/bin/bash"         13 minutes ago      Up 13 minutes

    Gunakan perintah docker commit untuk menjana imej baharu

    [root@node1 ~]# docker commit -a "lucas" -m "install golang" 311c53f54f2f centos-go:v1
    sha256:019ab02d451defb75e2ee03948289ed008036ba7ec8a355cae28bdf7fbce07d2

    Gunakan docker image sekali lagi untuk melihat imej baharu centos-go yang kami hasilkan.

    [root@node1 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos-go           v1                  019ab02d451d        2 minutes ago       805 MB
    docker.io/busybox   latest              bab98d58e29e        8 days ago          4.86 MB
    docker.io/nginx     latest              904b8cb13b93        13 days ago         142 MB
    docker.io/centos    latest              5d0da3dc9764        18 months ago       231 MB
    1.1.4 Gunakan imej baharu untuk mengesahkan persekitaran Golang
    [root@node1 ~]# docker run -it centos-go:v1 /bin/bash
    [root@daff0519f2ca /]# go version
    go version go1.16.12 linux/amd64

    1.2. Gunakan Dockerfile untuk menjana imej

    Dockerfile ialah fail teks yang mengandungi bangunan imej Docker. arahan untuk Automatikkan proses binaan imej Docker. Dockerfile menerangkan proses pembinaan imej melalui satu siri arahan, termasuk imej asas, pemasangan kebergantungan, salinan fail, konfigurasi pembolehubah persekitaran, arahan permulaan, dsb. Sintaks Dockerfile adalah bahasa yang serupa dengan skrip shell.

    Fail Docker mengandungi empat bahagian: maklumat imej asas, maklumat penyelenggara, arahan operasi imej dan arahan permulaan kontena. Dalam Dockerfile, komen bermula dengan # boleh digunakan untuk menerangkan fungsi arahan atau memberikan maklumat ulasan lain.

    Berikut ialah beberapa arahan Dockerfile biasa:

    • FROM: Tentukan imej asas, seperti FROM ubuntu:latest, arahan FROM mestilah arahan pertama kecuali ulasan . Ikut rapat dengan arahan maklumat penyelenggara.

    • PENYELENGGARA: Tentukan maklumat penyelenggara, seperti MAINTAINER lucas.

    • RUN: Jalankan arahan dalam imej, seperti RUN apt-get update && apt-get install -y nginx.

    • CMD: Tentukan arahan untuk dijalankan apabila bekas bermula, seperti CMD ["nginx", "-g", "daemon off;"].

    • DEDAHKAN: Isytiharkan port yang sepatutnya didengari oleh kontena, seperti EXPOSE 80.

    • ENV: Tetapkan pembolehubah persekitaran, seperti ENV NODE_ENV production.

    • TAMBAH: Salin fail ke imej, seperti ADD app.js /app.js.

    • SALINAN: Salin fail ke imej, seperti COPY app.js /app.js.

    • WORKDIR: Tetapkan direktori kerja, seperti WORKDIR /app.

    • PENGGUNA: Tetapkan pengguna untuk digunakan apabila bekas bermula, seperti USER nginx.

    • VOLUME: mengisytiharkan volum data bekas, seperti VOLUME /data.

    • ENTRYPOINT: Tentukan arahan untuk dijalankan apabila bekas bermula, seperti ENTRYPOINT ["nginx", "-g", "daemon off;"].

    Selain arahan biasa ini, Dockerfile mempunyai arahan lain yang tersedia. Anda boleh menyemak dokumentasi Docker rasmi untuk mendapatkan maklumat lanjut.

    Selepas melengkapkan konfigurasi fail docker, gunakan docker build untuk membina imej. Perintah docker build boleh menyesuaikan proses binaan dengan menentukan parameter yang berbeza. Sebagai contoh, anda boleh menggunakan pilihan --no-cache untuk memaksa Docker supaya tidak menggunakan cache semasa membina imej, atau gunakan pilihan --build-arg untuk menghantar pembolehubah persekitaran yang diperlukan semasa pembinaan. Semua pilihan yang tersedia boleh dilihat melalui perintah docker build --help.

    2. Hasilkan imej springboot berdasarkan Dockerfile

    Di sini kami menunjukkan cara menggunakan dockerfile untuk membina imej aplikasi web springboot dan menggunakan docker untuk memulakan bekas.

    2.1、准备springboot应用jar包

    我们准备一个基于springboot开发的应用服务,这个服务开放8080端口,访问是返回一个用户的姓名信息。

    为了方便,可以使用spring initializr 在线生成demo代码,在demo代码的基础上开发一个controller返回一个User对象的name信息,由于这块代码比较简单,这里就不详述过程了。

    Bagaimana untuk membina imej aplikasi web springboot dan menggunakan ia menggunakan bekas

    代码完成以后使用mvn clean package进行打包,这里打包成功以后生成了demo-0.0.1-SNAPSHOT.jar,我们使用java -jar demo-0.0.1-SNAPSHOT.jar就可以运行这个应用程序。

    2.2、编写Dockerfile

    在项目根目录下创建一个名为Dockerfile的文件,并在其中添加以下内容:

    FROM openjdk:18-jdk-alpine
    MAINTAINER lucas
    COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/
    WORKDIR /usr/app
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "demo-0.0.1-SNAPSHOT.jar"]

    在上面的Dockerfile中,FROM指令指定了基础镜像为openjdk:18-jdk-alpineCOPY指令将构建好的可执行jar包复制到容器中,WORKDIR指令设置工作目录为/usr/appEXPOSE指令指定了容器运行的端口为8080ENTRYPOINT指令指定了容器启动时要执行的命令为java -jar demo-0.0.1-SNAPSHOT.jar

    在终端中进入项目根目录,然后执行以下命令构建镜像:

    docker build -t demo:latest .

    其中,-t参数指定了镜像的名称和版本号,.参数指定了Dockerfile所在的目录。

    [root@node1 docker]# docker build -t demo:latest .
    Sending build context to Docker daemon 51.05 MB
    Step 1/6 : FROM openjdk:18-jdk-alpine
     ---> c89120dcca4c
    Step 2/6 : MAINTAINER lucas
     ---> Running in 3d0ae6d2a813
     ---> 085b9066ca7b
    Removing intermediate container 3d0ae6d2a813
    Step 3/6 : COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/
     ---> c5c77f80f179
    Removing intermediate container 00228e4b0aed
    Step 4/6 : WORKDIR /usr/app
     ---> bdb555e3fb18
    Removing intermediate container 35682266f140
    Step 5/6 : EXPOSE 8080
     ---> Running in 499d9888fa01
     ---> 0fca023e8f23
    Removing intermediate container 499d9888fa01
    Step 6/6 : ENTRYPOINT java -jar demo-0.0.1-SNAPSHOT.jar
     ---> Running in 661fdaafa31d
     ---> 61e80950d665
    Removing intermediate container 661fdaafa31d
    Successfully built 61e80950d665

    可以看到构建成功,使用docker images 可以查看到构建成功的镜像。

    Bagaimana untuk membina imej aplikasi web springboot dan menggunakan ia menggunakan bekas

    三、运行容器服务,验证镜像的可用性

    以上步骤已经使用docker build生成了镜像,接下来就可以使用这个镜像启动容器,启动后会自动启动应用程序。

    在终端中执行以下命令启动容器:

    docker run -d -p 8080:8080 demo:latest

    其中,-d参数指定了容器在后台运行,-p参数指定了容器的端口映射,demo:latest参数指定了要运行的镜像名称和版本号。

    访问对应的web服务进行访问验证,结果如下:

    Bagaimana untuk membina imej aplikasi web springboot dan menggunakan ia menggunakan bekas

    Atas ialah kandungan terperinci Bagaimana untuk membina imej aplikasi web springboot dan menggunakan ia menggunakan bekas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam