Docker 内修改被重置?教你如何正确操作

作为一名刚入行的开发者,你可能会遇到在 Docker 容器内进行修改后,重启容器时发现修改被重置的问题。这是因为 Docker 容器默认情况下是使用只读文件系统,任何修改都不会持久化。本文将教你如何正确操作,确保你的修改能够持久化。

步骤流程

以下是实现 Docker 内修改持久化的步骤流程:

步骤 操作 代码
1 创建 Dockerfile FROM ubuntu:latest
2 复制文件到容器 COPY . /app
3 安装依赖 RUN apt-get update && apt-get install -y nginx
4 启动服务 CMD ["nginx", "-g", "daemon off;"]
5 构建镜像 docker build -t my-nginx .
6 运行容器 docker run -d -p 80:80 --name my-nginx-container my-nginx
7 修改容器文件 docker exec -it my-nginx-container bash
8 重启容器 docker restart my-nginx-container

详细操作

1. 创建 Dockerfile

首先,创建一个名为 Dockerfile 的文件,并写入以下内容:

FROM ubuntu:latest
COPY . /app
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]
  • FROM ubuntu:latest:基于 Ubuntu 基础镜像创建新镜像。
  • COPY . /app:将当前目录下的所有文件复制到容器的 /app 目录。
  • RUN apt-get update && apt-get install -y nginx:更新软件包列表并安装 Nginx。
  • CMD ["nginx", "-g", "daemon off;"]:设置容器启动时执行的命令。

2. 构建镜像

在 Dockerfile 所在的目录下执行以下命令构建镜像:

docker build -t my-nginx .

这会根据 Dockerfile 创建一个名为 my-nginx 的镜像。

3. 运行容器

使用以下命令运行容器:

docker run -d -p 80:80 --name my-nginx-container my-nginx
  • -d:后台运行容器。
  • -p 80:80:将容器的 80 端口映射到宿主机的 80 端口。
  • --name my-nginx-container:为容器指定名称。
  • my-nginx:使用之前构建的镜像。

4. 修改容器文件

进入容器并进行修改:

docker exec -it my-nginx-container bash

这会打开一个 shell,你可以在其中进行文件修改。

5. 重启容器

修改完成后,重启容器以使修改生效:

docker restart my-nginx-container

关系图

以下是 Docker 容器与宿主机的关系图:

erDiagram
    HOST ||--o| CONTAINER : "运行"
    CONTAINER {
        int port
        string name
    }
    HOST {
        string ip
    }

结尾

通过以上步骤,你可以确保在 Docker 容器内进行的修改能够持久化。希望这篇文章能帮助你更好地理解 Docker 的工作原理,并解决你遇到的问题。如果你还有其他疑问,欢迎随时提问。