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
相关推荐
qetfw35 分钟前
UOS DHCP Relay:跨网段分配与 IP、DNS、网关验证
linux·服务器·网络·tcp/ip·uos
明航咨询-陈老师1 小时前
ITSS运行维护服务能力成熟度认证技术纵深:标准模型、等级路径、2026审核趋势与CS/CMMI对比
服务器·数据库·cmmi
缓慢更新2 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
叼烟扛炮3 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
叼烟扛炮3 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
DarkAthena4 小时前
wslc ps 卡死的排查:一次「停容器不停 VM」引发的连环故障
docker
小沈同学呀5 小时前
【Agent开发第十五期】部署上线:把 Alex 搬进浏览器,15 期全栈串联收官
docker·agent·从零搭建ai助手
开开心心就好5 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
lwx9148525 小时前
Docker-安装SSH服务
docker·容器·ssh
一枕槐安4875 小时前
大模型限流、重试、超时处理:API 调用健壮性方案
linux·服务器·php·大模型api·指数退避·限流控制·超时预算