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

[root@centos ~]# cat Dockerfile
FROM centos
RUN yum install vim -y

[root@centos ~]# pwd

/root

[root@centos~]# docker build -t centos-vim-dockerfile .

[root@qwer1234 ~]# pwd
/root
[root@qwer123456 ~]# 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镜像。

猜你喜欢

转载自www.cnblogs.com/mclzy/p/9210493.html