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: 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
(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
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
Imej asas yang manakah imej baharu berdasarkan templat 🎜>2. MAINTAINER dan LABEL
# 命令格式 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
(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. DEDAHKANPort yang didedahkan oleh bekas semasa
# 录入:RUN ["./test.php", "dev", "offline"] 等价于RUN ./test.php dev offline RUN ["可执行文件", "param1", "param2"]
EXPOSE 80 EXPOSE 80/tcp EXPOSE 80/udp6 USER menentukan jenis pengguna imej yang akan dilaksanakan. . Jika kedua-duanya tidak dinyatakan, lalainya ialah akar
WORKDIR /path/to/workdir7 ENV digunakan untuk menetapkan pembolehubah persekitaran semasa proses pembinaan imej
# 命令格式 USER <user>[:<group>] USER <UID>[:<GID>] # 实例 USER cxf8
# 命令格式 ENV <key>=<value> ... # 实例 ENV MY_PATH /usr/mytest #这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量, #比如:WORKDIR $MY_PATH
9 COPY
ADD a.tar.gz /mydir/10, VOLUMEVolume data bekas, digunakan untuk penyimpanan dan kegigihan data
11 CMD
Perhatian! Terdapat berbilang arahan CMD dalam Dockerfile, tetapi
COPY src dest COPY ["src", "dest"] <src源路径>:源文件或者源目录 <dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
只有最后一个生效,CMD 会被 docker run 之后的参数替换
juga digunakan untuk menentukan arahan untuk dijalankan apabila bekas bermula.
adalah serupa dengan arahan CMD, tetapi
, dan parameter baris arahan iniCMD ["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:# 命令格式 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 指令指定的程序
# 注意大写字母D vi Dockerfile
# 指定基础镜像,需要保证本地有这个镜像 FROM centos # 指定作者邮箱 MAINTAINER cxf # 工作目录 ENV MYPATH /usr/local WORKDIR $MYPATH # 准备工作 RUN cd /etc/yum.repos.d/ RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /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
注意!本目录下只有一个Dockerfile并且包含jdk安装包
# 构建新镜像命令格式 。注意,上面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
docker run -it 4dbff0755585 /bin/bash #我们发现,新的镜像携带着vim、ifconfig和java环境了!
仓库名、标签都是
(1)创建Dockerfile
FROM centos CMD echo 'action is success'
(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
虚悬镜像已经失去存在价值,可以删除
编写一个测试Controller,以供测试。
@RestController @RequestMapping public class TestController { @GetMapping("/test") public String test(){ return "启动成功 ===================test"; } }
我们使用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自动构建。
# 基础镜像使用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 'touch /cxf_docker.jar' ENTRYPOINT ["java","-jar","/cxf_docker.jar"] #暴露6001端口作为微服务 EXPOSE 8088
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
docker run -d -p 8088:8088 7124eca083ad
访问服务器我们的接口,发现测试成功!
Atas ialah kandungan terperinci Cara menggunakan dockerfile untuk menggunakan projek springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!