Rumah  >  Artikel  >  Java  >  Cara menggunakan dockerfile untuk menggunakan projek springboot

Cara menggunakan dockerfile untuk menggunakan projek springboot

PHPz
PHPzke hadapan
2023-05-15 23:55:133909semak imbas

1. Gambaran keseluruhan fail docker

Fail Docker ialah fail teks yang digunakan untuk membina imej Docker Ia adalah skrip yang terdiri daripada arahan dan parameter yang diperlukan untuk membina imej.

1. Asas fail Docker

1: Setiap arahan perkataan yang dikhaskan ialah 必须为大写字母 dan mesti diikuti oleh sekurang-kurangnya satu parameter
2: Arahan dilaksanakan mengikut urutan dari atas ke bawah
3: # mewakili ulasan
4: Setiap arahan akan mencipta lapisan imej baharu dan menyerahkan imej

2 Proses umum Docker melaksanakan Dockerfile

(1) docker Jalankan bekas daripada imej asas
(2) Jalankan arahan dan buat pengubahsuaian pada bekas
(3) Jalankan operasi yang serupa dengan docker commit untuk menyerahkan lapisan imej baharu
(4) Docker akan maka berdasarkan yang baru diserahkan Imej menjalankan bekas baru
(5) Laksanakan arahan seterusnya dalam fail docker sehingga semua arahan dilaksanakan

Cara menggunakan dockerfile untuk menggunakan projek springboot

3 imej, bekas dan fail docker

Dari perspektif perisian aplikasi, Dockerfile, Docker image dan Docker container masing-masing mewakili tiga peringkat perisian yang berbeza

  • Dockerfile ialah bahan mentah perisian

  • Imej Docker ialah penghantaran perisian

  • Bekas docker boleh dianggap sebagai keadaan berjalan imej perisian, iaitu, contoh kontena berjalan mengikut imej
    Fail Docker Untuk pembangunan, imej Docker telah menjadi standard penghantaran, manakala bekas Docker melibatkan penggunaan dan operasi serta penyelenggaraan ketiga-tiganya amat diperlukan, dan bersama-sama ia berfungsi sebagai asas sistem Docker.

1 Dockerfile, anda perlu mentakrifkan Dockerfile mentakrifkan semua yang diperlukan oleh proses. Kandungan yang terlibat dalam Dockerfile termasuk melaksanakan kod atau fail, pembolehubah persekitaran, pakej bergantung, persekitaran masa jalan, perpustakaan pautan dinamik, pengedaran sistem pengendalian, proses perkhidmatan dan proses kernel (apabila proses aplikasi perlu berurusan dengan perkhidmatan sistem dan proses kernel, ini Anda perlu mempertimbangkan cara mereka bentuk kawalan kebenaran ruang nama), dsb.;
2 Imej Docker, selepas mentakrifkan fail dengan Dockerfile, imej Docker akan dijana semasa binaan docker, dan apabila imej Docker dijalankan, ia sebenarnya akan bermula untuk menyediakan perkhidmatan;
3 kontena Docker, kontena terus menyediakan perkhidmatan.

Langkah pembinaan asas: (1) Tulis fail Dockerfile (2) arahan binaan docker untuk membina imej (3) docker run untuk menjalankan contoh kontena mengikut imej

2. Common reserved perkataan dalam fail docker

1. FROM

Imej asas yang manakah imej baharu berdasarkan templat 🎜>2. MAINTAINER dan LABEL

Nama dan alamat e-mel penyelenggara imej

# 命令格式
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
# 实例:
FROM centos:7.0

Arahan ini telah ditamatkan. LABEL disyorkan, ia boleh menetapkan sebarang metadata yang anda perlukan.

# 命令格式
MAINTAINER <name>

3. RUN

Arahan yang perlu dijalankan semasa membina bekas RUN dijalankan semasa binaan docker

(1) format shell (biasa digunakan)<.>

# 命令格式
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."

(2) format exec

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

4. DEDAHKAN

Port yang didedahkan oleh bekas semasa

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

5 ditentukan semasa mencipta bekas Selepas itu, terminal log masuk secara lalai dan memasuki direktori kerja, titik permulaan

EXPOSE 80
EXPOSE 80/tcp
EXPOSE 80/udp

6 USER

menentukan jenis pengguna imej yang akan dilaksanakan. . Jika kedua-duanya tidak dinyatakan, lalainya ialah akar

WORKDIR /path/to/workdir

7 ENV

digunakan untuk menetapkan pembolehubah persekitaran semasa proses pembinaan imej

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

# 实例
USER cxf

8

Salin fail dalam direktori hos ke dalam imej Dan ia akan memproses URL secara automatik dan menyahmampat arkib tar

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

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

9 COPY

adalah serupa dengan ADD, menyalin fail dan direktori kepada imej.

Salin fail/direktori daripada dalam direktori konteks binaan ke dalam lapisan baharu imej

ADD a.tar.gz /mydir/

10, VOLUME

Volume data bekas, digunakan untuk penyimpanan dan kegigihan data


11 CMD

Nyatakan perkara yang perlu dilakukan selepas bekas dimulakan

Perhatian! Terdapat berbilang arahan CMD dalam Dockerfile, tetapi

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

CMD dijalankan apabila docker run. RUN dijalankan semasa pembinaan docker.

12. ENTRYPOINT

只有最后一个生效,CMD 会被 docker run 之后的参数替换 juga digunakan untuk menentukan arahan untuk dijalankan apabila bekas bermula.

adalah serupa dengan arahan CMD, tetapi

, dan parameter baris arahan ini

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

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

ENTRYPOINT boleh digunakan bersama-sama dengan CMD Secara amnya, CMD digunakan untuk parameter berubah. CMD di sini Ia bersamaan dengan menghantar parameter ke ENTRYPOINT.

Apabila ENTRYPOINT ditentukan, makna CMD berubah daripada menjalankan perintahnya secara langsung, kandungan CMD dihantar sebagai parameter kepada perintah ENTRYPOINT Gabungan kedua-duanya akan menjadi: CMD>”

# 命令格式
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
ENTRYPOINT不会被docker run后面的命令覆盖Apabila melaksanakan docker run, anda boleh menentukan parameter yang diperlukan untuk operasi ENTRYPOINT. Jika terdapat berbilang arahan ENTRYPOINT dalam Dockerfile, hanya yang terakhir akan berkuat kuasa. 会被当作参数送给 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安装包

Cara menggunakan dockerfile untuk menggunakan projek 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、访问测试

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

Atas ialah kandungan terperinci Cara menggunakan dockerfile untuk menggunakan projek springboot. 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