docker镜像介绍
一、镜像的分层结构
1、共享宿主机的kernel
2、base镜像提供的是最小的Linux发行版
3、同一docker主机支持运行多种Linux发行版
4、采用分层结构的最大好处是:共享资源
5、Copy-on-Write 容器层可写
6、容器层以下所有镜像层都是只读的
7、docker从上往下依次查找文件
8、容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
9、一个镜像最多127层
二、镜像的构建
1、docker commit 构建
用docker commit 构建镜像分为三步:
(1)运行容器
(2)修改容器
(3)将容器保存为新的镜像
-it
:交互方式,Ctrl+D
:退出容器,Ctrl+p+q
:退出时让容器在后台运行
docker load -i busybox.tar ##导入镜像
docker run -it --name test busybox:latest ##以交互方式运行容器
echo helloworld > testfile ##在容器中执行命令
docker commit test test:v1 ##容器保存为新的镜像
docker images ##查看镜像
2、Dockerfile 构建
(1)创建一个Dockerfile
mkdir docker
vim docker/Dockerfile
FROM busybox
RUN echo westos > testfile
(2)构建镜像
docker build -t test:v2 /root/docker/
docker images
3、查看镜像的分层结构
- 镜像都为三层结构,用
docker commit
创建的镜像容器层不会显示具体的操作命令,用Dockerfile
创建的镜像容器会显示具体的操作命令 - 删除镜像实质是删除了容器层,再次创建只是添加了容器层
docker history test:v2
docker history test:v2
docker rmi test:v2
docker history busybox:latest
三、Dockerfile详解
1、Dockerfile常用指令
- FROM
指定base镜像,如果本地不存在会从远程仓库下载 - MAINTAINER
设置镜像的作者,比如用户邮箱等 - COPY
把文件从建立Dockerfile
的目录复制到镜像
支持两种形式:COPY src dest
和COPY ["src", "dest"]
src
必须指定建立Dockerfile
的目录中的文件或目录
echo hello linux > index.html
vim Dockerfile
FROM busybox
RUN echo westos > testfile ##RUN后面可以跟shell语句
RUN echo hello word > testfile1
COPY index.html / ##COPY复制当前目录的index.html到容器的根目录下
docker build -t test:v3 /root/docker/ ##构建容器
docker run -it --name test test:v3 ##运行容器
- ADD
用法与COPY类似,不同的是src
可以是归档压缩文件,文件会被自动解压到dest
,也可以自动下载URL并拷贝到镜像:
ADD html.tar /var/www
ADD http://ip/html.tar /var/www
vim Dockerfile
FROM busybox
RUN echo westos > testfile
RUN echo hello word > testfile1
COPY index.html /
ADD nginx-1.20.1.tar.gz /
docker build -