docker容器 ———镜像制作

本文详细介绍了Docker镜像的分层概念,Dockerfile的用途以及镜像的三种创建方式:基于已有镜像、本地模板和Dockerfile。Dockerfile包括基础镜像信息、维护者信息、镜像操作指令和容器启动指令。此外,文章还讲解了如何通过不同方法创建新镜像,包括设置说明信息、作者信息以及如何基于Dockerfile创建Apache镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、docker镜像

1.镜像的分层

Dockerfile是一个Docker镜像的描述文件,其内部包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

  • Dockerfile中的每个指令都会创建一个新的镜像层
  • 镜像层将被缓存和复用
  • 当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效
  • 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效
  • 镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件。

在Dockerfile创建镜像过程中会产生临时容器缓存数据,但是创建完成后临时容器都会被删除。

2.docker镜像的创建方式

  • 基于已有镜像创建
  • 基于本地模板创建
  • 基于Dockerfile创建

3.Dockerfile

  • dockerfile文件结构

Dockerfile文件是由一组指令组成,文件结构分为四部分

① 基础镜像信息

② 维护者信息

③ 镜像操作指令

④ 容器启动时执行指令

  • dockerfile操作指令:
指令含义
FROM 镜像指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令。
MAINTAINER 名字说明新镜像的维护人信息
RUN命令在所基于的镜像上执行命令,并提交到新的镜像中
CMD[“要运行的程序”," 参数1" “参数2”]指令启动容器时要运行的命令或脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行
EXPOSE 端口号指定新镜像加载到docker时要开启的端口
ENV 环境变量 变量值设置一个环境变量的值,会被后边的RUN使用
ADD 源文件/目录 目标文件/目录将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录 目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME [“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器时的用户
WORKDIR 路径为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD 命令指定所生成的镜像作为一个基础镜像时所需要运行的命令
HEALTHCHECK健康检查

二、创建镜像

1.基于已有的镜像容器进行创建

将容器中运行的程序及其环境打包生成新的镜像

格式:docker commit [选项] 容器ID/名称 仓库名称:[标签]

-m :说明信息

-a :作者信息

-p :生成过程中停止容器的运行

实例:

[root@localhost ~] # docker create -it centos:7 /bin/bash
6ac5bf4709ee39e9114ca118feae49b11d88f79a04d4970f2b322b911d6c3643
[root@localhost ~] # docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS    PORTS     NAMES
6ac5bf4709ee   centos:7   "/bin/bash"   12 seconds ago   Created             competent_sammet
[root@localhost ~] # docker commit -m "new" -a "pyy" 6ac5bf4709ee pyy:ppp
sha256:3e63e958a4d8e58ead550433bdaac247e1929e59c741ce432e184926b56555dc
[root@localhost ~] # docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
pyy          ppp       3e63e958a4d8   13 seconds ago   204MB

在这里插入图片描述

2.基于本地模板创建

通过导入操作系统模板文件生成新的镜像
可以使用在线下载的方式下载所需的软件包,速度较慢,可以使用迅雷等软件加速

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

导入之后查看
docker images | grep new

以下已将软件包下载完成,这里直接创建

[root@localhost ~] # cat debian-7.0-x86-minimal.tar.gz | docker import - pyy:new
sha256:7d6e328a65ea34ed5a949446435d907691514ad97400887f410ffb7019fb3c79
[root@localhost ~] # docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
pyy          new       7d6e328a65ea   6 seconds ago    215MB
pyy          ppp       3e63e958a4d8   10 minutes ago   204MB

在这里插入图片描述

3.基于Dockerfile创建

在虚拟机新建目录,编写Dockerfile文件
在同一目录下编写启动脚本run.sh
在同一目录下编写站点信息
创建镜像
新建镜像容器
访问网页测试

例:创建Apache镜像

[root@localhost ~] # cd /opt
[root@localhost /opt] # mkdir apache
[root@localhost /opt] # cd apache/
[root@localhost /opt/apache] # vim Dockerfile
#基础镜像
FROM centos:7
#维护者信息
MAINTAINER pyy
#镜像操作指令
RUN yum -y update
RUN yum install -y httpd
#开启80端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#复制脚本到镜像
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

[root@localhost /opt/apache] # ls
Dockerfile
[root@localhost /opt/apache] # vim run.sh
#!/bin/bash

rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
[root@localhost /opt/apache] # echo "pyy hello" > index.html
[root@localhost /opt/apache] # docker build -t httpd:centos .

[root@localhost /opt/apache] # docker run -d -p 1314:80 httpd:centos 
9761543771ac0ecec0d4474cce010c2a7d2dbb9c1a9da744aae338a10884bd9a
[root@localhost /opt/apache] # docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS          PORTS                  NAMES
9761543771ac   httpd:centos   "/run.sh"     15 seconds ago   Up 13 seconds   0.0.0.0:1314->80/tcp   pensive_satoshi
6ac5bf4709ee   centos:7       "/bin/bash"   55 minutes ago   Created                                competent_sammet
[root@localhost /opt/apache] # cat index.html 
pyy hello

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值