写作前面
主题是Containerize an application,这里是链接
需要准备
- 安装好Docker
- 安装好Git
- 需要文本编辑器
获取项目
- 使用git克隆项目到本地
git clone https://github.com/docker/getting-started-app.git
- 克隆后文件如下所示
├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock
构建app项目的image
- 进入项目根目录
cd /path/to/getting-started-app
- 创建
Dockerfile
文件touch Dockerfile
- 使用文本编辑器向Dockerfile输入以下内容
# syntax=docker/dockerfile:1 FROM node:18-alpine WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "src/index.js"] EXPOSE 3000
- 构建image
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文件
启动一个app容器
- 执行以下命令
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.s…" 2 minutes ago Up 2 minutes 127.0.0.1:3000->3000/tcp priceless_mcclintock