人们如何处理Docker容器的持久存储?
我目前正在使用这种方法:构建映像,例如PostgreSQL,然后启动容器
docker run --volumes-from c0dbc34fd631 -d app_name/postgres
Run Code Online (Sandbox Code Playgroud)
恕我直言,有缺点,我不能(偶然)删除容器"c0dbc34fd631".
另一个想法是将主机卷"-v"安装到容器中,但是,用户ID的容器内不一定匹配用户ID从主机,然后权限可能会混乱.
注:与其--volumes-from 'cryptic_id'你也可以使用--volumes-from my-data-container这里my-data-container是你分配到纯数据容器,如姓名docker run --name my-data-container ...(见接受的答案)
启动我们的应用程序的最佳方式是使用我们提供的docker compose.该泊坞窗,撰写启动所有与正确配置的服务.
现在我们想提供一个docker-compose,其中应用程序使用不同的后端运行.在这个组成中,8个10个服务是相同的,2个是不同的.
没有代码重复如何实现这一目标? 我看到服务可以从另一个docker-compose文件扩展服务,但是这仍然需要列出两个文件中的所有10个服务.
我volumes_from在docker compose中经历了选项.显然,您可以从容器或服务导入卷.从docker撰写的文档中,它是:
volumes_from
从另一个服务或容器挂载所有卷,可选择指定只读访问(ro)或读写(rw).
Run Code Online (Sandbox Code Playgroud)volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw注意:仅在版本2文件格式中支持container:...格式.在版本1中,您可以使用容器名称而不将其标记为:
Run Code Online (Sandbox Code Playgroud)- service_name - service_name:ro - container_name - container_name:rw
我很困惑,这里的容器和服务有什么区别?
关于使用docker容器的最佳实践,我有一个问题.
我开发的每个应用程序都需要一个数据库.现在我的问题是我是否应该使用一个内置多个数据库的mysql docker实例,或者我应该为每个数据库创建一个实例.我看到每个数据库创建一个实例的缺点是我不能拥有可以访问所有数据库的用户.我知道这是专业人员出于安全考虑,但是当我尝试从客户端进行备份时,我需要在每个实例中进行备份.并且不是多个实例使用了大量的资源开销(尽管mysql可能使用的资源较少,但使用退出更大的ex mssql实例可能会导致资源问题)
我的问题是用docker做什么是常见的方法,什么是优点和反差?
我只需要在尚未运行的情况下运行docker容器.鉴于此命令.如果它不存在,我将如何运行它.
docker run --name nginx -d nginx
Run Code Online (Sandbox Code Playgroud)
我对任何脚本或语言都是开放的.
我想在同一台服务器上运行多个项目使用MySQL docker容器.
使用docker-compose v3文件,我只是在每个项目中都有相同的mysql容器配置,它们具有相同的container_name:
version: "3"
services:
app1:
image: foo
links:
- mysql
mysql:
image: mysql/mysql:5.7
container_name: shared_mysql
Run Code Online (Sandbox Code Playgroud)
第二个应用程序有一个类似的docker-compose.yml文件,但app2代替app1.
运行docker-compose up --no-recreate时app2,我收到一个错误:
Creating shared_mysql ... error
ERROR: for shared_mysql
Cannot create container for service mysql: Conflict.
The container name "/shared_mysql" is already in use by container "deadbeef".
You have to remove (or rename) that container to be able to reuse that name.
Run Code Online (Sandbox Code Playgroud)
如何在多个docker项目之间共享MySQL容器?
有没有人知道在docker中容器之间共享数据库的最佳做法是什么?
我的意思是我想在docker中创建多个容器.然后,这些容器将在具有相同标识的同一数据库上执行CRUD.
到目前为止,我有两个想法.一个是创建一个单独的容器来运行数据库.另一个是直接在安装了docker的主机上安装数据库.
哪一个更好?或者,这个要求还有其他最佳实践吗?
谢谢
我计划使用微服务架构来实现我们的网站.我想知道在服务之间共享数据库是否正确,或者是否最好为每个服务都有一个单独的数据库.在这方面,我可以考虑为所有服务使用一个通用数据库,还是违反了微服务架构的本质?
我们正在使用微服务方法来构建我们的产品.我们正在使用一些项目,每个项目都使用docker-compose来运行.问题是在开发环境中,如果我们想要更改多个项目中的代码并测试已开发的代码,我们必须单独运行项目并手动将它们链接在一起.
现在我们要创建一个开发工具包,它可以克隆项目并将它们一起运行并处理链接.docker-compose可以处理多个docker-compose文件吗?如果没有,有没有足够的工具为我们这样做?或者我们的目标是否有任何推荐的方法?
编辑:例如我们有两个项目:PROJECT_A和PROJECT_B.每个都有自己的docker-compose.yml,每个都需要postgresql来运行.我们在PROJECT_A中有docker-compose.yml,如下所示:
db:
image: postgres:9.4
ports:
- "5432"
project_a:
build: .
command: python2.7 main.py
links:
- db
Run Code Online (Sandbox Code Playgroud)
我们在PROJECT_B中有docker-compose.yml,如下所示:
db:
image: postgres:9.4
ports:
- "5432"
project_b:
build: .
command: python2.7 main.py
links:
- db
Run Code Online (Sandbox Code Playgroud)
每个项目都可以单独运行并且运行正常.但是如果我们想要改变PROJECT_A和PROJECT_B之间的api,我们需要运行这两个项目并将它们链接在一起来测试我们的代码.现在我们要编写一个开发工具包项目,该项目可以运行这两个项目并在需要时链接它们.这样做的最佳方法是什么?
我们有一个单片应用程序,我们现在正在使用容器转换为微服务架构.
我们的微服务是有状态的(即他们需要从db插入/检索数据).根据微服务架构,每个微服务应该有自己的数据(在我们的例子中是数据库).
我的问题是,在那里每个微服务的数据库应该部署,是否应该在同一主机中的微服务的部署,在该微服务部署在同一个容器或应该像蔚蓝分贝单独的服务器或者其他的东西?
根据微服务最佳实践,每种方法的优缺点是什么?最佳方法是什么?*
我有几个应用程序容器,我想连接到mongodb容器.我尝试使用external_links,但我无法连接到mongodb.
我明白了
MongoError:第一次连接时无法连接到服务器[mongodb:27017]
我是否必须将容器添加到同一网络中以使external_links正常工作?
MongoDB的:
version: '2'
services:
mongodb:
image: mongo:3.4
restart: always
ports:
- "27017:27017"
volumes:
- data:/data/db
volumes:
data:
Run Code Online (Sandbox Code Playgroud)
应用程序:
version: '2'
services:
app-dev:
restart: Always
build: repository/
ports:
- "3000:80"
env_file:
- ./environment.env
external_links:
- mongodb_mongodb_1:mongodb
Run Code Online (Sandbox Code Playgroud)
网络:
# sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
29f8bae3e136 bridge bridge local
67d5519cb2e6 dev_default bridge local
9e7097c844cf host host local
481ee4301f7c mongodb_default bridge local
4275508449f6 none null local
873a46298cd9 prod_default bridge local
Run Code Online (Sandbox Code Playgroud)