主题是Containerize an application,这里是链接
git clone https://github.com/docker/getting-started-app.git
├── getting-started-app/
│ ├── package.json
│ ├── README.md
│ ├── spec/
│ ├── src/
│ └── yarn.lock
cd /path/to/getting-started-app
Dockerfile
文件touch Dockerfile
# syntax=docker/dockerfile:1
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
docker build -t getting-started .
docker build
命令使用Dockerfile去构建一个新的镜像。根据Dockerfile的内容,FROM node:18-alpine
告诉docker是基于node:18-alpine
构建新image,所以需要下载。WORKDIR /app
设置运行后的工作目录。COPY . .
是复制功能,表示将当前目录的内容复制到/app
下,第一个参数是实际的路径,第二个参数是相对WORKDIR
的路径。RUN yarn install --production
是安装项目依赖。CMD ["node", "src/index.js"]
是启动容器时才会执行的命令。EXPOSE 3000
指定当前项目监听的端口。
docker build中-t
参数是image的tag名字, 后面那个点是告诉docker从当前项目寻找Dockerfile文件
docker run -dp 127.0.0.1:3000:3000 getting-started
-d
是--detach
的缩写,表示使容器在后台运行。-p
是--publish
的缩写,创建一个端口映射,形式是HOST:CONTAINER
,上面是将容器的3000端口映射到主机的127.0.0.1:3000。没有端口映射,不能从主机中访问该应用
2. 访问 http://localhost:3000
,将会看到下面的图像
执行以下命令,会看到类似的内容
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df784548666d getting-started "docker-entrypoint.sa€|" 2 minutes ago Up 2 minutes 127.0.0.1:3000->3000/tcp priceless_mcclintock