为什么要自定义镜像,因为公共镜像很难满足日常开发需求,一般会作修改。
容器是暂时的,这是对它的定位,当我们对容器进行个性化修改的时候,后期删除容器,再启动一个容器,我们的个人化修改全部都没了。所以要将容器的个性化修改commit成镜像,即使容器删除,再使用镜像重新启动一个就可以了
Docker自定义镜像
- docker目前镜像的制作有2种方法:
- 1、Commit构建自定义镜像
- 启动并进入容器:docker run -it centos:7 /bin/bash
- 在/home 路径下创建fb文件夹:mkdir /home/fb
- 安装ifconfig命令:yum -y install net-tools
- 重启容器,查看容器的fb文件夹还在不在:docker restart [c_id]
- 删除容器,再重新启动一个容器进入查看有没有fb文件夹:docker rm [c_id]&& docker run -it centos:7 /bin/bash
- 构建镜像
- 启动容器:docker run -itd [c_id] /bin/bash
- 进入容器查看:docker exec -it [c_id] /bin/bash
- 2、Dockerfile构建镜像
docker目前镜像的制作有2种方法:
基于Docker Commit制作镜像
基于dockerfile制作镜像,Dockerfile方式为主流的制作镜像方式
1、Commit构建自定义镜像
简介:对容器的修改以及保存
启动并进入容器:docker run -it centos:7 /bin/bash
在/home 路径下创建fb文件夹:mkdir /home/fb
安装ifconfig命令:yum -y install net-tools
重启容器,查看容器的fb文件夹还在不在:docker restart [c_id]
fb文件还在
删除容器,再重新启动一个容器进入查看有没有fb文件夹:docker rm [c_id]&& docker run -it centos:7 /bin/bash
fb文件不在
构建镜像
docker commit [c_id] mycentos:tag
docker commit -a "fb" -m "mkdir /home/fb" [c_id] mycentos:tag
-a:标注作者
-m:说明注释
查看详细信息:docker inspect [c_id]
启动容器:docker run -itd [c_id] /bin/bash
进入容器查看:docker exec -it [c_id] /bin/bash
含有 fb文件
2、Dockerfile构建镜像
Dockerfile构建镜像
Dockerfile
# this is a dockerfile
FROM centos:7
MAINTAINER XD 163@163.com
RUN echo "正在构建镜像!!!"
WORKDIR /home/fb
COPY 123.txt /home/fb
RUN yum install -y net-tools
构建:docker build -t mycentos:v2 .
查看:docker images
进入验证:验证成功
Docker镜像分层结构剖析
共享资源
对容器的任何改动都是发生容器层
容器层是可写可读,而镜像层只读
Dockerfile基础指令
简介:一些常用的Dockerfile指令
FROM
基于哪个镜像
MAINTAINER
注明作者
COPY
复制文件进入镜像(只能用相对路径,不能用绝对路径)
ADD
复制文件进入镜像(假如文件是.tar.gz文件会解压)
ADD
复制文件进入镜像(假如文件是.tar.gz文件会解压)
ENV
设置环境变量
EXPOSE
暴露容器端口
RUN
在构建镜像的时候执行,作用于镜像层面
ENTRYPOINT
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
CMD
在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条
容器启动后执行默认的命令或者参数,允许被修改
命令格式:
shell命令格式:RUN yum install -y net-tools
exec命令格式:RUN [ “yum”,“install” ,"-y" ,“net-tools”]