怎么制作docker镜像 有多大
发布网友
发布时间:2022-02-26 21:29
我来回答
共2个回答
懂视网
时间:2022-02-27 01:51
产品型号:Thinkpad E15
系统版本:centos8
docker镜像制作方法
Docker Image 有两种制作方法
方法1:docker commit #将容器实例的当前状态保存成image镜像
方法2:docker build #使用 Dockerfile 文件制作 image
主介绍docker commit 用法。
实战:使用docker commit生成一个apache docker镜像
1、创建一个安装好apache web服务器的容器镜像
[root@xuegod63 ~]# docker run -it centos:latest /bin/bash
[root@1d3563200047 /]# yum -y install httpd #在 container 中安装 apache 软件包
[root@1d3563200047 /]# exit
2、查看现有的images 镜像列表
[root@xuegod63 ~]# docker images #查看刚看退出的docker实例。
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 196e0ce0c9fb 13 days ago 196.6 MB注:当前只有一个centos镜像。
3、根据容器当前状态做一个image镜像,创建一个安装了apache工具的centos镜像
语法: docker commit
例:
查看刚才安装了apache软件包的的docker容器ID:
[root@xuegod63 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES1d3563200047 centos "/bin/bash" 10 minutes ago Exited (0) 6 minutes ago tender_joliot
以这个安装了apache软件包的docker容器实例,创建一个镜像。
[root@xuegod63 ~]# docker commit 1d3563200047 centos:apache
sha256:e5917c01599c70d0680beeb35f6df98889dd22106399efd6907d956d8a943242
[root@xuegod63 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos apache 4fd446f1034a 16 seconds ago 269MB
centos latest 0f3e07c0138f 5 weeks ago 220MB
总结:
1、创建一个安装好apache web服务器的容器镜像
2、查看现有的images 镜像列表
3、根据容器当前状态做一个image镜像,创建一个安装了apache工具的centos镜像
热心网友
时间:2022-02-26 22:59
方法/步骤
在使用Docker的过程中,我们除了从Docker Hub上下载已经做好的镜像,很多时候需要我们自己制作镜像。下面想在这个文章中说明一下镜像的制作方法。
制作镜像的方式主要有两种:
通过docker commit 制作镜像
通过docker build 制作镜像
这两种方式都是通过改进已有的镜像来达到自己的目的。制作基础镜像,会在另外一篇文章“从零开始制作基础镜像”中介绍。
docker commit
docker commit 是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。
选择基础镜像
基础镜像的选择要结合自己的需求。可以选择已有的应用镜像来改造,也可以选择Ubuntu,Debian,OpenSuse这类基础系统镜像
我们以ubuntu为例子来说明
步骤1:运行ubuntu 镜像
docker run -i -t ubuntu /bin/bash
步骤2:安装软件并修改软件配置, 比如:安装apache2
apt-get -yqq update
apt-get -y install apache2
安装完成后,对apache2进行配置和修改
步骤3:退出docker并保存镜像
使用“exit”命令退出容器
运行docker comit 命令, 进行保存
docker commit 61412230ae46 own-apache2
docker commit 命令参数说明
命令格式
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS:
-a, --author= 提交的镜像作者
-c, --change=[] Apply Dockerfile instruction to the created image, 没用过
-m, --message= 提交时的说明文字
-p, --pause=true 在commit时,将container 暂停
CONTAINER:
可以使用container 的名字或者ID
REPOSITORY
指定镜像仓库,上述例子中,指定的是本地存储
可以指定远程镜像仓库,如docker hub。也可自建仓库来存放image
TAG:
镜像TAG
docker build
使用docker build创建镜像需要编写Dockerfile.
步骤:
编写自己的Dcokerfile
运行docker build 命令打包镜像
仍然以apache打包为例子。以下是Dockerfile的例子
FROM ubuntu:latest
MAINTAINER sky
#Add 163 mirror for apt
ADD sources.list /etc/apt/sources.listADD .bashrc /root/.bashrcENV DEBIAN_FRONTEND noninteractive# PackagesRUN rm -rf /var/lib/apt/listsRUN apt-get update -q --fix-missingRUN apt-get -y upgrade#ubuntu wwwRUN apt-get install -y apache2 curl libapache2-mod-php5 php5-curl php5-gd php5-mysql rsync mysql-client -qqRUN apt-get autocleanRUN rm -rf /var/lib/apt/lists/*# Setup environmnt for apache's init scriptENV APACHE_CONFDIR /etc/apache2ENV APACHE_ENVVARS $APACHE_CONFDIR/envvarsENV APACHE_RUN_USER www-dataENV APACHE_RUN_GROUP www-dataENV APACHE_RUN_DIR /var/run/apache2ENV APACHE_PID_FILE $APACHE_RUN_DIR/apache2.pidENV APACHE_LOCK_DIR /var/lock/apache2ENV APACHE_LOG_DIR /var/log/apache2ENV LANG CRUN mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIRRUN find "$APACHE_CONFDIR" -type f -exec sed -ri ' \ s!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g; \ s!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g; \' '{}' ';'EXPOSE 80CMD ["apache2", "-DFOREGROUND"]
编辑完成后,在与Dockerfile同一目录下运行docker build 命令
docker build -t apache-img .
如果没有命令出错,docker build会持续运行直到镜像创建完成
而创建的过程本质上是运行一个镜像,然后在镜像中按序执行在Dockerfile中的命令,直到执行结束。
如果中间有命令执行失败,镜像创建会停止。这时就需要看log,并修改Dockerfile,然后再次执行docker build
注:两种镜像创建方式的对比:
docker commit
docker build
难度相对容易,适合新手和对Linux不熟悉的用户相对难,要求有一定的linux和脚本基础知识
文档化
文档化在通过其他文件来实现
Dockerfile本身就是比较好的文档,可读和可理解性比较强。也可配合其他文档带来详细说明
升级,维护
后续升级和维护麻烦,需要再次运行镜像并对内部软件进行升级或者安装新软件增加特性
后续升级和维护会相对简单,可以直接在dockerfile中更改并增加新特性
具体选择哪种方式来制作镜像需要结合实际情况来选择
Dockerfile 关键字详解
FROM
FROM用来指定基础包。在上面的例子中,基础包用的是ubuntu。
MAINTAINER
镜像作者信息,或者维护人员信息
ADD
将文件拷贝到Container内文件系统对应的路径
格式 ADD <src file> <dst file>
所有拷贝到Container中的文件和文件夹权限为0755,uid和gid为0
如果需要修改owner用户或者权限,需要使用RUN进行修改
ADD文件,文件路径要在docker build<PATH>中指定的<PATH>下
RUN
创建镜像时执行
ENV
用来设置环境变量
EXPOSE
Container内部服务开启的端口
主机上如果要使用,还需要在启动Container时,做host-container的商品映射
使用EXPOSE后,一些自动化布署工具可以直接读取这个信息,自动进行端口映射
EXPOSE可以有多条,指定多个端口
WORKDIR
切换工作目录,可进行多次切换(相当于cd命令)
切换目录对RUN,CMD,ENTRYPOINT有效
USER
执行container的用户,如未指定,则默认使用root用户
ENTRYPOINT
Container启动时执行的命令,一个Dockerfile中只能有一条ENTRYPOINT
ENTRYPOINT没有CMD的可替换特性
CMD
Container 启动时执行的命令,一个Dockerfile 中只能有一条CMD命令,如果有多条则只执行最后一条CMD
如果有多条命令希望在启动后执行,可以考虑使用shell 脚本
与ENTRYPOINT的区别
CMD的主要用途是为可执行的container提供默认命令
CMD在运行时是可替换的,比如
在ubuntu中,CMD指定的是/bin/bash。默认情况下运行ubuntu,container中的/bin/bash会被执行
如果使用docker run指定运行命令,那CMD会被替换掉
如:docker run ubuntu /bin/echo "this is a echo". 这时,container 启动后会执行echo 而不是/bin/bash了
ENTRYPOINT是不会替换的,如果在ubuntu镜像中加入ENTRYPOINT,那ENTRYPOINT在启动后会先被执行
CMD可以为ENTRYPOINT来提供参数
例子:
FROM ubuntu:14.10
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
VOLUME
语法:VOLUME [PATH]
VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移
可以将本地文件夹或者其他Container的文件夹挂载到Container中
搭建自己的Docker镜像和私有仓库
1. 选择服务器:建议购买一台海外云主机,以避免各种麻烦。需要注意的是,云主机硬盘空间通常只有40-60G,而Docker镜像会逐渐累积,导致体积增大。请尽量避免多人共用私有仓库或通过团队私有仓库下载非工作需要的镜像。2. 安装Docker:购买云主机后,如果有预装nginx和docker,建议删除,然后按照以下教程重新...
科瑞斯达新建工厂
科瑞斯达公司宣布新建现代化工厂,标志着其在智能制造领域的又一重要布局。该工厂将融合最前沿的生产技术与智能化管理系统,大幅提升生产效率与产品质量。项目落成后,不仅将强化科瑞斯达的产能基础,更将助力其在行业内持续引领创新潮流,为客户提供更加卓越的产品与服务。此举体现了科瑞斯达对未来发展的坚定信心与长远规划。科瑞斯达新建工厂自创建以来,坚持以技术研发为驱动,专注于提供工业领域人工智能和数字化解决方案,基于丰富实践,利用大数据、边缘计算、物联网、工业AI赋能工业软件的研发与应用,协助各行业企业建立持续性竞争优势。团队多来自于世界500强企...
怎么创建docker镜像
创建Docker镜像的步骤如下:1. 使用Dockerfile构建镜像。Dockerfile是一个文本文件,其中包含了一系列创建镜像所需要的指令和配置。通过编写Dockerfile,可以定义镜像的基础镜像、环境变量、暴露的端口、安装的软件包等。然后,使用Docker命令构建镜像。详细解释:编写Dockerfile Dockerfile是创建Docker镜像的核心...
一篇文章帮你搞定 Docker 本地镜像仓库构建-harbor,建议收藏!
操作演示 重启docker服务:systemctl daemon-reload, systemctl restart docker添加harbor到hosts文件:编辑hosts文件并配置DNS解析使用docker登录harbor:docker login admin操作私有仓库:拉取和上传镜像,如:docker pull 10.0.0.201/test/tomcat:v1, docker push 10.0.0.201/test/tomcat:v1清理镜像:...
Docker 四种制作镜像方式
Dockerfile方式:官方推荐的自动化构建工具,通过指令设置系统、安装软件等,便于维护和分享,但构建速度较慢,适合稳定迭代。 导入文件方式:将本地文件打包成镜像,结构清晰,便于管理,但镜像体积大,注意权限问题。 commit命令:快速便捷,直接操作容器,但可能导致版本管理混乱,不推荐用于正式部署。
linux+jdk8+opencv341最轻最小docker基础镜像制作
以下是制作过程的简化版:1. 开始时,使用openjdk:8-jre-alpine作为基础镜像,但由于需要OpenCV,所以考虑增加它。但是,直接在alpine基础上添加OpenCV会导致镜像过大,体积超过85M。2. 为解决此问题,我们尝试了从CentOS7开始,但体积达453M,于是放弃了。不过,这个过程中我们学会了如何在CentOS7上安装...
golang 打包到docker运行最小镜像
1. 首先,编写一个简单的 Go 程序,并使用 Goreleaser 或手动交叉编译生成可执行文件。2. 在本地创建 Dockerfile,确保指定正确的可执行文件路径(如 `COPY golang_app /apps/golang_app`)。3. 运行 `docker build -t go_docker_demo1:v1.1 .` 命令构建镜像,生成的镜像大小仅有 17MB。4....
创建Python Docker 镜像的完整指南
准备工作首先,确保安装Docker。若未安装,依操作系统指引安装。然后,在工作目录创建用于构建镜像的目录,并在其中开发Python应用文件。编写Python应用,如创建app.py文件,添加简单代码。接着,编写Dockerfile,指引Docker构建镜像。在工作目录创建编辑Dockerfile,指示构建过程。Dockerfile步骤包括:选择基础镜像...
docker构建的镜像的三种方式
构建Docker镜像有三种常见方式,每种都有其独特的优势和适用场景。首先,容器提交允许快速创建镜像,适合临时或实验性任务,但不推荐频繁使用,因为它缺乏变更追踪的透明度。其次,Dockerfile构建提供了更精确和可重复的镜像构建过程,通过编写Dockerfile,可以定义镜像构建的详细步骤,比如基于FastAPI的Hello World...
搭建Docker镜像仓库
搭建Docker镜像仓库的步骤如下:首先,如果你之前已经配置过阿里云Docker镜像,可以跳过这一步;如果没有,需要进行配置。配置的重点是使Docker信任你的私服,通常私服使用http协议,因此需要将你的IP地址添加到信任列表中。为了实现这个,你需要创建一个新的配置文件,将相关命令写入其中。接着,利用Docker...
如何使用Docker构建多平台镜像?
首先,理解多平台构建原理,Docker借助BuildKit在"docker-container"驱动的Buildx实例中,为每个目标平台(如amd64和arm64)启动独立容器进行构建,生成的镜像和Manifest List在Buildx实例中存储。准备工作必不可少,确保Linux内核版本>=4.8,执行命令行`docker run --privileged --rm tonistiigi/binfmt --...