Docker-构建镜像
Posted mclzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-构建镜像相关的知识,希望对你有一定的参考价值。
一:构建镜像
对于Docker用户来说,最好的情况是不需要自己创建镜像。几乎所有常用的中间件,应用软件,数据库都有现成的Docker官方镜像或其他人和组织创建的镜像,我们只需稍作配置就可以直接使用。
当然,某些情况下我们也不得不自己构建镜像,例如:
(1)找不到现成的镜像,比如自己开发的应用程序
(2)需要在镜像中加入特定的功能,比如官方镜像几乎都不提供ssh
Docker提供了两种构建镜像的方法:docker commit 命令与Dockerfile构建文件。
1.docker commit
docker commit命令是创建新镜像最直观的方法,其过程包含三个步骤:
● 运行容器。
● 修改容器。
● 将容器保存为新的镜像。
语法 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] OPTIONS说明: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。
ps:
将容器qwer1234 保存为新的镜像,并添加提交人信息和说明信息。
docker commit -a "machao" -m "machao images" qwer1234 nginx:v1.12
二.Dockerfile
用通俗一点的话来讲:dockerfile就是根据自己的需要自定义一个镜像,就像你写shell脚本一样,把一连串的过程或步骤全部写进dockerfile文件中,一步一步的执行dockerfile文件中你写的内容。
Dockerfile是一个文本文件,记录了镜像构建的所有步骤
ps:Dockerfile指令
2.1.Build命令 用法 : 构建 选项 Usage:docker build [OPTIONS] PATH | URL | - OPTIONS: -t ,--tag list??#构建后的镜像名称 把新镜像命名为 -f, --file string?#指定Dockerfiile文件位置 示例: 1,docker build . 2,docker build -t nginx:v10 . 3,docker build -t nginx:v10 -f /path/Dockerfile /path 一般常用第2种方式构建,我们在构建时都会切换到Dockerfile文件的目录下进行构建,所以不需要指定-f参数。
ps.第一个Dockerfile
[[email protected] ~]# cat Dockerfile
FROM centos
RUN yum install vim -y
[[email protected] ~]# pwd
/root
[[email protected]~]# docker build -t centos-vim-dockerfile .
[[email protected] ~]# pwd /root [[email protected] ~]# docker build -t ubuntu-dockerfile . Sending build context to Docker daemon 2.048 kB Step 1/2 : FROM ubuntu ---> 113a43faa138 Step 2/2 : RUN apt-get update && apt-get install -y vim ---> Running in 6b519717e62d ………… Setting up vim (2:8.0.1453-1ubuntu1) ... ---> ff7bda2385c1 Removing intermediate container 6b519717e62d Successfully built ff7bda2385c1
1.当前目录为root
2.Dockerfile准备就绪
3.运行docker build 命令,-t 将新镜像命名为 centos-vim-dockerfile,命令末尾的 . 指明build context(构建环境)为当前目录。Docker默认会从build context中查找Dockerfile文件,我们也可以通过 -f 参数指定Dokerfile文件位置
4.从这步开始就是镜像真正的构建过程。首先Docker将build context中所有文件发送给Docker daemon。build context为镜像构建提供所需要的文件或目录
Dockerfile 中的ADD,COPY等命令可以将build context中的文件添加到镜像。此例中,build context 为当前目录/root,该目录下的所有文件和子目录都会被发送给Docker daemon。
所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把/ ,/usr作为build context,否则构建过程会相当缓慢甚至失败。
5.step 1:执行FROM,将ubuntu 作为base镜像。
以上是关于Docker-构建镜像的主要内容,如果未能解决你的问题,请参考以下文章
构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式
Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段