docker学习-构建镜像

对于docker用户来说,最好的情况是不需要自己创建镜像,几乎所有的常用的数据库、中间件、应用软件等都有现成的docker官方镜像或其他人和组织创建的镜像,我们只需要稍微配置就可以直接使用。
但是在某些情况下,也需要自己构建镜像。
比如:
1、找不到现成的镜像,比如自己开发应用程序
2、需要在镜像中加入特定的功能。
docker提供了两种构建镜像的方法:docker commit命令和Dockerfile构建文件。

docker commit

docker commit命令式创建镜像最直观的方法,其过程包含3个步骤
1、运行容器
2、修改容器
3、将容器保存为新的镜像
比如: 在Ubuntu base镜像中安装vi并保存为新镜像
(1)运行容器

-it 参数的作用式以交互的模式进入容器,并打开终端。
2b1763cc8299就是容器内部的ID
(2)安装vim
确认vim没有安装

安装vim,如下所示:

(3)保存为新镜像
在新窗口中查看当前运行的容器

distracter_chaum是Docker为我们的容器随机分配的名字
执行docker commit命令将容器保存为镜像

新镜像命名为ubuntu-with-vim
查看新镜像的属性,如下所示:

可以看到新镜像因为安装了vim软件而变大了
从新镜像启动容器,验证vim已经可以使用

虽然我们可以使用docker commit创建新镜像,但是docker不建议用户使用这种方式构建镜像。原因如下:
1、该方式是手工创建镜像的方式了,容易出错,效率低可重复性弱
2、无法对镜像进行审计,存在安全隐患

Dockerfile

Dockerfile是一个文本文件,记录了镜像构建的所有步骤

第一个Dockerfile

新建一个文本文件Dockerfile,内容如下:

以下为运行docker build命令构建镜像并详细分析细节

[[email protected] ~]# docker build -t ubuntu-with-vim-dockerfile .    (1)
Sending build context to Docker daemon  13.31kB                        (2)
Step 1/2 : FROM ubuntu                                                                  (3)
 ---> a2a15febcdf3
Step 2/2 : RUN apt-get update && apt-get install -y vim                   (4)
 ---> Running in ad7fa94cfb94                                                           (5)
Successfully built ad7fa94cfb94                                                         (6)
Successfully tagged ubuntu-with-vim-dockerfile:latest                              (7)

说明:
1、运行docker build命令,-t将新镜像命名为ubuntu-with-vim-dockerfile 命令末尾的.指明build context为当前目录。Docker默认会从build context中查找Dockerfile文件,
也可以通过-f参数指定Dockerfile文件的位置
2、镜像构造过程。首先Docker将build context中的文件发送给Docker daemon,bulid context为镜像构建提供所需要的文件或目标。Dockerfile中的ADD,COPY命令可以将build context中的文件添加到镜像,此例中,bulid context为当前目录.root,该目录下的所有文件和子目录都会被发送给Docker daemon。注意不要将多余文件放到bulid context,特别不要把/,/usr作为bulid context,否则构建过程中会相当的缓慢甚至失败
3、Step1,执行FROM,将Ubuntu作为base镜像,镜像ID为a2a15febcdf3
4、Step2,执行RUN,安装vim
5、启动临时容器,在容器中通过apt-get安装vim
6、安装完成后,将容器保存为镜像,其ID为ad7fa94cfb94
该步骤底层使用类似docker commit的命令
7、镜像构建成功

通过docker images查看镜像信息

原文地址:https://blog.51cto.com/11555417/2436919

时间: 2024-08-29 17:58:21

docker学习-构建镜像的相关文章

Docker学习笔记——镜像、容器、仓库

Docker三个基本概念 镜像(image) 容器(container) 仓库(Repository) 镜像(image) 搜索镜像 docker search nginx 获取镜像 docker pull nginx 指定Registry地址和具体的仓库名下载镜像,没有指定Registry地址,默认从Docker Hub上下载 docker pull jwilder/nginx-proxy 查看镜像 docker images  REPOSITORY          TAG         

docker commit构建镜像(不推荐)

dcoker commit镜像构建 获取docker镜像 # 下载镜像(默认从docker hub获取) docker pull ubuntu:14.04 搜索镜像 docker search IMAGE_NAME 返回如下信息: NAME : 仓库名(用户名/仓库名) DESCRIPTION : 镜像信息描述 STARS : 反应镜像的受欢迎程度 OFFICIAL : 是否为官方镜像 AUTOMATED : 镜像是否为docker hub自动构建 到docker hub注册账号并使用login

Docker学习04_镜像管理

运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 可以在浏览器中访问 https://hub.docker.com/search?q=&type=image 来搜索和查看官方镜像仓库. 使用 docker images 列出本地镜像: 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如果不指定一个镜像的版本标签,docker 将默认使用 最新版本即”仓库源名称:latest” 镜像. 执行

Docker 学习之镜像导入导出及推送阿里云服务器(三)

在前面两节里主要就是记录一些docker的基本的操作,包括搜索镜像,拉取镜像,根据镜像创建容器等等,在这一节主要就是记录Docker对于镜像文件的导入导出,及推送到阿里云再从阿里云获取镜像. 一.镜像文件导入导出 1.1 查看当前已有的镜像文件 docker images 1.2 随意运行一个容器 docker run -d -p 8080:8080 --name tomcat tomcat 1.3 通过容器来的到一个新的镜像 # 根据正在运行的容器创建一个新的镜像docker commit t

Docker学习之镜像

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像. 获取镜像 # docker pull ubuntu:16.04 运行 # docker run -it ubuntu:16.04 bash -i 交互式操作 -t 建立终端 bash 进入交互式shell [email protected]:/# id uid=0(root) gid=0(root) groups=0(root) [email protected]:/# cat /etc

docker学习-构建本地Registry

保存和分发镜像的最直接的方法就是使用Docker H u b,它是Docker公司维护的公共Regsitry,用户可以将自己的镜像保存到Docker H u b 免费的repository中.如果不希望别人访问自己的镜像,也可以购买私有repository.一般我们可以使用Docker H u b上传和下载镜像,虽然十分方便,但是还是有些限制,比如:1.需要外网连接,而且上传和下载速度慢2.上传到Docker H u b 的镜像任何人都能够访问,虽然可以用私人repositroy,但不是免费的3

Docker学习之镜像操作

使用Docker镜像 以下都是Docker镜像的一系列重要名操作,包括获取.查看.搜索.删除.创建.存出或载入.上传等.可使用docker image help命令查看帮助. 1.获取镜像(pull) 使用pull子命令下载镜像 格式为: docker [image] pull NAME[:TAG],其中,NAME是镜像仓库名称,用以区分镜像, TAG是镜像的标签,往往用来表示版本信息,如果不显示指定TAG,则默认为latest标签,这会下载仓库中最新版本的镜像. 例如获取一个centos系统的

DOCKER学习_011:使用Dockerfile制作docker镜像

前面使用commit的方式,制作一个docker镜像,本次介绍使用Dockerfile制作一个dockers镜像 [[email protected] ~]# mkdir /openssh [[email protected] ~]# cd /openssh [[email protected] openssh]# cp /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key . [[

[转]Docker中的镜像

引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的Manjaro. Docker镜像的概念 总的来说,Docker镜像是由文件系统叠加而成的. bootfs 最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导文件系统有什么交互.实际上,当一个容器启动后,它将会被移到内存中,而引