草率地记住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