草率地记住docker-compose

因为没有Docker,所以开发变得麻烦了。为了自己记录,我留下了备忘录。
与其深入理解,不如先掌握自己能以最快速度、最低成本完成开发的知识水平。

我打算先在 Mac 上启动开发 Redis、MongoDB 和 Elasticsearch,然后将它们 Docker 化。

我的知識水平

当你编写Dockerfile时,它会自动获取操作系统映像并创建一个小型虚拟环境。如果需要编写多个Dockerfile,使用shell脚本可能会变得麻烦。据说使用docker-compose可以让你使用docker命令时不需要记住太多内容。

Docker Compose can be paraphrased in Chinese as `容器编排` qì .

当有多个Docker映像时,可以一次性进行集中处理和启动的工具。

举个例子,如果想要启动 Redis,可以按照下面的方式编写 docker-compose.yml 文件。

version: "3.3"
services:
  redis:
    image: redis:4
    ports:
      - 6379:6379

在”services”下面列出您想要启动的Docker镜像。
这些镜像可以从Docker Hub获取。
例如,这里有Redis等等。
https://hub.docker.com/_/redis/

图像的大体标签带有版本。
图像:{图像名称}:{标签名称}

使用端口转发时,可以将Docker中正在运行的端口映射到本地PC的端口。
这样,可以通过本地PC上的 redis-cli 工具连接到Docker中的Redis数据库。

使用”up”命令从docker-compose.yml文件中获取并启动所设定的Docker镜像。
如果加上”-d”选项,则会将其以守护进程形式运行,但容易忘记关闭而导致耗电量过大,所以建议不使用此选项进行操作。

$ docker-compose up

将数据持久化

据说像MongoDB这样需要持久化数据的东西如果不绑定valume,就会消失。

version: "3.3"
volumes:
  mongodb-volume:
    driver: 'local'
services:
  mongodb:
    image: mongo:3.6
    volumes:
      - mongodb-volume:/data/db
    ports:
      - 27017:27017
    command: mongod --replSet myDevReplSet
  redis:
    image: redis:4
    ports:
      - 6379:6379

在顶级卷中为卷指定名称。安装驱动程序后似乎可以选择各种驱动程序,但目前我只使用本地驱动程序,所以选择了这个。
据说使用卷声明后,Docker会很好地管理目录。

将服务 → mongodb → 卷与在顶层卷中声明的名称和Docker内部的目录关联起来。

启动命令是该进程的命令行。

使用 Dockerfile 进行分割

为了安装Elasticsearch插件,我编写了一个最小化的Dockerfile,并通过分隔目录来进行管理。

$ tree
├── elasticsearch/
│    ├── config/
│    │    ├── elasticsearch.yml
│    │    └── log4j2.properties
│    └── Dockerfile
└── docker-compose.yml

用于指定映像的FROM,用于安装Elasticsearch插件的RUN命令的Dockerfile。

弹性搜索/容器文件

FROM elasticsearch:5

RUN elasticsearch-plugin install analysis-kuromoji

与MongoDB类似,设置一个适用于Elasticsearch的顶级卷。

如果指定了以build为参数的目录,它会根据Dockerfile启动。

与MongoDB类似,将Elasticsearch的数据保存在指定位置上。
将本地的配置文件也通过卷挂载方式进行绑定。
这样就不用在Dockerfile中编写用于设置配置的RUN命令了。

version: "3.3"
volumes:
  mongodb-volume:
    driver: 'local'
  elasticsearch-volume:
    driver: 'local'
services:
  mongodb:
    image: mongo:3.6
    volumes:
      - mongodb-volume:/data/db
    ports:
      - 27017:27017
    command: mongod --replSet myDevReplSet
  redis:
    image: redis:4
    ports:
      - 6379:6379
  elasticsearch:
    build: elasticsearch
    volumes:
      - elasticsearch-volume:/usr/share/elasticsearch/data
      - ./elasticsearch/config:/usr/share/elasticsearch/config
    ports:
      - 9200:9200

使用docker-compose命令的最低限度

向上

启动

$ docker-compose up

请为以下内容提供一个中文翻译:

PS

确认进程。

有时候无法成功地结束,导致状态仍然保持在Up的状态。
如果状态变为Exit,则表示已经结束。

$ docker-compose ps
          Name                         Command               State                Ports
-----------------------------------------------------------------------------------------------------
elasticsearch_1              /docker-entrypoint.sh elas ...   Up      0.0.0.0:9200->9200/tcp, 9300/tcp
mongodb_1                    docker-entrypoint.sh mongo ...   Up      0.0.0.0:27017->27017/tcp
redis_1                      docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp

停止

停止一切行动。
当(我)确认实施后,看到(事情)开始运行时停止。

下去

当你正在编写并尝试使用docker-compose的时候,如果出现错误并希望重新开始全部过程。

当执行”rmi all”命令时,可以清除掉所有的图像并获取新的图像。

$ docker-compose down
bannerAds