Dockerfile构建镜像(练习一Apache镜像)(5-1)

目录

指令详解

本章实例:

1.创建工作目录

2.在工作目录中创建并编写Dockerfile文件

(1)保证拥有centos基础镜像

3.编写相关执行脚本

##添加启动镜像启动执行脚本

#设置centos.repo仓库文件

Docker主机需要搭建yum仓库

4.使用Dockerfile生成镜像

5.使用新镜像运行容器测试

#查看容器是否启动

验证:

6.将镜像导出保存


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
相关推荐
2601_967287571 小时前
轮胎侧壁上的 91V 是什么意思,负荷指数与速度级别怎么看
运维·服务器·汽车
Ivanqhz2 小时前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法
小此方2 小时前
Linux网络(十九):TCP流量控制与滑动窗口详解,超时重传和快重传到底有什么区别
linux·运维·服务器·网络·网络协议·tcp/ip
沫璃染墨2 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
Ruiery3 小时前
Linux 6.6内核 CPU 深度解析(一):BSP 拉起 — 从实模式到 kernel_init 的完整旅程
linux·运维·服务器
ggaofeng3 小时前
Ctrl+C结束进程是如何实现的
服务器·c语言·网络
光依旧5 小时前
PageIndex没翻车,翻车的是我的解析器
docker·langchain·大模型·向量数据库·pdf解析·rag·pageindex
qeen875 小时前
【Linux】Linux环境下的进程终止与进程等待问题
linux·运维·服务器
衍玊6 小时前
常见i/o模型以及高性能服务器设计
服务器
Dovis(誓平步青云)6 小时前
多个链接不等于多份证据,新闻核验看板怎样合并来源
java·服务器·前端·javascript·人工智能·pdf·电脑