资讯动态

4. docker镜像、Dockerfile

发布时间:2026/8/21 14:52:38 来源:尧图企业网站定制
docker镜像、Dockerfile一、docker镜像1、镜像介绍2、镜像核心技术二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile1.2、构建镜像1.3 创建容器测试镜像定制操作2、Dockerfile常用指令三、Dockerfile应用1、定制nginx镜像2、定制spring boot类型项目镜像四、jenkins自动发布业务容器1、上传项目代码2、安装配置jenkins2.1 创建容器运行jenkins2.2 安装插件2.3 配置gitee连接2.4 配置git工具2.5 配置maven编译工具2.6 配置jdk2.7 添加业务服务器3、创建任务配置业务发布流程3.1 创建任务一、docker镜像1、镜像介绍分层的文件系统优势节省空间、速度快、重用只读创建容器时会在镜像上面添加一个可写层2、镜像核心技术COW copy on write 写时复制Union fs 联合文件系统overlay2device mapper[rootmartin-host ~]# docker infoClient: Docker Engine - Community Version:26.1.4 Context: default Debug Mode:falsePlugins: buildx: Docker Buildx(Docker Inc.)Version: v0.14.1 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose(Docker Inc.)Version: v2.27.1 Path: /usr/libexec/docker/cli-plugins/docker-compose Server: Containers:1Running:0Paused:0Stopped:1Images:4Server Version:26.1.4 Storage Driver: overlay2二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile[rootmartin-host testDockerfile]# lsCentOS-Base.repo Dockerfile[rootmartin-host testDockerfile]# cat DockerfileFROM centos:7 COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo RUN yuminstall-ynet-tools1.2、构建镜像[rootmartin-host testDockerfile]# docker build -t centos:v1 ./1.3 创建容器测试镜像定制操作[rootmartin-host testDockerfile]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE centos v1 3e88e2fdb6df56seconds ago 461MB redis latest 7614ae9453d12years ago 113MB centos7eeb6ee3f44bd2years ago 204MB nginx1.18c2c45d5060853years ago 133MB[rootmartin-host testDockerfile]# docker run -tid --nametest1 centos:v1949b757d2b35b4d115a88f69cc8f1d704b6e6fcd34a64d4ecbfc28422e7530aa[rootmartin-host testDockerfile]# docker exec -ti test1 bash[root949b757d2b35 /]# ifconfigeth0:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1472inet10.88.7.2 netmask255.255.255.0 broadcast10.88.7.255 ether 02:42:0a:58:07:02 txqueuelen0(Ethernet)RX packets8bytes656(656.0B)2、Dockerfile常用指令FROM指定基础镜像镜像不存在构建镜像时自动下载镜像建议尽量选择小容量的镜像 / debian/ ubuntuFROM 镜像名称RUN指定定制命令RUN 命令命令命令CMD定义容器创建时自动执行的命令注意事项:1、前台启动服务的指令2、创建容器时不要自己指定命令会覆盖CMD3、一个Dockerfile中只能有一条CMD指令CMD httpd-DFOREGROUND CMD[httpd,-D,FOREGROUND]// 推荐ENTRYPOINT定义容器创建时自动执行的命令不会被覆盖ENTRYPOINT[httpd,-D,FOREGROUND]COPY复制文件注意只能复制本地文件COPY 源文件 目的文件ADD复制文件注意1、支持本地文件、URL、压缩包会自动解压ADD 源文件 目的文件ADD file01 /tmp/file01 ADD http://nginx.org/download/nginx-1.27.0.tar.gz /tmp ADD jdk-8u91-linux-x64.tar.gz /tmpEXPOSE说明容器服务端口注意1、-P随机发布端口时Dockerfile中必须有EXPOSE指令EXPOSE 端口 端口VOLUME定义持久化存储的目录创建容器时不使用-v明确指定目录会自动生成匿名卷VOLUME 目录ENV定义环境变量ENV 变量名称 值WORKDIR定义当前目录WORKDIR 目录USER指定容器运行的用户USER用户名三、Dockerfile应用1、定制nginx镜像FROM centos:7 COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo RUN yuminstall-ygcc openssl-devel zlib-devel pcre-develmakeADD https://nginx.org/download/nginx-1.27.3.tar.gz /tmp RUNtarxf /tmp/nginx-1.27.3.tar.gz-C/tmpcd/tmp/nginx-1.27.3./configure--prefix/usr/local/nginxmakemakeinstallrm-rf/tmp/nginx* CMD[/usr/local/nginx/sbin/nginx,-g,daemon off;]EXPOSE80/tcp2、定制spring boot类型项目镜像FROM adoptopenjdk/openjdk8:latest COPY statics-1.0-SNAPSHOT.jar /static.jar CMD[java,-jar,/static.jar]EXPOSE8081/tcp四、jenkins自动发布业务容器1、上传项目代码2、安装配置jenkins2.1 创建容器运行jenkins[rootmartin-host ~]# mkdir /jenkins/home -p[rootmartin-host ~]# chmod ow /jenkins/home/[rootmartin-host ~]# docker run -tid --namejenkins --hostnamejenkins --restartalways -v /jenkins/home/:/var/jenkins_home -p 9000:8080 -p 50000:50000 jenkins/jenkinsc339f5e6f90900fabdfa9be5ea6669b94d2d537aa6d6de40bf927dfdf27294c9[rootmartin-host ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c339f5e6f909 jenkins/jenkins/usr/bin/tini -- /u…3seconds ago Up3seconds0.0.0.0:50000-50000/tcp, :::50000-50000/tcp,0.0.0.0:9000-8080/tcp, :::9000-8080/tcp jenkins2.2 安装插件giteeMaven IntergationPublish Over SSH2.3 配置gitee连接2.4 配置git工具2.5 配置maven编译工具2.6 配置jdk[rootmartin-host ~]# tar xf jdk-15.0.2_linux-x64_bin.tar.gz -C /jenkins/home/2.7 添加业务服务器[rootmartin-host ~]# docker exec -ti jenkins bashjenkinsjenkins:/$ jenkinsjenkins:/$ ssh-keygen-trsa jenkinsjenkins:/$ ssh-copy-id root192.168.140.103、创建任务配置业务发布流程3.1 创建任务命令参考dockerrmi demo:1.0dockerrm-fdemocd/test/democateofDockerfileFROM adoptopenjdk/openjdk8:latest COPY *.jar /demo.jar CMD [ java, -jar, /demo.jar ] eofdockerbuild-tdemo:1.0 ./dockerrun-tid--namedemo--hostnamedemo--restartalways-p8080:8080 demo:1.0

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价