理解DockerFile和docker-compose.yml

DockerFile -> Docker 文件

Dockerfile是用于创建Docker镜像的文件。镜像是容器的基础,通过从Dockerfile构建,可以创建镜像并启动容器。

来自

指定 Docker 的基础镜像 (如 Node.js)。

跑步

在新创建的映像中执行命令,进行软件安装和设置。

Docker是通过层叠来构建镜像的,层数越少,处理越轻。例如,RUN apt-get update -qq && yarn global add @vue/cli 就使用了 && 来减少层数。
以下命令中,通过 update 将其更新到最新版本并安装 Vue CLI。

RUN apt-get update -qq && yarn global add @vue/cli

工作目录

设置容器内的工作目录。例如,将其设为/app,后续的命令或容器启动时的默认目录将为/app。

CMD 请用中文进行改写

设置在容器启动时要执行的命令。具体的行为取决于在package.json中定义的脚本。

CMD ["yarn", "serve-dev"]
"scripts": {
    "serve-dev": "vue-cli-service serve --mode local",
    }

package.json中的scripts可以使用yarn或npm命令来执行。
CMD命令是指在容器运行时执行yarn serve-dev或yarn vue-cli-service serve –mode local。

复制

您可以将本地文件或目录复制到图像中。

COPY [コピー元][コピー先] 

环境

用于在Dockerfile中设置环境变量。

ENV [キー] = [値] 

Docker compose – Docker编排

Docker Compose是一种工具,根据docker-compose.yml文件批量创建和启动多个容器。

    • コマンドの手順

docker compose build
docker compose run –rm client bash
docker compose up

使用Docker Compose进行构建

只有在先编辑Dockerfile的情况下,才会重新构建Docker镜像,否则不会反映任何更改。

使用Docker Compose运行时,使用终端指令”docker-compose run –rm client bash”。

在指定的容器中启动bash shell。
客户端通过yaml文件中定义的服务名称来指定要启动的容器,并通过bash命令在容器内部启动bash shell。
–rm是用来自动删除容器的选项,以确保在临时工作或调试会话后不会留下不必要的容器。
在这里,我们要导入所需的模块。

使用Docker Compose启动

当容器处于启动状态时,
若没有指定任何选项或服务名称,则将执行docker-compose.yml中定义的所有services。

使用docker exec命令启动容器内的bash shell的方式。

使用docker exec命令可以在已经运行的Docker容器内执行命令,而docker compose up -d命令则可以在容器以后台方式启动的情况下执行。

docker exec -it Dockerのコンテナ名 bash

-it可以将输入发送到容器内的shell,而-t则是用于简化输入命令的选项。

docker-compose.yml 的母语中文翻译

version: "バージョン"
services:
  サービス名(コンテナ):
    build:
      context: .
      dockerfile: ./docker/node/Dockerfile
    ports:
      - "8080:8080"
    expose:
      - "8080"
    volumes:
      - ./app:/app
    tty: true
    stdin_open: true
  サービス名(コンテナ):
    ....
    ....

在build命令中,使用context来指定要与Dockerfile一起构建的上下文,并在Dockerfile中指定Dockerfile的路径。 “.”代表当前目录。

在 ports 中,将主机的 8080 端口映射到容器的 8080 端口。
运行在容器内的应用程序监听容器内部的 8080 端口,当从外部访问主机的 8080 端口时,通信将被转发到容器的 8080 端口。
因此,通过指定 localhost 和 8080 端口进行访问,实际上可以访问容器内部的应用程序。

使用`expose`指令的唯一目的是设置在容器内监听的端口信息。
因此,为了能够从外部访问该端口,需要使用`ports`指令将其映射到主机上。

在容器中,volumes用于设置将主机上的文件或目录挂载到容器的文件系统中。也就是说,可以实现数据持久化,并且在主机和容器之间共享数据。

在这个例子中,我们将主机的”./app”目录挂载到容器的”/app”目录中。

将tty设为true可以防止容器正常退出。具体而言,通过设置tty,在容器中为正在运行的进程提供虚拟终端,从而可以使容器持续运行。这相当于docker exec -it命令中的-t部分。

将stdin_open设为true,可以将标准输入、输出和错误输出连接到容器中。这对应于docker exec -it命令中的-i部分。

一旦启动后,Docker容器会立即关闭。然而,在需要进入容器并输入命令的情况下,需要先启动Docker容器。
这种情况下,我们可以使用”-it”选项,将其配置在docker-compose.yml文件的”tty”和”stdin_open”中。

广告
将在 10 秒后关闭
bannerAds