Dockerfile

目录

一、镜像构建步骤

二、dockerfile简介

三、DockerFile构建过程

3.1基础知识:

3.2流程:

3.3Dockerfile指令

四、实战测试

4.1、编写DockerFile文件

4.2、构建

4.3、运行

4.4、列出镜像地的变更历史


一、镜像构建步骤

1、编写DockerFile文件

2、docker build 构建镜像

3、docker run

二、dockerfile简介

Dockerfile是用来构建Docker镜像的构建文件,是由一系列的命令和参数构成的脚本。
Dockerhttps://hub-stage.docker.com/_/centos

说明:

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,*Dockerfile是软件的原材料*Docker镜像是软件的交付品*Docker容器则可以认为是软件的运行态。Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者不可,合力充当Docker体系的基石。

DockerFile:需要定义一个DockerFile,DockerFile定义了进程需要的一切东西。DockerFile涉及的内容 包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进 程和内核进程(当引用进行需要和系统服务和内核进程打交道,这时需要考虑如何设计 namespace的权 限控制)等等。

Docker镜像:在DockerFile 定义了一个文件之后,Docker build 时会产生一个Docker镜像,当运行 Docker 镜像时,会真正开始提供服务;

Docker容器:容器是直接提供服务的。

三、DockerFile构建过程

3.1基础知识:

1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上到下,顺序执行

3、# 表示注释

4、每条指令都会创建一个新的镜像层,并对镜像进行提交

3.2流程:

1、docker从基础镜像运行一个容器

2、执行一条指令并对容器做出修改

3、执行类似 docker commit 的操作提交一个新的镜像层

4、Docker再基于刚提交的镜像运行一个新容器

5、执行dockerfile中的下一条指令直到所有指令都执行完成

3.3Dockerfile指令

关键字:

补充:CMD 和 ENTRYPOINT 的区别

两个命令都是指定一个容器启动时要运行的命令

CMD:Dockerfile 中可以有多个CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数 替换!

ENTRYPOINT: docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合

四、实战测试

自定义一个centos

目的:使自己的镜像具备条件有登录后的默认路径为/usr/local

4.1、编写DockerFile文件

复制代码
[root@zhoujunru home]# mkdir dockerfile-test
[root@zhoujunru home]# vi mydockerfile-centos
[root@zhoujunru home]# cat mydockerfile-centos
FROM centos
MAINTAINER zhoujunru<3271999416@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH


EXPOSE 80

CMD /bin/bash

4.2、构建

docker build -f dockerfile地址 -t 新镜像名字:TAG .

. 表示当前目录

复制代码
[root@zhoujunru home]#  docker build -f mydockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon  2.56 kB
Step 1/6 : FROM centos
 ---> 5d0da3dc9764
Step 2/6 : MAINTAINER zhoujunru<3271999416@qq.com>
 ---> Using cache
 ---> 227572c337d6
Step 3/6 : ENV MYPATH /usr/local
 ---> Using cache
 ---> c0e6f2f9628f
Step 4/6 : WORKDIR $MYPATH
 ---> Using cache
 ---> 5a618332615f
Step 5/6 : EXPOSE 80
 ---> Running in 98dd7b875f44
 ---> d17549a1f692
Removing intermediate container 98dd7b875f44
Step 6/6 : CMD /bin/bash
 ---> Running in e598a9e14617
 ---> 1419d5744180
Removing intermediate container e598a9e14617
Successfully built 1419d5744180

4.3、运行

docker run -it 新镜像名字:TAG

复制代码
[root@zhoujunru home]# docker run -it mycentos:0.1
[root@5e53489ddd40 local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@5e53489ddd40 local]# pwd
/usr/local

可以看到,自己构建的镜像登录后默认的路径为/usr/local

4.4、列出镜像地的变更历史

docker history 镜像名

复制代码
[root@zhoujunru home]# docker history mycentos:0.1
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
1419d5744180        About a minute ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/b...   0 B                 
d17549a1f692        About a minute ago   /bin/sh -c #(nop)  EXPOSE 80/tcp                0 B                 
5a618332615f        About a minute ago   /bin/sh -c #(nop) WORKDIR /usr/local            0 B                 
c0e6f2f9628f        About a minute ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0 B                 
227572c337d6        About a minute ago   /bin/sh -c #(nop)  MAINTAINER zhoujunru<32...   0 B                 
5d0da3dc9764        2 years ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           2 years ago          /bin/sh -c #(nop)  LABEL org.label-schema....   0 B                 
<missing>           2 years ago          /bin/sh -c #(nop) ADD file:805cb5e15fb6e0b...   231 MB              
相关推荐
川石课堂软件测试2 小时前
JMeter并发测试与多进程测试
功能测试·jmeter·docker·容器·kubernetes·单元测试·prometheus
吐个泡泡v3 小时前
Docker部署MySQL完整指南:从入门到实践
mysql·docker·容器·部署
一乐小哥3 小时前
Docker 拉取镜像超时?别再瞎抄配置了!亲测 3 个有效镜像源 + 避坑指南
linux·docker
GDAL4 小时前
Docker pull拉取镜像命令的入门教程
运维·docker·容器
tnan25224 小时前
记录docker使用kong consul postgresql配置dns异常解决
docker·kong·consul
cpsvps5 小时前
Docker存储卷备份策略于VPS服务器环境的实施标准与恢复测试
服务器·docker·容器
孫治AllenSun5 小时前
【Docker】安装kafka案例
docker·容器·kafka
江湖有缘15 小时前
【Docker项目实战】使用Docker部署todo任务管理器
docker·容器·eureka
MintonLee复现侠15 小时前
记录RK3588的docker中启动rviz2报错
docker·容器·ros·rk3588·rviz·rviz2
小白不想白a16 小时前
【k8s】k8s安装与集群部署脚本
云原生·容器·kubernetes