note 1: docker 利用 volume 进行 presist data。 eg :
compose.yaml:
volumes:
database: //# named db by self
list golbal volumes:
docker volume ls # the volumes on the disk
inpect someone volume:
docker volume inspect multi-container-app_database
# the name of volume (multi-container-app_database) constitude by the container name(multi-container-app) + the db name (database),and separatored by "_"
result : docker volume inspect multi-container-app_database
[
{
"CreatedAt": "2024-02-05T10:20:28Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "multi-container-app",
"com.docker.compose.version": "2.24.3",
"com.docker.compose.volume": "database"
},
"Mountpoint": "/var/lib/docker/volumes/multi-container-app_database/_data",
"Name": "multi-container-app_database",
"Options": null,
"Scope": "local"
}
]
but you can‘t fint the folder ( docker/volumes/multi-container-app_database/_data ) on your host,
and this the explain by gpt :
/var/lib/docker/volumes/multi-container-app_database/_data
这个路径是在 Docker 的虚拟文件系统中,而不是在你的宿主机的文件系统中。这是因为 Docker 使用了一种名为 UnionFS 的文件系统,它允许 Docker 创建层(layer),并将它们组合成一个单一的视图。这意味着,即使你在宿主机的文件系统中看不到
/var/lib/docker/volumes/multi-container-app_database/_data
这个路径,你的数据仍然是安全的,它们被存储在 Docker 的虚拟文件系统中。
note 2 :
view current containers process status
docker-compose ps
# warning : the code run must at the folder include a yaml/yml file
run a container :
docker-compose up -d
# -d mean detach 。that's meaning for the process run at backend and the command line can continue input
note 3 :
explaination $:docker build -t getting-started .
docker build
:这是 Docker 的一个命令,用于从 Dockerfile 构建一个新的 Docker 镜像。-t getting-started
:-t
参数用于给新构建的镜像指定一个名字(也叫做 tag)。在这个例子中,新构建的镜像的名字是getting-started
。.
:这个点表示 Dockerfile 位于当前目录。Docker 会在这个目录下查找 Dockerfile,并根据 Dockerfile 的内容来构建镜像。
note 4:
current running list containers ( if include stop status containers)
docker ps 【-a】
note 5:
# syntax=docker/dockerfile:1
FROM node:18-alpine # Create a new build stage from a base image.
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
/app :
WORKDIR /app
这一行设置了后续指令的工作目录为/app
。这意味着后续的指令 (如RUN
,CMD
,ENTRYPOINT
,COPY
和ADD
)如果指定的是相对路径,那么都会 在/app
目 录下执行COPY :
COPY . .
这一行就会将 Dockerfile 所在的目录(.
表示当前目录)下的所有文件 和 目录复制到 Docker 镜像的/app
目录CMD :
CMD ["node", "src/index.js"]
这一行会在容器启动后在/app
目录下运 行node src/index.js
命令
/app
是 Docker 容器内的一个目录,你可以把它看作是你的应用在 Docker 容器内的“家目录”
note 6:
$ docker run -dp 127.0.0.1:3000:3000 getting-started
The
-d
flag (short for--detach
) runs the container in the background. This means that Docker starts your container and returns you to the terminal prompt. You can verify that a container is running by viewing it in Docker Dashboard under Containers, or by runningdocker ps
in the terminal.The
-p
flag (short for--publish
) creates a port mapping between the host and the container. The-p
flag takes a string value in the format ofHOST:CONTAINER
, whereHOST
is the address on the host, andCONTAINER
is the port on the container. The command publishes the container's port 3000 to127.0.0.1:3000
(localhost:3000
) on the host. Without the port mapping, you wouldn't be able to access the application from the host.