文章目录
一、Docker镜像的分层
二、Docker镜像的创建
2.1 Docker镜像
- 应用发布的标准格式
- 支撑一个Docker容器的运行
2.2 Docker镜像的创建方法
- 基于已有镜像创建
- 基于本地模板创建
- 基于Dockerfile创建
2.2.1 基于已有镜像创建
//创建容器
docker create- it centos:7 /bin/bash
docker commit -m "new" -a "daoke" c83aee844ae0 daoke:test
docker images丨grep daoke
'-m:说明信息,-a:作者信息,-p:生成过程中停止容器运行'
2.2.2 基于本地模板创建
wget http://downIoad.openvz.org/template/precreated/debian-7.0-x86-minimaI.tar.gz
cat debian-7.O-x86-minimaI.tar.gz丨docker import - daoke:new
docker images丨grep new
2.2.3 基于Dockerfile创建
■ Dockerfile是有一组指令组成的文件
■ Dockerfile结构四部分
- 基础镜像信息
- 维护者信息
- 镜像操作指令
- 容器启动时执行指令
■ Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释
Dockerfile操作指令
指令 | 含义 |
---|---|
FROM 镜像 | 指定新镜像所基于的镜像,第一条指令必须位FROM指令,每创建一个镜像就需要一条FROM指令 |
MAINTAINER 名字 | 说明维护人信息 |
RUN命令 | 在所基于的镜像上执行命令,并提交新的镜像中。在容器中执行的命令 |
CMD[运行的程序,参数1,参数2] | 指定启动容器时才会执行的指令,如果指定多条只会执行最后一条 |
EXPOSE | 容器对外暴露的端口,并不是映射端口 |
ENV 环境变量 变量值 | 设定环境变量,会被后面RUN使用 |
ADD 源文件/目录 目标文件/目录 | 将源文件复制到目标文件,源文件要与dockerfile位于相同目录中或一个URL,将宿主机文件放入容器中 |
COPY 源文件/目录 目标文件/目录 | 容器内部的文件复制 |
VOLUME [目录] | 数据卷容器,宿主机共享目录出来能够给容器使用,在容器中创建挂载点 |
USER 用户名/UID | 指定容器运行时的用户 |
WORKDIR 路径 | 为后续RUN、CMD、ENTRYPOINT指定工作目录,相当于容器内的cd |
ONBUILD | 指定生成的镜像作为一个基础镜像时所需要运行时的命令 |
HEATHCECK | 健康检查 |
实验:
mkdir apache
cd apache
vim Dockerfile
#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER The porject <cloud-ops@centos.org/
#镜像操作指令安装apache软件
RUN yum -y update
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]
'接下来在apache文件夹中创建放入的两个文件'
vim run.sh
#!/bin/bash
rm -rf /run/httpd/* ##如果有apche清空然后执行
exec /usr/sbin/apachectl -D FOREGROUND ##强制执行启动apache
echo "web test" > index.html
或者
vi index.html
<h1>test</h1>#测试页面
//生成镜像
docker build -t httpd:centos .(注意别忘了末尾有".")
报错:
[root@localhost apache]# docker build -t httpd:centos .
Sending build context to Docker daemon 4.096kB
Step 1/9 : FROM centos:7
---> 92786e8f2cad
Step 2/9 : MAINTAINER The porject <cloud-ops@centos.org/
---> Using cache
---> 0059b401a0b6
Step 3/9 : RUN yum -y update
---> Running in e4ca200a2334
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
^C
解决方法:
[root@localhost apache]# yum clean all
已加载插件:fastestmirror, langpacks
正在清理软件源: base docker-ce-stable extras updates
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
[root@localhost apache]# rm -rf /var/cache/yum
'###然后删除多余的容器和镜像,就可以了'
重新执行:docker build -t httpd:centos .(注意别忘了末尾有".")
新镜像运行容器
docker run -d -p 1216:80 httpd:centos
测试:
真机输入20.0.0.21:1216,显示如下,即成功