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
相关推荐
孙克旭_几秒前
day051-ansible循环、判断与jinja2模板
linux·运维·服务器·网络·ansible
总有刁民想爱朕ha32 分钟前
零基础搭建监控系统:Grafana+InfluxDB 保姆级教程,5分钟可视化服务器性能!
运维·服务器·grafana
Andy杨1 小时前
20250712-1-Kubernetes 监控与日志管理-K8s日志管理与维护_笔记
笔记·容器·kubernetes
Shartin2 小时前
Can201-Introduction to Networking: Application Layer应用层
服务器·开发语言·php
apihz3 小时前
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
android·服务器·开发语言·网络·数据库·网络协议·tcp/ip
乌云暮年3 小时前
Linux常用命令
linux·服务器·ssh·php
潘晓可3 小时前
Docker部署Nginx代理多个服务:公网域名与内网IP场景全解
nginx·docker·nginx proxy
wanhengidc3 小时前
企业选择大带宽服务器租用的原因有哪些?
运维·服务器
KKKingWei4 小时前
Kubernetes Dashboard UI 部署安装
云原生·容器·kubernetes