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 folderinclude a yaml/yml file

run acontainer :

docker-compose up -d # -d mean detach 。that's meaning for theprocess run at backend and the command line can continue input 
docker run -d -p 8080:80 --name my_container my_image
  • docker run是创建并启动容器的命令。
  • -d参数告诉 Docker 在后台运行容器。
  • -p 8080:80参数将容器的 80 端口映射到宿主机的 8080 端口。
  • --name my_container参数为容器指定一个名字my_container
  • my_image是你要创建容器的镜像的名字。

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:1FROM node:18-alpine# Create a new build stage from a base image.WORKDIR /appCOPY . .RUN yarn install --productionCMD ["node", "src/index.js"]EXPOSE 3000

/app :WORKDIR /app这一行设置了后续指令的工作目录为/app。这意味着后续的指令 (如RUN,CMD,ENTRYPOINT,COPYADD)如果指定的是相对路径,那么都会 在/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-dflag (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 underContainers, or by runningdocker ps in the terminal.

The-pflag (short for--publish) creates a port mapping between the host and the container. The-pflag takes a string value in the format ofHOST:CONTAINER, whereHOSTis the address on the host, andCONTAINERis 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.