Docker
Docker
Docker业务
容器 配置文件查看
是的,通过路径挂载是一种常见的方法来修改Docker容器中的配置文件。通过路径挂载,您可以将宿主机上的配置文件映射到容器内部,从而实现对配置文件的修改。
下面以Redis为例,介绍如何通过路径挂载修改Redis容器的配置文件:
首先,准备好您要修改的Redis配置文件。可以在宿主机上创建一个新的配置文件,或者修改已有的配置文件。
在运行Redis容器时,使用
-v
参数指定路径挂载的方式将宿主机上的配置文件映射到容器内部。例如:1
docker run -d -p 6379:6379 -v /path/to/redis.conf:/usr/local/etc/redis/redis.conf --name my-redis redis
其中,
/path/to/redis.conf
是宿主机上的配置文件路径,/usr/local/etc/redis/redis.conf
是容器内部的配置文件路径。启动Redis容器后,您可以在宿主机上修改配置文件。任何对宿主机上的配置文件的修改都会反映到容器内部。
如果Redis容器已经在运行,您可以使用
docker exec
命令进入容器内部,并使用编辑器或命令行工具修改容器内部的配置文件。例如:1
2docker exec -it my-redis bash
vi /usr/local/etc/redis/redis.conf修改完配置文件后,重新启动Redis服务使配置生效。
同样的方法也适用于其他容器,如MySQL和Kafka。您可以将宿主机上的配置文件路径映射到容器内部的相应路径,然后在宿主机上修改配置文件。
请注意,修改容器的配置文件可能需要重启容器或重新加载配置才能生效。具体的操作步骤可能因容器和配置文件而异,建议查阅相关容器的文档或官方指南以获取更详细的信息。
如果您需要更多帮助或有其他问题,请告诉我。
docker-compose
DockerComposeFile — 构建容器
docker run
构建容器需要指定如下参数:
镜像名称:指定需要使用的镜像名称,例如 nginx、mysql 等。
容器名称:指定容器运行时的名称,实际上是该容器的一个别名,用于在系统中唯一标识该容器。
挂载目录:将主机文件系统挂载到容器中,用于持久化数据。
端口映射:将容器内部的端口映射到外部主机的端口。
启动参数:例如执行命令、环境变量等。
下面是一个完整的例子:
1 |
|
解释如下:
- –name:容器名称为
my_container
。 - -p:将容器内部的80端口映射到主机的8080端口。
- -v:将主机中路径为 /app_data 的目录挂载到容器内部的 /data 目录。
- -e:设置 MYSQL_ROOT_PASSWORD 环境变量的值为 password。
- -d:在后台运行容器。
- nginx:指定使用 nginx 镜像。
以上是构建容器时需要指定的一些重要参数,还可以根据具体应用场景和需求,指定更多相关的参数和配置信息。
compose-file
将所有构建容器时可以使用的常用参数总结如下:
- image: 指定需要使用的镜像名称,例如
nginx
、mysql
等。 - container_name: 指定容器运行时的名称,实际上是该容器别名,用于在系统中唯一标识该容器。
- volumes: 将主机文件系统挂载到容器中,用于持久化数据。
- ports: 将容器内部的端口映射到外部主机的端口。
- environment: 属性 setter,用于设置容器内部的环境变量。
- restart: 指定容器异常终止时的自动重启策略。
- command: 在容器中启动时执行的命令。
- user/group: 指定运行容器的用户或用户组。
除此之外,还有一些高级选项,例如:
- privileged: 将容器变为 Docker 主机的特权容器,拥有所有的系统权限。
- cap_add: 添加 Linux 内核的特权。
- cap_drop: 删除 Linux 内核的特权。
- network_mode: 指定容器应该连接到的网络。
- dns: 自定义 DNS 记录。
- hostname: 设置容器主机名。
下面是一个使用 Docker Compose 文件构建容器的示例:
1 |
|
在上面的示例中:
- backend 服务运行一个使用 myapp-backend 镜像的容器,容器名称为
myapp-backend
,容器将在异常终止时自动重启,并监听 8000 端口、四个环境变量用于数据库配置,并在启动时执行python manage.py runserver
命令。 - db 服务运行一个使用 MySQL 5.7 镜像的容器,容器名称为
myapp-db
,容器将在异常终止时自动重启,并将数据库数据挂载到本地
参数列表
1 |
|
实例
1 |
|
Dokerfile – 构建镜像
Dockerfile reference | Docker Documentation
D 构建镜像时可以使用的参数有很多,主要包括以下几类参数:
FROM:指定基础镜像名称及其版本,用于指定新镜像的基础镜像,例如
1
FROM ubuntu:20.04
MAINTAINER/LABEL:用于指定该镜像的维护者和版本信息。
1
2
3MAINTAINER docker-team@example.com
LABEL version="1.0"
LABEL description="My custom nginx image"RUN:在镜像构建期间执行指定的命令,用于在构建镜像时配置和初始化环境,例如
1
2RUN apt-get update && \
apt-get install nginx -yCOPY/ADD:将指定文件或目录拷贝到镜像中,用于向容器中添加文件、应用程序和配置文件,例如
1
2COPY ./src /app/src
ADD https://example.com/archive.tar.gz /app/ENV:设置环境变量,用于容器内部的应用程序配置和运行,例如
1
ENV MYSQL_VERSION 5.7
EXPOSE:指定容器需要映射的端口,用户指定容器端口暴露给主机,例如
1
EXPOSE 80
USER:在容器中指定运行命令的用户,用于设置容器内应用程序的运行权限,例如
1
USER www-data
WORKDIR:指定镜像中的工作目录,用于指定容器启动时的默认目录,例如
1
WORKDIR /app
CMD/ENTRYPOINT:指定容器启动后需要执行的默认命令,用于启动和管理容器,例如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["sh", "-c", "echo Hello, $NAME"]
总的来说,这些参数都可以用于指定镜像系统内运行时的配置信息
# Docker部署前后端
## 后端部署
后端应用程序使用 Docker 进行部署的步骤如下:
1. 编写 Dockerfile 文件
Dockerfile 是构建 Docker 镜像的核心文件,它定义了构建镜像的步骤。一个基本的 Dockerfile 文件如下所示:
```Dockerfile
# 选择基础镜像(这里选择的是 OpenJDK 镜像)
FROM openjdk:11-jre-slim
# 配置镜像中的应用程序工作目录(这里选择的是 /app 目录)
WORKDIR /app
# 复制编译好的后端应用程序 JAR 文件(这里假设 JAR 文件已经通过 Gradle 或者 Maven 编译完成)
COPY build/libs/myapp.jar /app
# 暴露应用程序所使用的端口号(可以根据你自己的应用程序选择)
EXPOSE 8080
# 执行 JAR 文件的命令(这里的 myapp.jar 是上面 COPY 命令里复制进去的)
CMD ["java", "-jar", "myapp.jar"]构建 Docker 镜像
使用上述编写好的 Dockerfile,构建 Docker 镜像的命令如下:
1 |
|
其中,.(点)
表示 Dockerfile 文件所在的目录。
在前面的 Dockerfile 例子中,执行完这个命令后,会生成一个名为 myapp
版本为 latest
的 Docker 镜像。
- 运行 Docker 镜像
使用前面构建好的 Docker 镜像,启动应用程序的命令如下:
1 |
|
其中 -p
参数表示将容器内的应用程序端口号 8080 映射到主机的端口号 8080 上。
- 其他操作
推送到 Docker Hub 或者私有仓库:如果需要,可以使用
docker push
命令将自己构建的 Docker 镜像推送到 Docker Hub 或者其他私有的镜像仓库中存储。命令如下:
1
2
3
4
5# 登录到 Docker Hub 或者其他私有镜像仓库(根据实际情况填写)
docker login docker.io
# 将本地构建好的 Docker 镜像推送到 Docker Hub 上(根据实际情况填写)
docker push mydockerhub/myapp:latest- 挂载数据卷:如果需要,可以使用
docker run
命令挂载数据卷,将应用程序中生成的数据文件存储到外部存储器中,防止容器删除或者建时丢失数据。具体命令如下:
1
docker run -p 8080:8080 -v /path/to/directory:/app/data myapp:latest
其中
/path/to/directory
表示宿主机上的目录。在这个例子中,我们将容器内/app/data
目录挂载到主机上的/path/to/directory
目录(假设/path/to/directory
已经存在),容器中的数据文件将会存储在/path/to/directory
目录中。- 使用 Docker Compose:如果您的后端应用程序需要与多个其它容器(例如数据库、缓存、消息队列等等)协同工作,推荐使用 Docker Compose。Docker Compose 是 Docker 官方提供的一个工具,将多个容器打包成一个整体进行管理和部署。具体见 官方文档。
以上是部署后端应用程序时的主要步骤和细节。需要根据自己的实际情况进行相应的处理和调整。
- 挂载数据卷:如果需要,可以使用
前端部署
npm run build
在前端项目中,npm run build
命令用于构建生产环境下的前端资源。它会执行一系列的构建任务,如压缩文件、打包文件、生成 HTML、CSS 和 JavaScript 文件等,最终产生一些优化过的、可部署的前端资源。这些前端资源就是我们前端项目的核心内容,可以在生产环境中部署和运行。
相比之下,npm run start
命令是用来启动本地开发服务器,以便在开发过程中进行实时的调试和代码更改。
使用 npm run build
而不是 npm run start
是因为在正式部署前端应用程序时,我们通常会对前端项目进行构建处理。这意味着在部署之前,前端项目的源代码和构建后的版本是有区别的,构建过的版本可以更好地完善优化和减少加载时间。
在进行 Nginx 部署时,我们不需要运行 npm run start
,因为 Nginx 只是一个 HTTP 服务器,它只需要提供静态文件服务就可以了。所以一般我们会使用 npm run build
命令预先处理好静态文件,并将其生成到指定的位置。Nginx 再将静态文件从该位置读取并进行相应的路由处理即可。
因此,在前端部署时,我们通常使用 npm run build
命令构建静态文件,然后得到的构建文件可以直接部署在 Nginx 静态文件夹中,并通过 Nginx 进行访问、路由等处理。
Dockerfile
Dockerfile 制定镜像的基础镜像是需要制定版本的。在生产环境中,为了保证稳定性和可靠性,通常需要使用特定版本的基础镜像并根据需要定期更新。
以下是一个简单的 Dockerfile 示例,可用于构建用于前端项目的镜像:
1 |
|
这个 Dockerfile 中的每行都很重要,请看下面的解读:
1 |
|
这行指定了所使用的基础镜像,这里使用官方的 Node.js v14 镜像。
1 |
|
这一行设置了容器的工作目录,这里我们将工作目录设置为 /app
。
1 |
|
这一行将本地的 package.json
和 package-lock.json
文件复制到了容器内的 /app
目录下,以便后面安装项目依赖。
1 |
|
这一行使用 npm
安装项目依赖,将在容器内的 /app
目录下执行。
1 |
|
这一行将本地项目的所有文件,包括源代码、配置文件等复制到了容器内的 /app
目录下。
1 |
|
这一行运行命令构建生产环境下的前端资源。
1 |
|
这一行指定了容器启动时要运行的命令,这里我们设置为启动 npm start
命令。
综上,这个 Dockerfile 的作用是构建适用于前端项目的 Docker 镜像,包含了以下步骤:
基础镜像选择了官方的 Node.js v14 镜像作为基础镜像,这里使用的是特定版本的镜像。
设置了容器内的工作目录为
/app
,在该目录下后续操作。复制了本地项目中的
package.json
和package-lock.json
文件到容器内的/app
目录下,以便安装依赖。使用
npm
安装了项目依赖,在容器内的/app
目录下。复制本地项目的所有文件到容器内的
/app
目录下。运行构建命令,生成生产环境下的前端资源。
设置了容器启动时默认运行的命令为
npm start
。
这个 Dockerfile 使得开发人员可以方便地将前端项目打包为镜像,以便在各种环境中快速部署。通过构建这个镜像,我们可以将前端项目和相关依赖打包为一个可移植的容器。