docker的自我认识(3)

本篇主要是自己对docker镜像的大体了解以及一些认识。

自己对docker的认识还只是初步阶段,并且在以后会不断加入新的内容,希望大家多多包涵!😁

一 .构建镜像的方式

如果你想获得一个镜像,主要可以通过两种方式获取:

  1. 如果你此时已经有了一个该镜像的容器,那么你可以使用docker commit命令将其变成一个镜像。但是这种方式并不是很好,因为你无法对镜像进行修改。
  2. 编写DockerFile文件,然后利用docker build进行镜像的构建。这种方式可以自己编写镜像文件,非常适合修改与扩充,因此推荐使用此方式。

但是DockerFile又是什么呢?又该怎么编写呢?下面主要对DockerFile进行介绍:


DockerFile简介

Dockerfile是自动构建Docker镜像的配置文件。也是Docker区别于其他容器的重要特征,正是有了Dockerfile,Docker的自动化和可移植性才成为可能。

不论是开发还是运维,学会编写Dockerfile几乎是必备的,这有助于你理解整个容器的运行。

DockerFile命令

其命令主要包含以下多个:

FROM——从一个基础镜像构建新的镜像,必须写在第一行

```
FROM ubuntu
```

MAINTAINER——该镜像维护者的信息

```
MAINTAINER xw xwnjnu@gmail.com
```

ENV——设置环境变量

```
ENV MYSQL_ROOT_PASSWD 123
```

RUN——非交互式运行shell命令

```
RUN apt-get -y update
RUN apt-get -y install nginx
```

ADD——将外部文件拷贝到镜像里

```
ADD /usr/local/test.txt /data/project
```

WORKDIR——设置镜像中的工作目录

```
WORKDIR /var/www
```

USER——设置用户id

```
USER xw
```

VOLUME——设置数据卷,即挂载点

```
VOLUME [‘/data’]
```

EXPOSE——暴露哪些端口

```
EXPOSE 80 8088
```

ENTRYPOINT [‘executable’,’param1’,’param2’]——执行命令

```
ENTRYPOINT [“/usr/sbin/nginx”]
```
CMD[‘param1’,’param2’]——docker创建,启动container时执行的命令,如果设置了ENTRYPOINT,则CMD将作为参数

```
CMD [“start”]
```

二.镜像的特性

Docker镜像之间不是相互孤立的,而是通过AUFS联合的文件系统将镜像一层一层的叠加在一起。其分层架构如图所示:

2

正因为docker这种文件层叠共享机制,才造就镜像占用磁盘空间小,扩展容易,传播灵活等特点。

通过docker run命令指定镜像创建一个容器时,实际上是在该镜像上创建一个空的可读写的文件系统层级。父镜像的内容是以只读方式挂载进来的。当需要修改父镜像文件,变会触发docker从父镜像中复制这个文件到临时镜像中来,所有的修改均发生在你的文件系统中,而不会对父镜像造成任何影响,这就是docker镜像的写时复制机制。

三.镜像常用的命令

镜像操作

  • docker images # 显示本地所有的镜像列表
  • docker import # 从一个tar包创建一个镜像,往往和export结合使用
  • docker build # 使用Dockerfile创建镜像(推荐)
  • docker commit # 从容器创建镜像
  • docker rmi # 删除一个镜像
  • docker load # 从一个tar包创建一个镜像,和save配合使用
  • docker save # 将一个镜像保存为一个tar包,带layers和tag信息
  • docker history # 显示生成一个镜像的历史命令
  • docker tag # 为镜像起一个别名

镜像仓库(registry)操作

  • docker login # 登录到一个registry
  • docker search # 从registry仓库搜索镜像
  • docker pull # 从仓库下载镜像到本地
  • docker push # 将一个镜像push到registry仓库中

Comments

2016-06-29