自学内容网 自学内容网

Docker容器构建,有手就行

Dockerfile 是构建 Docker 镜像的脚本,定义了从基础镜像、软件安装、配置、到启动的全过程。通过编写 Dockerfile,你可以自动化地构建容器,便于软件的分发和部署。以下是详细介绍 Dockerfile 的编写,以及如何基于 Dockerfile 构建 Docker 容器。

1. Dockerfile 的基本结构

Dockerfile 由一系列命令组成,每个命令在构建时会生成一个镜像层。以下是常用的 Dockerfile 指令:

1.1 FROM 指定基础镜像

每个 Dockerfile 都以 FROM 指令开头,指定构建镜像的基础镜像。例如:

FROM ubuntu:20.04

这表示镜像是基于 ubuntu:20.04 版本的。

1.2 MAINTAINER 指定维护者(可选)

用来声明镜像的维护者信息,虽然该指令现在已经被 LABEL 所取代,但仍有一些旧版本 Dockerfile 使用:

MAINTAINER Your Name <your.email@example.com>

你也可以使用 LABEL 指令为镜像添加描述信息:

LABEL maintainer="your.email@example.com"
1.3 RUN 执行命令

RUN 指令用于在镜像构建过程中执行命令,通常用于安装软件包或进行配置:

RUN apt-get update && apt-get install -y nginx

上面这行命令更新包管理器并安装 nginx

1.4 COPYADD 复制文件
  • COPY:将宿主机文件复制到镜像中。
  • ADD:功能类似 COPY,但还能自动解压 tar 文件或从 URL 下载文件。
COPY ./myapp /usr/src/app

将本地 myapp 目录复制到容器中的 /usr/src/app 目录。

1.5 WORKDIR 设置工作目录

WORKDIR 指定在容器中后续命令的默认工作目录,避免多次使用绝对路径:

WORKDIR /usr/src/app

这意味着接下来的命令会在 /usr/src/app 目录中执行。

1.6 CMDENTRYPOINT 设置容器启动时执行的命令
  • CMD:指定容器启动时的默认命令。
  • ENTRYPOINT:更明确地定义容器的启动命令,可以与 CMD 一起使用作为参数传递。
CMD ["nginx", "-g", "daemon off;"]

这行命令启动 nginx 并保持前台运行。

1.7 ENV 设置环境变量

用于设置镜像构建或容器运行时的环境变量:

ENV APP_ENV=production

设置环境变量 APP_ENVproduction

1.8 EXPOSE 声明容器暴露的端口

EXPOSE 指令告诉 Docker 容器将会使用的网络端口,但不实际进行端口映射。端口映射需要在运行容器时指定:

EXPOSE 80

声明容器将在端口 80 上提供服务。

1.9 VOLUME 定义挂载点

VOLUME 指定将来可以挂载到容器的目录,通常用于持久化数据:

VOLUME /data

2. Dockerfile 示例

以下是一个简单的 Dockerfile 示例,它从 Ubuntu 基础镜像开始,安装 Nginx 并启动服务:

# 使用 Ubuntu 作为基础镜像
FROM ubuntu:20.04

# 维护者信息
LABEL maintainer="you@example.com"

# 更新包管理器并安装 Nginx
RUN apt-get update && apt-get install -y nginx

# 将本地应用文件复制到容器中
COPY ./myapp /usr/share/nginx/html

# 设置工作目录
WORKDIR /usr/share/nginx/html

# 声明容器使用的端口
EXPOSE 80

# 启动 Nginx 并保持前台运行
CMD ["nginx", "-g", "daemon off;"]

3. 基于 Dockerfile 构建 Docker 容器

3.1 构建镜像

使用 docker build 命令来构建 Docker 镜像:

docker build -t my-nginx-app .
  • -t my-nginx-app:为镜像指定标签 my-nginx-app
  • .:表示 Dockerfile 所在的目录。

执行此命令后,Docker 会按顺序执行 Dockerfile 中的每一条指令,并为每一层创建一个镜像层。

3.2 运行容器

使用 docker run 命令启动基于构建的镜像的容器:

docker run -d -p 8080:80 my-nginx-app
  • -d:表示后台运行容器。
  • -p 8080:80:将宿主机的端口 8080 映射到容器的端口 80
  • my-nginx-app:指定要运行的镜像。

此时,你可以通过访问 http://localhost:8080 来查看 Nginx 服务是否启动成功。

3.3 查看运行中的容器

使用 docker ps 查看正在运行的容器:

docker ps

这将列出所有正在运行的容器及其状态。

3.4 停止容器

使用 docker stop 停止正在运行的容器:

docker stop <container_id>

其中 <container_id> 是容器的 ID,可以通过 docker ps 获得。

3.5 删除容器

使用 docker rm 删除容器:

docker rm <container_id>
3.6 删除镜像

如果要删除不再需要的镜像,使用 docker rmi

docker rmi my-nginx-app

4. Docker 的最佳实践

  • 分层构建:通过使用多阶段构建优化镜像大小。例如,开发和构建阶段使用不同的镜像。

  • 最小化镜像大小:避免将不必要的文件复制到镜像中,例如使用 .dockerignore 文件排除不需要的文件。

  • 合理使用缓存:Docker 使用缓存加速构建。如果前面的指令没有变化,Docker 会缓存构建的中间层,以节省时间。

  • 保持镜像的可移植性:在 Dockerfile 中尽可能使用绝对路径、环境变量等,确保在不同环境中运行一致。

  • 使用官方基础镜像:尽量选择稳定的、轻量级的官方基础镜像,例如 alpine,减少安全漏洞和依赖问题。

5.Docker容器构建实验
(1) Dockerfile的编写如下:在这里插入图片描述
2.docker-comopse.yml的编写如下所示:
在这里插入图片描述
3.文件的组织结构如下所示:
在这里插入图片描述
4.构建成功的截图如下所示:
在这里插入图片描述

总结

通过编写 Dockerfile,可以实现应用程序的环境打包、自动化部署和可移植性。构建、运行容器的过程简单且高效,极大地提升了应用程序的开发和部署速度。掌握 Dockerfile 的编写与容器的构建,将助力于现代化的应用部署流程。


原文地址:https://blog.csdn.net/weixin_45056021/article/details/142788879

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!