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 COPY
和 ADD
复制文件
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 CMD
和 ENTRYPOINT
设置容器启动时执行的命令
CMD
:指定容器启动时的默认命令。ENTRYPOINT
:更明确地定义容器的启动命令,可以与CMD
一起使用作为参数传递。
CMD ["nginx", "-g", "daemon off;"]
这行命令启动 nginx
并保持前台运行。
1.7 ENV
设置环境变量
用于设置镜像构建或容器运行时的环境变量:
ENV APP_ENV=production
设置环境变量 APP_ENV
为 production
。
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)!