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
相关推荐
安审若无21 分钟前
运维知识框架
运维·服务器
苏渡苇2 小时前
Docker 网络完全指南
网络·docker·容器·docker容器·容器通信
风向决定发型丶2 小时前
K8S CPU绑核详解
云原生·容器·kubernetes
Arvin6273 小时前
Nginx 添加账号密码访问验证
运维·服务器·nginx
斯普信云原生组4 小时前
Docker 开源软件应急处理方案及操作手册——镜像管理与构建故障
docker·容器·eureka
内心的一片海4 小时前
服务器内存异常占用
运维·服务器
liulilittle5 小时前
C++ 无锁编程:单停多发送场景高性能方案
服务器·开发语言·c++·高性能·无锁·原子
m0_738120725 小时前
渗透基础知识ctfshow——Web应用安全与防护(第一章)
服务器·前端·javascript·安全·web安全·网络安全
亚空间仓鼠5 小时前
OpenEuler系统常用服务(四)
linux·运维·服务器·网络
郝学胜-神的一滴6 小时前
Socket实战:从单端聊天到多用户连接的实现秘籍
服务器·开发语言·python·网络协议·pycharm