使用docker的小例子

演示一个简单的 Node.js 应用的 Docker 化过程。假设我们要创建一个简单的 Node.js 应用,它会在启动时输出 "Hello, Docker!"。

1. 创建 Node.js 项目

步骤 1: 创建项目目录和文件

mkdir my-node-app cd my-node-app

步骤 2: 初始化 Node.js 项目

npm init -y

步骤 3 : 创建 index.js 文件,内容如下:

javascript 复制代码
// index.js
const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, Docker!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

步骤 4 : 在 package.jsonscripts 部分添加 start 命令

"scripts": { "start": "node index.js" }

2. 创建 Dockerfile

步骤 1 : 在项目目录中创建 Dockerfile,内容如下:

javascript 复制代码
# 使用 Node.js 官方镜像作为基础镜像
FROM node:20

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json 并安装依赖
COPY package*.json ./
RUN npm install

# 复制应用代码
COPY . .

# 暴露应用端口
EXPOSE 3000

# 设置容器启动时执行的命令
CMD ["npm", "start"]

3. 构建 Docker 镜像(假设你已经安装好了Docker)

在项目目录中运行以下命令构建 Docker 镜像:

docker build -t my-node-app .

4. 运行 Docker 容器

构建完成后,运行容器并映射端口:

docker run -p 3000:3000 my-node-app

5. 测试应用

打开浏览器或使用 curl 命令访问 http://localhost:3000,你应该会看到输出 "Hello, Docker!"。

curl http://localhost:3000

总结

  1. 创建 Node.js 应用 :编写一个简单的应用,配置 package.json
  2. 编写 Dockerfile:定义如何构建镜像。
  3. 构建镜像 :使用 docker build 命令创建 Docker 镜像。
  4. 运行容器 :使用 docker run 命令启动容器并运行应用。

这样,你就完成了一个基本的 Node.js 应用的 Docker 化过程。

运行容器之前,需要创建容器吗

不需要手动创建容器。在 Docker 中,运行容器的过程会自动创建一个新的容器实例。你只需要使用 docker run 命令,它会基于指定的镜像创建并启动一个新的容器。例如:

docker run -p 3000:3000 my-node-app

这条命令会:

  1. 创建 一个基于 my-node-app 镜像的新容器。
  2. 启动 容器,并将容器的 3000 端口映射到主机的 3000 端口。

所以,通过 docker run 命令,你就完成了容器的创建和启动。

相关推荐
毕竟是shy哥2 小时前
vs code连接远程服务器docker环境及配置免密登录
服务器·docker·vs code
IT大白鼠2 小时前
Ingress 与 Ingress-Controller:K8s 七层 HTTP 反向代理技术详解与实践
http·容器·kubernetes
新时代牛马3 小时前
Linux VFS 完整篇:从path_openat、dentry/inode 到page cache 与挂载排障
linux·运维·服务器
java_logo3 小时前
Docker 部署 Rocky Linux:轻松搭建 RHEL 兼容企业级基础镜像平台
linux·docker·容器·rocky linux·基础镜像·轩辕镜像·rhel 兼容
cloudfantasy4 小时前
docker直接二进制安装,非编译。KylinV10SP3 aarch64有效
运维·docker
新时代牛马5 小时前
Linux 驱动中断与定时完整篇:从 request_threaded_irq 到hrtimer 选型与排障
linux·运维·服务器
考虑考虑5 小时前
nginx打印请求日志
运维·后端·nginx
数字补给站6 小时前
Windows 10 + Hyper-V + Terraform + cloud-init:批量产出 3 台 Ubuntu 的实践笔记
运维·ai编程
M--Y7 小时前
Docker数据持久化与网络架构
网络·docker·架构
鹤落晴春9 小时前
【K8s】认识Kubernetes API:从CRD出发的一次梳理
云原生·容器·kubernetes