Dockerfile创建镜像

本文介绍了Docker镜像的创建方法,重点讲解基于Dockerfile创建镜像,包括Dockerfile的常用指令如FROM、RUN、CMD、ENTRYPOINT等,并通过构建Apache和Nginx镜像的案例进行实战演示,探讨了多阶段构建和ARG与ENV的使用。
摘要由CSDN通过智能技术生成

Dockerfile创建镜像

一、Docker镜像的创建

创建镜像有三种方法

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

1.1 基于现有镜像创建

docker export 将容器导出
docker run -id --name c1 centos:7    #创建容器c1

docker exec -it c1 bash          #进入c1容器
mkdir -p /var/www/html             #创建/var/www/html 
cd /var/www/html/               
echo "this is a file" > index.txt         #写入数据

在这里插入图片描述

docker ps -a
docker export -o centos7.tar b75b2a0d27fc      #使用export将该容器导出成tar包

在这里插入图片描述

将修改后的容器提交为新的镜像(docker commit)

然后将修改后的容器提交为新的镜像,需要使用该容器的ID号创建新镜像

常用选项:

-m 指定说明信息
-a 指定作者信息
-p 生成过程中停止容器的运行

格式:
docker commit -m 说明信息 -a 作者信息 -p 容器ID 生成新的镜像名称

  1. 将容器导出成镜像
docker commit -m "new" -a "yy" -p b75b2a0d27fc centos7:new

在这里插入图片描述
2. 使用导出的镜像创建容器

docker run -id centos7:new 

在这里插入图片描述
3. 查看容器数据

docker exec -it f154c1fa532d bash
cd /var/www/html/
cat index.txt 

在这里插入图片描述
4. 查看镜像详细信息

docker inspect 6238358a936a 

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

使用commit创建后的镜像,能把容器修改过的记录保存下来
使用原镜像创建容器,修改过的记录不会存在

1.2 基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ 开源项目下载,下载地址为:Open source container-based virtualization for Linux. (openvz.org)

在这里插入图片描述

#模板里面就是使用docker export 命令导出的容器文件#下载模板
 wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
 ​
 #将模板导入为镜像,两种方法
 cat debian-7.0-x86-minimal.tar.gz | docker import - debian:test  #方法一
  
 docker import debian-7.0-x86-minimal.tar.gz -- debian:test  #方法二#查看镜像
 docker images
 ​
 #使用导入的镜像创建容器
 docker run -itd debian:test bash
 docker ps -a


在这里插入图片描述

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

1.3 基于Dockerfile 创建

联合文件系统(UnionFS )

UnionFS(联合文件系统): Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。AUFS、overlayFS 及Devicemapper 都是一种UnionFS 。

Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性: 一次同时加载多个文件系统,但从外面看起来,只能看到一一个

Docker Swarm是Docker的原生集群管理工具,可以用于在多个主机上运行和管理容器Dockerfile是一种用于定义Docker镜像构建过程的文本文件。 使用Docker Swarm时,可以使用Dockerfile创建镜像,但其实创建镜像的过程与在单个主机上创建镜像的过程非常相似。主要的区别是,在Swarm中创建镜像将会在整个集群中被使用,而非仅限于单个主机。 首先,在Swarm集群的主节点上创建一个Dockerfile,该文件包含了构建镜像的指令和配置。以一个简单的Node.js应用为例,可以定义如下的Dockerfile: ``` FROM node:14-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD [ "npm", "start" ] ``` 然后,在主节点的终端中,使用`docker build`命令来构建镜像。例如,使用以下命令创建一个名为`my-app`的镜像: ``` docker build -t my-app . ``` 接下来,使用`docker push`命令将构建好的镜像推送到Docker镜像仓库。例如,可以推送到Docker Hub: ``` docker push username/my-app ``` 最后,在Swarm集群的其他节点上使用`docker service`命令来创建服务,并使用先前构建的镜像作为服务的副本。例如,使用以下命令创建一个名为`my-app`的服务: ``` docker service create --name my-app --replicas 3 username/my-app ``` 这将在集群的多个节点上运行三个容器的副本,以提供高可用性和负载均衡的服务。 通过以上步骤,我们可以使用DockerfileDocker Swarm集群中创建镜像,并在集群中运行多个容器的副本来提供服务。这种方式使得应用程序可以更加灵活地在集群中运行,并可以根据需要进行扩展和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值