镜像定义
Docker 镜像是由文件系统叠加而成,最底端是一个文件引导系统,即 bootfs。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。例图如下。
2.构建镜像
构建镜像主要有两种方法:
- 使用 docker commit 命令
- 使用 docker build 和 Dockerfile 命令
推荐使用 Dockerfile 构建镜像,因为 Dockerfile 更加灵活、强大。
1.使用 Docker 的 commit 命令创建镜像
Docker 的 comiit 命令有点类似于 SVN、Git,先创建一个 容器,然后对容器进行修改,然后提交成为一个新镜像。
首先,基于 Ubuntu 容器创建一个新镜像。
docker run -it centos:7 /bin/bash
在/home 路径下创建 xw 文件夹:mkdir /home/xw
安装 ifconfig 命令
yum -y install net-tools
提交
docker commit -a
使用 docker images 命令可以看到我们新构建的镜像。
启动新构建的镜像,看下我们创建的目录是否存在。
镜像文件存在,说明构建的镜像是 OK 的。
3.使用 Dockerfile 构建镜像
Dockerfile 使用 DSL 语法编写构建镜像的命令,使用 docker build 命令构建镜像。
首先,先了解一下相关命令。
- MAINTAINER 注明作者
- COPY 复制文件进入镜像(只能用相对路径,不能用绝对路径)
- ENV 设置环境变量
- EXPOSE 暴露容器端口
- RUN 在构建镜像的时候执行,作用于镜像层面
- CMD 在容器启动的时候执行,作用于容器层,dockerfile 里有多条时只允许执行最后一条。(需要运行的命令在数组里面,如果不使用数组指定 CMD 命令,这时 Docker 会在命令前面加上/bin/sh -c,可能会导致不可预计的错误,所以 Docker 推荐一般使用数组形式执行命令)
- ENTRYPOINT 在容器启动的时候执行,作用于容器层,dockerfile 里有多条时只允许执行最后一条
- ADD 复制文件进入镜像(假如文件是.tar.gz 文件会解压)
- WORKDIR 指定工作目录,假如路径不存在会创建路径
我们创建一个最简单的 Dockerfile,内容如下
from centos:7
run cd /home
run mkdir xw
run echo
使用 docker -build 命令构建。
docker build -t mycentos7:1 .
-t 指定 tag,如果我们没有指定 tag,默认使用 latest 标签。打包完成后使用 docker images 命令查看我们构建的镜像。
由于 Dockerfile 每一个步骤的执行结果都会提交成镜像,它会将之前构建的镜像作为缓存,大大加快构建的速度,如果不需要缓存,可以添加 --no-cache 命令
docker build --no-cache -t mycentos:2 .
3.镜像推送到 Docker Hub
首先注册一个 docker Hub 账号。使用 docker login 命令,登录
开始推送
docker push mycentos7
镜像名称不符合规范,重命名
docker tag cea9577866a5 docker.io/2457081614/mycentos7
重新推送。
docker push docker.io/2457081614/mycentos7
推送成功。
加油,共勉。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于