用一个迷你项目入门 Docker

170 阅读2分钟

yinxing3138_whale_93883c26-6c26-4748-814c-e24fc4e06349.png

Docker 提供了一个隔离于主机的环境,用以运行应用

这就使得我们不需要关心主机的情况,进而实现更快速地分发应用

安装 Docker

进入官网

点击 Download for Mac(可以选择不同平台版本)

创建一个迷你服务

创建项目目录

# 创建项目目录
mkdir mini-docker
cd mini-docker

# 创建入口文件 index.js 以及 模板文件  home.html
touch index.js home.html

在 home.html 中添加一些内容。模板中的样式,以 CDN 方式使用了 TailwindCSS

<!-- home.html -->

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
  <main class="container mx-auto">
    <h1 class="text-4xl text-center my-8">Home</h1>
    <p class="text-center text-lg bg-gray-200 p-4">
      Welcome to the home page.
    </p>
  </main>
</body>
</html>

利用 Node.js 跑一个简单的服务,将上面的 html 文件作为响应

// index.js

const http = require('http');
const fs = require('fs');
const path = require('path');

const server = http.createServer((req,res) => {
    if(req.url === '/'){
        fs.readFile(path.join(__dirname,'home.html'),(err,data) => {
            if(err) throw err;
            res.writeHead(200,{'Content-Type':'text/html'});
            res.end(data);
        });
    }
}
);

const PORT = process.env.PORT || 3002;
server.listen(PORT,() => console.log(`Server running on port ${PORT}`));

在终端中执行 node index.js

现在这个项目就运行起来了,并监听了 3002 端口

在 Chrome 打开 http://localhost:3002/ 就可以看到由 home.html 渲染出来的页面

Screenshot 2023-09-21 at 18.35.15.png

在 Docker 中运行

在 mini-docker 目录中添加一个 Dockerfile 文件

# 设置 Node.js 18 为基础镜像
FROM node:18-alpine

# 在 image 上设置一个工作目录
WORKDIR /app

# 将主机上当前目录的所有内容拷贝到 image 的 /app 下
COPY . .

# 设置默认命令,在启动 container 时执行
CMD [ "node", "index.js" ]

终端中执行以下代码,这个命令会根据刚才的 Dockerfile 去创建一个 image。image 定义了运行一个 container 所需的一切(文件系统、依赖、配置等)

docker build -t mini-docker .

查看创建出来的 image :

docker image ls

使用刚才创建的这个 image 去运行一个 container。container 是 image 的一个运行实例,它是一个与其他进程隔离开来的沙箱进程

docker run -p 8080:3002 mini-docker

我们利用 mini-docker 这个 image 来启动一个 container

将 container 内的 3002 端口映射到主机的 8080 端口,3002 正是我们跑 Node 服务的端口

现在我们在 Chrome 中打开 http://localhost:8080/ 就可以看到 home.html 的页面了

和刚才不同的是,刚才的页面是直接在主机跑的服务,现在它运行在 Docker container 中

总结

先创建一个 HTML 页面,然后使用 Node.js 创建一个服务将 HTML 返回到浏览器

然后创建了 Dockerfile,里面包含一系列指令,描述了我们要创建怎样的 image

构建 iamge,并以它运行一个 container (也就是 image 的运行实例)

在浏览器中打开我们配置的端口就可以看到页面了