docker容器镜像

容器与镜像之间的关系:
docker client 向docker daemon发起创建容器的请求
docker daemon查找有无客户端需要的镜像
如无,则到容器的镜像仓库中下载需要的镜像
拿到容器镜像后,启动容器

一、容器的介绍

Docker 镜像就是一组只读的目录,或者叫只读的 Docker 容器模板,镜像中含有一个Docker 容器运行所需要的文件
系统,所以我们说Docker 镜像是启动一个Docker 容器的基础。
可以将Docker 镜像看成是Docker 容器的静态时,也可将Docker 容器看成是Docker镜像的运行时。
从Docker 的官方文档来看,Docker 容器的定义和 Docker 镜像的定义几乎是相同,Docker 容器和Docker 镜像的区
别主要在于docker 容器多出了一个可写层。
容器中的进程就运行在这个可写层,这个可写层有两个状态,即运行态和退出态。当我们 docker run 运行容器后,
docker 容器就进入了运行态,当我们停止正在运行中的容器时, docker 容器就进入了退出态。
我们将容器从运行态转为退出态时,期间发生的变更都会写入到容器的文件系统中 ( 需要注意的是,此处不是写入到
docker 镜像中 )
 
联合文件系统( UnionFS )是一种轻量级的高性能 分层 文件系统,它支持将文件系统中的修改信息作为一次提交,并
层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的是挂载的最终结果。
联合文件系统是实现 Docker 镜像的技术基础。 Docker 镜像可以通过分层来进行继承。例如,用户基于基础镜像(用
来生成其他镜像的基础,往往没有父镜像)来制作各种不同的应用镜像。这些镜像共享同一个基础镜像层,提高了存
储效率。此外,当用户改变了一个 Docker 镜像(比如升级程序到新的版本),则会创建一个新的层( layer )。因
此,用户不用替换整个原镜像或者重新建立,只需要添加新层即可。用户分发镜像的时候,
也只需要分发被改动的新 层内容(增量部分)。这让 Docker 的镜像管理变得十分轻量级和快速。
 
 

二、制作基础镜像

1.打包操作系统的根目录

排除/proc/sys
tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos8.tar /
ls
du -sh *
 

2.把获取的根打包文件导入Docker Host

docker import centos8.tar centos8:latest
docker images

3.使用基础镜像启动容器

docker run -it --name=b1 centos8:latest /bin/bash
ls /proc
ip a s

 

三、应用镜像制作

1.使用commit提交镜像

在基础镜像运行的容器中安装应用,此例使用httpd

yum instatll -y httpd

使用commit命令对正在运行的容器提交为一个应用镜像  
docker commit --help

docker commit b1 centos8-http:v1

docker images

​
docker run -it --name=b2 centos8-http:v1 /bin/bash
echo "dp" >> /var/www/html/index.html
httpd -k start
curl http://localhost

2.使用Dockerfile创建应用镜像

Dockerfile关键字
FROM(指定基础image)
MAINTAINER(用来指定镜像创建者信息)
RUN (运行命令)
CMD(设置container启动时执行的操作)
ENTRYPOINT(设置container启动时执行的操作)
USER(设置container容器的用户)
EXPOSE(指定容器需要映射到宿主机器的端口)
ENV(用于设置环境变量)
ADD(从src复制文件到container的dest路径)
VOLUME(指定挂载点)
WORKDIR(切换目录)
 
 
Dockerfile应用案例一   httpd
目的:通过Dockerfile创建一个可以在启动容器时就直接启动httpd应用的镜像
步骤:
a.创建一个目录,用于存储Dockerfifile所使用的文件
b.在此目录中创建Dockerfile文件及制作镜像所使用到的文件
c.在此此目录中使用docker build创建镜像(读取Dockerfifile文件)
d.使用创建的镜像启动容器
 
1.创建目录
mkdir dockerfifile_test
cd dockerfifile_test

2.创建用于启动httpd的脚本文件run-httpd.sh,内容如下

#!/bin/bash
rm -rf /run/httpd/*
exec /sbin/httpd -D FOREGROUND

3.创建用于测试httpd是否可用的index.html

4.创建Dockerfile
 
FROM centos:latest
MAINTAINER "DP"
RUN yum clean all
RUN yum -y install httpd
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh
ADD index.html /var/www/html/
EXPOSE 80
WORKDIR /
CMD ["/bin/bash","run-httpd.sh"]

条件准备完毕

5.使用docker build创建镜像,注意命令最后有一个点,点表示当前目录
docker build -t centos-base-httpd:v1 .

6.查看镜像

7.使用上述创建的应用容器启动容器
docker run -d centos-base-httpd:v1
 
8.验证
docker inspect d5ffd52b4843
 
docker exec d5ffd52b4843 curl http://172.17.0.2

 

Dockerfile应用案例二   nginx
 
案例:把nginx应用容器化
要求:
a、通过基础镜像做nginx应用镜像
b、使用nginx应用镜像启动容器时,nginx要求启动
c、验证nginx服务是否启动
步骤:
a、使用哪一个基础 centos:latest
b、需要使用epel YUM
c、安装nginx
d、修改nginx配置文件,主要用于关闭daemon后台运行
e、验证使用的测试页面
 
1.创建目录
mkdir dockerfile_test2
cd dockerfile_test2
2.创建测试文件
echo 'nginx s running!!!' >> index.html
ls
3.创建Dockerfile 文件,内容如下
FROM centos:latest
MAINTAINER "DP"
RUN yum clean all && yum -y install epel-release
RUN yum -y install nginx
ADD index.html /usr/share/nginx/html/
RUN echo "daemon off;" >> /etc/nginx/nginx.conf #取消nginx以daemon身份运行
EXPOSE 80
CMD /usr/sbin/nginx
准备好以后是如下图

4.使用docker build创建nginx应用镜像
 docker build -t centos-nginx:v1 .

5.启动容器验证nginx服务是否自动开启
 
docker images
docker run -d centos-nginx:v1
docker ps
docker inspect c6b30a777319
curl http://172.17.0.2

 
验证完成
 
 
 
 
 
 
 
 
 
 
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东鹏特饮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值