欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker镜像

程序员文章站 2022-03-30 09:36:57
...

Docker镜像
1、镜像的分层结构
(1)共享宿主机的kernel
base镜像提供的是最小的linux发行版。
同一个docker主机支持运行多种linux发行版。
采用分层结构的好处是镜像之间可以共享资源。

docker pull  nginx:1.16
docker history nginx:1.16
docker history nginx:latest 	#第二个镜像下载速度快,和第一个有

很多相同资源共享。

docker rmi nginx:1.16			#删除只删除不同的部分。

(2)copy-on-write可写容器层
容器层以下所有镜像层都是只读。只有container为读写功能。修改数据时会将修改的数据写到容器层。
docker从上往下依次查找文件。
容器层保存镜像变化部分,并不会对镜像本身进行修改。
经镜像层数尽量减少(最多127层)

2、镜像的构建
(1)docker commit三部曲:
运行容器。
修改容器。
将容器保存为新的镜像。
效率低,可重复性弱,容易出错。且安全性低。

docker load -i 			#导入已经下载好的镜像
docker ps				#显示运行镜像
docker ps -a    		#显示所有镜像

Docker镜像

docker history busybox:latest
docker run -it busybox				#运行
docker attach +id					#重新链接进入
ctrl+p+q							#退出不退容器
docker commit +id +名称:v1(版本,原始上追加一层)
docker commit 0c63432ee56e busybox:v1
docker history busybox:v1			#查看
docker run -it --rm busybox:v1		#通过v1镜像进入容器

Docker镜像
(2)文件的形式添加层:dockerfile

docker rm -f 3d1c37601346	#删除正在工作进程
docker rmi busybox:v1		#清除v1层

Docker镜像

docker build -t demo:v1 .
docker images			#查看都有哪几层
docker history demo:v1		#查看每一层具体内容
docker run -it --rm demo:v1	#运行完后立即删除

docker build -t demo:v2 .	#改变了就在v1上面加了一层
docker run -it demo:v2

3、dockerfile命令详解:
(1)FROM:
指定base镜像,如果本地不存在会从远程仓库下。
(2)MAINTAINER
设置镜像的作者或者邮箱。
(3)COPY
把文件从build context复制到镜像中。
支持两种格式:

COPY src dest 和COPY ["src","dest"]

并且src必须在build context所在的文件目录中。
(4)ADD
与COPY类似,不同的是可以归档压缩文件,会自动拷贝到镜像中

ADD redis-5.0.3.tar.gz /
docker build -t demo:v1 .
docker run -it --rm demo:v1 
ls						#查看自动解压在根目录下。

(5)ENV
设置环境变量,可以被后续的指令使用。

ENV hostname server1

(6)EXPOSE
暴露运行服务端端口
(7)VOLUME
申明数据卷,指定数据挂载点。

VOLUME ["/data"]
docker build -t demo:v2 .
docker history demo:v2 
docker run -it demo:v2
cd data/
touch file1
docker inspect 5170eaa9831b
cd /var/lib/docker/volumes/466af2dc6f90075d4b7827d56b0e3f6c14888c37108428d6d00f6d69af8a4346/_data

容器内删除后宿主机也不存在。

docker volume prane	#删掉未挂载的无用卷。

(8)WORKDIR
指定设置镜像中的当前工作目录,不存在会自动创建。

WORKDIR /nginx

workdir创建命令并且进入后直接在定义的目录。
(9)RUN
在容器内运行命令并创建新的镜像层,常用于安装软件包。
(10)CMD和不可以
设置容器启动后执行的命令,CMD可以覆盖,ENTRYPOINT
Docker镜像

Docker镜像

FROM busybox
ENV hostname server1
WORKDIR /nginx
ADD redis-5.0.3.tar.gz /
VOLUME ["/data"]
RUN touch file1
CMD echo helloworld



相关标签: 运维实战 运维