Docker 服务器设置
用单条命令启动数据库服务器
Docker 服务器设置
历史说明:这是 2015 年本地开发参考。有助于理解旧工作流,但不要将这些代码片段视为当前生产建议。现代 Docker Compose 文件、自定义网络、固定镜像版本、身份验证、密钥和经过审查的更新自动化是如今更安全的默认做法。
本指南适合谁?
- 是否曾想用“一次性”数据库测试应用?
- 接手了可疑的代码库?不想共享现有数据库的访问权限?
- 与安全敏感的客户合作?不要冒交叉污染的风险!使用容器并控制数据持久化!
- 无法将开发环境升级到最新数据库版本,因为遗留应用依赖 12 年前的 MySQL 版本?
别再让这些理由阻碍你!
一行命令快速链接
本文提供启动最流行数据库的一行命令,包括:
注意: 这些命令是作为本地开发快捷方式编写的。如果将其用于生产环境,请先添加身份验证、密钥管理、备份、网络策略、固定镜像版本和升级计划。
高级 Docker 用户: 如果你熟悉
docker-compose,可以将下面的 shell 命令转换到你的docker-compose.yml文件中使用。
Postgres 服务器
启动一个容器,命名为
pg-localhost
# 将数据库文件存储在容器外的本地路径mkdir -p $HOME/.postgres-data
docker run \ --name pg-localhost \ -p 127.0.0.1:5432:5432 \ -e POSTGRES_PASSWORD=password \ --restart unless-stopped \ -it \ --shm-size=256mb \ postgres:16-alpine \ postgres -c 'listen_addresses=*' \ -c 'password_encryption=scram-sha-256' \ -c 'shared_memory_type=sysv' \ -c 'shared_buffers=256MB' \ -c 'max_connections=200'根据需要调整命令行选项。(postgres 守护进程参数在 Docker 镜像名称
postgres:16-alpine之后开始。参见postgres -c 'listen_addresses=*'...)
以 postgres 用户身份访问
psql提示符
docker exec --user postgres -it pg-localhost psql以 root 身份访问容器的 shell
docker exec -it pg-localhost bash注意: 上述命令使用官方的 Alpine Linux 基础镜像。这不是你典型的 debian 环境。
要使用 debian/ubuntu 基础镜像,将
postgres:12-alpine改为postgres:12。
MongoDB 服务器
mkdir -p $HOME/.mongodb/data
docker run -d \ --name mongodb \ --restart on-failure:5 \ -p 127.0.0.1:27017:27017 \ -v $HOME/.mongodb:/data \ mongo:7 \ bash -c 'mongod --bind_ip 0.0.0.0'服务器配置完成后,用以下命令验证数据是否位于 $HOME/.mongodb:
ls -lach $HOME/.mongodb使用 mongosh CLI 工具连接到服务器。(如果尚未安装,请参见下文。)
#> 使用默认参数:mongosh你应该会看到类似这样的输出:

安装 Mongo CLI 工具
使用 brew 和 OSX
brew tap mongodb/brewbrew install mongodb-community-shellMySQL 服务器
警告: 请修改下方
MYSQL_ROOT_PASSWORD中的密码。
mkdir -p $HOME/.mysql
docker run -d \ -v $HOME/.mysql:/var/lib/mysql \ -p 127.0.0.1:3306:3306 \ --name mysql-$USER \ -e MYSQL_DATABASE=$USER \ -e MYSQL_ROOT_HOST='172.*.*.*' \ -e MYSQL_ROOT_PASSWORD='p@ssw0rd' \ mysql/mysql-server:8ElasticSearch 服务器
mkdir -p $HOME/.elastic
docker run -d \ --name elastic \ -p 127.0.0.1:9200:9200 \ -p 127.0.0.1:9300:9300 \ -v $HOME/.elastic:/data \ docker.elastic.co/elasticsearch/elasticsearch:8.15.5 bash -c 'elasticsearch --cluster.name elastic_cluster --node.name elastic01 --path.data /data/elastic-data --path.logs /data/elastic-logs '安全说明
注意:
-p 127.0.0.1:27017:27017这种端口选项会阻止除 Docker 服务器本地回环网络之外的访问。 要“发布”暴露的端口,请移除本地 IP 地址前缀以允许外部访问:-p 27017:27017。请确保已采取必要的安全预防措施。
建议: 始终使用端口扫描工具(如 nmap/masscan)验证你的网络配置(在另一网络的独立系统上执行)。
现在你已经掌握了启动数据库服务器的命令,下一步是将你的应用程序打包成 Docker 镜像。第二部分继续如下:
打包 NodeJS Web 应用
- 在项目根目录添加一个名为
Dockerfile的空白文件。 - (可选,推荐)使用 .gitignore 规则添加
.dockerignore,排除大型非必要路径。默认情况下,所有项目文件都会被包含。
在应用根目录创建 Dockerfile
# NodeJS 示例FROM node:22EXPOSE 3000COPY . /app/WORKDIR /appRUN apt-get update && apt-get dist-upgrade -yqqRUN ["npm", "install"]
# 可覆盖命令CMD ["npm", "start"]通过终端命令更容易展示如何使用 Dockerfile 并查看结果(见下方命令)。
在终端中,cd 到你的项目文件夹,每次部署变更(或需要更改/升级操作系统或环境配置)时运行以下 build 命令。
docker build -t app-name-here .关键 Docker 命令参考
构建 Docker 镜像
docker build -t app-name-here .创建/运行 Web 应用并链接数据库服务器
docker network create app-localdocker network connect app-local mongodbdocker network connect app-local elasticdocker run -d --name webapp01 --network app-local -p 3000:3000 app-name-here交互式运行(非守护进程,在终端中)
docker run -it --name webapp01 --network app-local -p 3000:3000 app-name-here bash删除容器实例或镜像
重要:任何未存储在挂载卷路径上的数据都将丢失!!
# 删除镜像docker rmi -f app-name-heredocker rm -f webapp01# 现在重新运行上面的 `docker run...` 命令# 例如,先停止上面的数据库实例,运行:`docker stop {mongo,elastic}`docker rm -f mongo elastic