> For the complete documentation index, see [llms.txt](https://moluo.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://moluo.gitbook.io/notes/bian-cheng-xue-xi/bu-shu-yun-wei-xu-ni-hua/docker/3.5-gou-jian-zi-ji-de-jing-xiang.md).

# 3.5构建自己的镜像

在本节中，我们基于一个centos base image制作一个安装有vim的镜像。

镜像制作支持两种方式：

* 基于容器构建镜像
* 基于Dockerfile构建镜像（推荐）

## 前提条件

主机已具有centos镜像，如主机不满足条件，可使用如下命令拉取镜像

```bash
[root@master hello-world]# docker pull centos 
Using default tag: latest
latest: Pulling from library/centos
d8d02d457314: Pull complete 
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:latest
[root@master hello-world]# docker images 
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos                 latest              67fa590cfc1c        6 days ago          202MB
```

## 基于容器构建镜像

1.以交互的方式运行一个centos容器

```bash
[root@master hello-world]# docker run -it centos
```

2.在centos容器中安装vim，验证vim功能，并退出容器

```bash
[root@6de30d9433e2 /]# yum install -y vim 
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.cn99.com
 * extras: mirrors.163.com
 * updates: mirrors.163.com
 ...

[root@6de30d9433e2 /]# vim
[root@6de30d9433e2 /]# exit
exit
```

3.构建镜像并查看生成的镜像

```bash
[root@master hello-world]# docker container ls -a 
CONTAINER ID     IMAGE      COMMAND       CREATED             STATUS                       PORTS                                               NAMES
6de30d9433e2     centos     "/bin/bash"   4 minutes ago       Exited (0) 24 seconds ago                                                        clever_curie

[root@master hello-world]# docker commit 6de30d9433e2 moluo/centos-vim 
sha256:aa853df964e0c73cf3ae1b9828044e37441f960affd8ef93fe68125c1f7618c2

[root@master hello-world]# docker images 
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
moluo/centos-vim       latest              aa853df964e0        8 seconds ago       369MB
```

> 扩展：产看镜像层次可以使用：docker history \[OPTIONS] IMAGE
>
> ```bash
> [root@master docker-centos-vim]#  docker history moluo/centos-vim
> IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
> 92f66f7b9d52        3 minutes ago       /bin/sh -c yum install -y vim                   167MB               
> 67fa590cfc1c        6 days ago          /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
> <missing>           6 days ago          /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
> <missing>           6 days ago          /bin/sh -c #(nop) ADD file:4e7247c06de9ad117…   202MB
> ```

## 基于Dockerfile构建镜像

1.新建工作目录并打开

```bash
[root@master vagrant]# mkdir docker-centos-vim
[root@master vagrant]# cd docker-centos-vim

vim Dockerfile
```

2.新建Dockerfile文件

```bash
[root@master docker-centos-vim]# vi Dockerfile
```

Dockerfile文件内容如下：

```
FROM centos
RUN yum install -y vim
```

3.构建镜像并查看生成的镜像

```bash
[root@master docker-centos-vim]# docker build -t moluo/centos-vim .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos
 ---> 67fa590cfc1c
Step 2/2 : RUN yum install -y vim
 ---> Running in 466315518e1a
...

[root@master docker-centos-vim]# docker images 
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
moluo/centos-vim       latest              92f66f7b9d52        14 seconds ago      369MB
```
