目录
Dockerfile 是一个用来构建 Docker 镜像的文本文件
Dockerfile是由一组指令组成的文件
Dockerfile结构大致组成为基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
指令详解
|----------------------------------------|----------------------------------------------------------------------|
| Dockerfil e 指令 | 说明 |
| FROM | 指定基础镜像 |
| MAINTAINER | 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令) |
| LABEL | 添加镜像的元数据,如:版本、作者、邮箱等信息 |
| RUN | 构建镜像时运行的命令。 |
| ADD | 添加文件或目录到镜像中,可以是本地文件,也可以是 url。如果添加.gz 格式压缩包,会自动解压。 |
| ENTRYPOINT | 设置容器创建时的主要命令。(不可被覆盖) |
| EXPOSE | 指定容器运行后的监听端口,协议默认TCP。 |
| ENV | 在容器内部设置环境变量。 |
| CMD | 启动容器时执行的 Shell 命令。在 Dockerfile 中只能有一条 CMD 指令。 如果设置了多条 CMD,只有最后一条会生效。 |
| COPY | 将文件或目录复制到镜像中。 |
| VOLUME | 为容器创建挂载点或声明卷。 |
| WORKDIR | 设置后续指令的工作目录。 |
| USER | 指定后续指令的用户上下文。 |
| ARG | 定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。 |
| ONBUILD | 当该镜像被用作另一个构建过程的基础时,添加触发器。 |
| STOPSIGNAL | 设置发送给容器以退出的系统调用信号。 |
| HEALTHCHECK | 定义周期性检查容器健康状态的命令。 |
| SHELL | 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。 |
本章实例:
使用Dockerfile创建Apache镜像并在容器中运行
1.创建工作目录
mkdir apache
cd apache
2.在工作目录中创建并编写Dockerfile文件
(1)保证拥有centos基础镜像
docker images | grep centos
(2)编 写dockerfile文件
vim Dockerfile
#定义基础镜像
FROM centos:7
#维护者信息(可缺省)
MAINTAINER devopsxjh
#添加备注信息(可缺省)
LABEL user="devopsxjh"\
gronp="CSDN"
#设置本地yum源
RUN mkdir /etc/yum.repos.d/bak;mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
ADD centos.repo /etc/yum.repos.d/centos.repo
#安装Apache服务以及一些系统工具
RUN yum clean all;yum -y install wget net-tools vim httpd
#开启端口80
EXPOSE 80
#编写测试网页,网页文件较大的话建议使用ADD上传
RUN echo '<font color=red><h1>hello dockerfile ! ! !</h1>' > /var/www/html/index.html
#复制脚本到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本(制作镜像中不运行)
CMD ["/run.sh"]
#启动容器时执行脚本(制作镜像中不运行)
CMD ["/run.sh"]
3.编写相关执行脚本
##添加启动镜像启动执行脚本
[root@docker apache]# vim run.sh
#!/bin/bash
#清理httpd的缓存
rm -fr /run/httpd/*
# 启动apache服务
exec /usr/sbin/apachectl -D FOREGROUND
#设置centos.repo仓库文件
vim centos.repo
[local]
name=centos7.9
baseurl=ftp://192.168.100.101/centos
enable=1
gpgcheck=0
Docker主机需要搭建yum仓库
(1)关闭防火墙
(2)安装Vsftpd包
(3)在FTP根目录下 创建仓库目录
(4)把光盘挂载到仓库目录
(5)开启FTP服务
(6)用真机测试FTP
提示:如果觉得搭建ftp仓库繁琐,可以考虑http仓库
4.使用Dockerfile生成镜像
命令语法:
docker build [选项] 路径
docker build -t apache:t1 .
5.使用新镜像运行容器测试
docker run -d -p 8080:80 --name apache apache:t1
#查看容器是否启动
docker ps
验证:
浏览器访问
6.将镜像导出 保存
docker save apache -o apache