docker的自我认识(3)
docker的自我认识(3)
本篇主要是自己对docker镜像的大体了解以及一些认识。
自己对docker的认识还只是初步阶段,并且在以后会不断加入新的内容,希望大家多多包涵!😁
一 .构建镜像的方式
如果你想获得一个镜像,主要可以通过两种方式获取:
- 如果你此时已经有了一个该镜像的容器,那么你可以使用
docker commit
命令将其变成一个镜像。但是这种方式并不是很好,因为你无法对镜像进行修改。 - 编写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联合的文件系统将镜像一层一层的叠加在一起。其分层架构如图所示:
正因为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仓库中