docker基本管理:下篇(镜像创建和数据管理)

Docker镜像

Docker镜像的分层

在这里插入图片描述
●Dockerfile中的每个指令都会创建一个新的镜像层

●镜像层将被缓存和复用

●当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效

●某一层的镜像缓存失效后,它之后的镜像缓存都会失效

●镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件

●自下而上制作分层:

  • From 后面是基础镜像
  • ADD run.sh 运行脚本
  • VOLUME /data :数据卷;使用宿主机的挂载目录
  • CMD[“./run.sh”]:命令执行脚本

Docker镜像的创建

Docker镜像
●应用发布的标准格式

●支撑一个Docker容器的运行

Docker镜像的创建方法
●基于已有的镜像创建

●基于本地的模板创建

●基于dockerfile创建(核心)

基于已有的镜像创建

将容器里面运行的程序及运行环境打包生成新的镜像

Docker commit [选项] 容器ID/名称 仓库名称:[标签]
  • -m 说明信息
  • -a 作者信息
  • -p 生成过程中停止容器的运行

举例:基于现有运行的centos7的容器创建镜像
1.先下载一个centos:7的镜像

[root@localhost ~]# docker pull centos:7

在这里插入图片描述
2.基于centos7的镜像创建一个容器,并启动容器

[root@localhost ~]# docker create -it centos:7 /bin/bash
[root@localhost ~]# docker start ddb3f8e0e5b5

在这里插入图片描述
3.基于现在已有的centos:7创建镜像

Docker commit -m “描述信息” -a “镜像作者” 容器ID号 镜像作者:镜像标签
[root@localhost ~]# docker commit -m "new" -a "daoke" ddb3f8e0e5b5 daoke:test

在这里插入图片描述

基于本地模板的创建

●通过导入操作系统模板文件生成新的镜像

●使用wget命令导入为本地镜像

Wget
http://download.openvz.org/template/precreated/debian-7.0-×86-minimal.tar.gz

●导入成功后可查看本地镜像信息

Docker images | grep new

举例:
1.这边模板直接用xhell放到/opt目录下,当然也可以在网站上下载
在这里插入图片描述
2.直接用cat 压缩包生成一个新的镜像叫daoke:new

[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new

在这里插入图片描述

基于Dockerfile创建

●Dockerfile是由一组指令组成的文件

●Dockerfile结构四部分

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

●Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释

●Dockerfile操作指令
在这里插入图片描述

举例:Dockerfile创建httpd镜像,并启动
1.在/opt目录下创建一个apache服务的目录

[root@localhost opt]# mkdir apache
[root@localhost opt]# cd apache/
[root@localhost apache]# vim Dockerfile   ##创建一个Dockerfile(必须是这个名字)
FROM centos:7      ##基于基础镜像centos:7
MAINTAINER THIS IS test    ##维护镜像的用户信息
RUN yum -y update      ##这两条是镜像操作指令安装apache软件
RUN yum -y install httpd
EXPOSE 80     ##开启80端口
ADD index.html /var/www/html/index.html   ##复制网站首页文件
ADD run.sh /run.sh         ##这两条是将执行脚本复制到镜像中
RUN chmod 755 /run.sh  
CMD ["/run.sh"]           ##启动容器时执行脚本

2.写入镜像服务启动脚本

[root@localhost apache]# vim run.sh     
#!/bin/bash 
rm -rf /run/httpd/*    ##原有容器中要是开启了服务就将文件删除
exec /usr/sbin/apachectl -D FOREGROUND

3.写入网站页面信息

[root@localhost apache]# vim index.html
<h1>this is test web</h1>

4.生成镜像

[root@localhost apache]# docker build -t httpd:centos .     ##注意:centos .中间有空格

5.查看生成过程
在这里插入图片描述
6.新镜像运行容器 8080:外部端口 80:内部服务端口

[root@localhost apache]# docker run -d -p 8080:80 httpd:centos     ##注意映射的外部端口不能是被占用的

7.打开客户端输入地址加映射的端口号访问服务
在这里插入图片描述

Docker的数据管理

数据管理操作
●方便查看容器内产生的数据

●多容器实现数据共享

两种管理方式
●数据卷:是实现容器和宿主机系统之间的数据共享

●数据卷容器:是容器和容器之间的数据共享

数据卷

●数据卷是一个提供容器使用的特殊目录
在这里插入图片描述

●创建数据卷

Docker run -d -v /data1-v /data2 --name web
http:centos

●挂载主机目录作为数据卷

Docker run -d -v /var/www:/data1 --name web-1
Httpd:centos

举例:宿主机目录/var/www 挂载容器中的/data1

[root@localhost apache]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash

在这里插入图片描述
在容器中的data1的目录下创建文件

[root@bb5913102e43 /]# cd data1/
[root@bb5913102e43 data1]# ls
[root@bb5913102e43 data1]# touch 123.txt     ##创建一个123.txt文件

再打开一个终端,查看宿主机的/var/www目录情况
在这里插入图片描述
这时在宿主机/var/www目录下创建一个文件夹查看同步情况

[root@localhost www]# touch abc.txt    ##创建文件
[root@localhost www]# ls
123.txt  abc.txt

在这里插入图片描述

数据卷容器

可以通过下图去理解
在这里插入图片描述

1.创建一个web100的容器,指定data1和data2两个站点

[root@localhost apache]# docker run --name web100 -v /data1 -v/data2 -it centos:7 /bin/bash

进入容器发现有data1和data2被挂载
在这里插入图片描述
2.建立关联:打开新终端创建一个新的容器为web10指向数据卷容器web100

[root@localhost www]# docker run -it --volumes-from web100 --name web10 centos:7 /bin/bash

发现web100容器的站点data1和data2被web10容器使用
在这里插入图片描述
3.在站点中创建文件

[root@a59069c6f0dc /]# cd data1    ##进入data1站点
[root@a59069c6f0dc data1]# touch 123    ##创建123文件
[root@a59069c6f0dc data1]# ls      
123
[root@a59069c6f0dc data1]# cd ../data2    ##进入data2站点
[root@a59069c6f0dc data2]# touch 456     ##创建456文件
[root@a59069c6f0dc data2]# ls
456

4.在web100中查看站点
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Cpureman/article/details/108702129