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              
相关推荐
Algorithm157620 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
蜜獾云1 小时前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
年薪丰厚2 小时前
如何在K8S集群中查看和操作Pod内的文件?
docker·云原生·容器·kubernetes·k8s·container
zhangj11252 小时前
K8S Ingress 服务配置步骤说明
云原生·容器·kubernetes
岁月变迁呀2 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
墨水\\2 小时前
二进制部署k8s
云原生·容器·kubernetes
Source、3 小时前
k8s-metrics-server
云原生·容器·kubernetes
颜淡慕潇3 小时前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes
ProtonBase3 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
大熊程序猿5 小时前
K8s证书过期
云原生·容器·kubernetes