利用Dockerfile脚本文件构建镜像

序:需要准备两台安装好Docker环境的虚拟机。此文主要是介绍Dockerfile及常用指令,利用centos:7基础镜像,在centos:7基础镜像上安装SSHD服务,利用Dockerfile来实现构建镜像。

 安装Docker可参考:https://blog.csdn.net/2301_82085712/article/details/147140694?spm=1011.2415.3001.5331


目录

一、Dockerfile的概述

二、Dockerfile的常用指令

1、基础指令

2、文件操作

3、构建配置

4、容器配置

5、启动指令

6、高级特性

三、利用Dockerfile构建镜像

1、拉取centos:7镜像

2、新建目录

3、新建并编辑Dockerfile文件

4、使用docker build编译命令,生成新的镜像版本

5、查看镜像是否构建成功,并利用新镜像生成容器

6、查看新容器的IP地址

7、验证SSH是否配置成功


 

一、Dockerfile的概述

        Dockerfile文件是一个文本文件,也是一个Docker可以解释的脚本文件,在这个脚本文件中记录着用户创建镜像过程中需要执行的所有命令。Dockerfile从FROM命令开始,紧接着是各种方法、命令和参数。其产出为一个新的可以用于创建容器的镜像。当Docker读取并执行Dockerfile 中所定义的指令时,这些指令将会产生些临时文件层,并会用一个名称来标记这些临时层。        

        Dockerfile是容器化应用的核心工具,通过代码化定义镜像构建流程,实现高效、可移植的部署方案。

二、Dockerfile的常用指令

1、基础指令

  •  FROM 

        指定基础镜像,必须是第一条非注释指令,支持多阶段构建时用AS定义别名
        示例:FROM ubuntu:22.04 AS builder

  • ARG

        定义构建时的变量,可在FROM之前使用,作用域仅在构建阶段
        示例:ARG version=1.0

  • LABEL

        添加元数据(如作者、版本),替代已废弃的MAINTAINER
        示例:LABEL maintainer="dev@example.com"

2、文件操作

  • COPY

        复制宿主机文件到镜像,不支持URL和解压,目标路径需以斜杠结尾
        示例:COPY ./src /app/

  • ADD

        类似COPY,但支持URL下载和自动解压压缩包(仅限.tar, .gz, .zip等格式)
        示例:ADD https://example.com/file.tar.gz /app/

3、构建配置

  • RUN

        执行命令并创建镜像层,支持shell和exec格式,推荐合并命令减少镜像层数
        示例:RUN apt update && apt install -y python3

  • ENV

        设置容器运行时的环境变量,可通过docker run -e覆盖
        示例:ENV PYTHONPATH=/app

  • WORKDIR

        设置工作目录,后续指令基于此路径执行,若目录不存在则自动创建
        示例:WORKDIR /app

  • USER

        指定运行命令的用户(需提前在基础镜像中创建该用户)
        示例:USER appuser

4、容器配置

  • EXPOSE

        声明容器运行时监听的端口,需通过docker run -p映射到宿主机端口
        示例:EXPOSE 8080

  • VOLUME

        创建数据卷挂载点,用于持久化存储
        示例:VOLUME/data

  • HEALTHCHECK

        定义容器健康检查策略,通过命令返回值判断状态
        示例:HEALTHCHECK --interval=30s CMD curl -f http://localhost/

5、启动指令

  • CMD

        指定容器默认启动命令,可被docker run的参数覆盖,通常以exec格式编写。
        示例:CMD ["python3", "app.py"]

  • ENTRYPOINT

        配置容器主命令,不可被覆盖,常与CMD配合使用(CMD作为参数)
        示例:ENTRYPOINT ["nginx"] + CMD ["-g", "daemon off;"]

6、高级特性

  • ONBUILD

        定义子镜像构建时触发的指令,适用于基础镜像的扩展场景
        示例:ONBUILD COPY . /app

  • SHELL

        覆盖默认的Shell程序(如SHELL ["/bin/bash", "-c"])

  • 多阶段构建

        通过FROM ... AS和COPY --from=减少最终镜像体积


三、利用Dockerfile构建镜像

1、拉取centos:7镜像

[root@docker01 ~]# docker pull centos:7
Using default tag: 7
7: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:7
docker.io/library/centos:latest

[root@docker01 ~]# docker images
REPOSITORY   TAG       IMAGE ID        CREATED          SIZE
centos       7         5d0da3dc9764    3 years ago      204MB

2、新建目录

[root@docker01 ~]# mkdir -p /user/docker
[root@docker01 ~]# cd /user/docker/
[root@docker01 docker]# 

3、新建并编辑Dockerfile文件

[root@docker01 docker]# vi Dockerfile
FROM centos:7

MAINTAINER tt

RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo && \
    sed -i 's|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.huaweicloud.com|g' /etc/yum.repos.d/CentOS-*.repo

RUN yum install openssh-server net-tools -y

RUN mkdir /var/run/sshd

RUN echo 'root:hbliti' | chpasswd

RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

ENV HISTTIMEFORMAT "%F %T "

RUN ssh-keygen -A

EXPOSE 22

CMD ["/usr/sbin/sshd","-D"]

4、使用docker build编译命令,生成新的镜像版本

[root@docker01 docker]# docker build -t centos_sshd:1.0 .

[root@docker ~]# docker images
REPOSITORY    TAG       IMAGE ID        CREATED          SIZE
centos_sshd   1.0       dcac13ab501a    11 seconds ago   464MB
centos        7         5d0da3dc9764    3 years ago      204MB

5、查看镜像是否构建成功,并利用新镜像生成容器

[root@docker01 docker]# docker run -dit --name my_centos_sshd centos_sshd:1.0
472df1394d3b899f498236e16b92111ddf2677bea84db979054e8c23afcda39e

[root@docker01 docker]# docker ps -l
CONTAINER ID     IMAGE               COMMAND           CREATED        STATUS  PORTS    NAMES
472df1394d3b     centos_sshd:1.0    "usr/sbin/ssd -D"  5 seconds ago  Up 4 seconds   22/tcp   my_centos_sshd

6、查看新容器的IP地址

[root@docker01 docker]# docker exec -it my_centos_sshd /bin/bash
[root@472df1394d3b /]# ifconfig

7、验证SSH是否配置成功

# 使用另外一台虚拟机docker02远程连接docker01

[root@docker02 ~]# ssh root@172.17.0.2
root@172.17.0.2's password:  ## hbliti

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@t.t.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值