假设我已经取消了正式的mysql:5.6.21图像.
我通过创建几个docker容器来部署此映像.
这些容器已运行一段时间,直到MySQL 5.6.22发布.mysql的官方形象:5.6使用新版本更新,但我的容器仍然运行5.6.21.
如何将图像中的更改(即升级MySQL发行版)传播到我现有的所有容器?Docker的正确方法是什么?
我一直在玩Docker一段时间,并在处理持久数据时继续寻找相同的问题.
创建我Dockerfile和暴露量或使用--volumes-from来安装我的容器内的主文件夹.
我应该对主机上的共享卷应用哪些权限?
我可以想到两个选择:
到目前为止,我已经给了每个人读/写访问权限,所以我可以从Docker容器写入该文件夹.
将用户从主机映射到容器,这样我就可以分配更细化的权限.不确定这是可能的,但没有找到太多关于它.到目前为止,我所能做的就是以某个用户身份运行容器:docker run -i -t -user="myuser" postgres但是此用户的UID与我的主机不同myuser,因此权限不起作用.此外,我不确定映射用户是否会带来一些安全风险.
还有其他选择吗?
你们这些人/女士如何应对这个问题?
我正在尝试设置PostgreSQL容器(https://hub.docker.com/_/postgres/).我有一些来自当前PostgreSQL实例的数据.我将其复制/var/lib/postgresql/data并希望将其设置为PostgreSQL容器的卷.
我是关于PostgreSQL的docker-compose.yml文件的一部分:
db:
image: postgres:9.4
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
PGDATA : /var/lib/postgresql/data
volumes:
- /projects/own/docker_php/pgdata:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
当我做docker-compose时,我收到这条消息:
db_1 | initdb: directory "/var/lib/postgresql/data" exists but is not empty
db_1 | If you want to create a new database system, either remove or empty
db_1 | the directory "/var/lib/postgresql/data" or run initdb
db_1 | with an argument other than "/var/lib/postgresql/data".
Run Code Online (Sandbox Code Playgroud)
我试图从容器中创建自己的图像,所以我的Dockerfile是:
FROM postgres:9.4
COPY pgdata /var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
但是我得到了同样的错误,我做错了什么?
我使用pg_dumpall获取SQL并将其放在/docker-entrypoint-initdb.d中,但每次执行此文件都会执行docker-compose up.
有没有人知道在docker中容器之间共享数据库的最佳做法是什么?
我的意思是我想在docker中创建多个容器.然后,这些容器将在具有相同标识的同一数据库上执行CRUD.
到目前为止,我有两个想法.一个是创建一个单独的容器来运行数据库.另一个是直接在安装了docker的主机上安装数据库.
哪一个更好?或者,这个要求还有其他最佳实践吗?
谢谢
这天我正在阅读很多关于Docker的内容,我甚至试图在Vagrant的笔记本电脑上运行它.但我仍然不清楚为什么,特别是如何将它介绍给我的团队.只是我没有看到用例.
据我所知,您可以为Web服务器和数据库创建容器.所以你现在可以说嘿,我们正在使用我创建的custom-tomcat-1.0和custom-mysql-1.4容器.到目前为止这么清楚.我遇到的问题是那些"数据容器".
我仍然能够以某种方式理解我将DB-data-1.4与DB容器的数据文件一起更新到当前模式,我可以使用我的deployables的WEB-app-3.5,它将以某种方式与DB数据图像对应.
那个java怎么样?如果我有java DB,我需要在所有使用它的容器上安装JVM吗?
到目前为止有任何意义吗?现在有几件事我没有清楚地看到他们的位置.
开发商如何在当地工作呢?他将创建一些WEB-app图像快照并启动它?或者以某种方式将跳过WEB-app图像的使用,并以某种方式将构建文件直接提供给服务器映像?
有了jenkins,我想它会从git下载代码.构建它并创建一些WEB-app图像快照.开始一切.现在我可以运行一些集成测试,以某种方式从外部使用应用程序,但是如何?
基本上有两个问题:如何使用docker在本地开发,以及如何执行集成测试.我需要真实的用例,所以我可以看到它的大局.我们正在使用maven,java,spring,sql db,jenkins,junit.
从docker我标记的问题计数中假设StackOverflow是正确的地方(而不是例如DevOps),如果没有,请指出我正确的地方或相应地移动这个问题.
我的方案如下:
我想要实现的是docker-compose.yaml在我调用的应用程序存储库中有一个文件,docker-compose up然后启动所有必需的容器(如果尚未运行),例如,当我docker-compose up在后端应用程序存储库中调用时启动数据库容器.
我的方法是创建一个新的git存储库,它定义所有共享的docker镜像/容器,并且docker-compose.yaml只有docker-compose build在发生变化时才能运行所有开发人员(可能在将来使用git commit hook自动化).中央docker-compose.yaml看起来像这样
version: "3"
services:
postgres:
build: ./images/postgres
image: MY-postgres
container_name: MY-postgres-server
ports:
- "5432:5432"
httpd:
build: ./images/httpd
image: MY-httpd
container_name: MY-httpd-server
ports:
- "80:80"
Run Code Online (Sandbox Code Playgroud)
在Dockerfile和描述每个图像内置如何在自己的子文件夹,我认为不相关的问题,基本上是默认的图像高山+阿帕奇/ Postgres的.
所以问题是:docker-compose.yaml应用程序git存储库中的内容如何引用上述中心定义的服务/容器docker-compose.yaml.
现在,因为这是 没有 新的 问题 情景,我做了一些研究和诚实的各种方法,并提出了解决方案令人困惑,这一次的各种版本中不提倡使用的和兼容性,功能等.
我对这个问题感到沮丧有一段时间了,因为这里已经多次询问这个问题,例如在如何处理 Docker 中的持久存储(例如数据库)和什么是管理 Docker 共享卷的权限的(最佳)方法?,但答案根本没有解决问题。
第一个“答案”说只使用named volumes而不是传统的bind mounts. 这解决不了任何问题,因为当命名卷安装在主机上时,例如在默认位置/var/lib/docker/volumes/<volume name>/_data,那么该安装点将具有容器内安装点的uid/ 。gid
在 docker 命名卷之前给出的另一个“答案”是使用纯数据容器。这展示了同样的问题。
这对我来说是一个巨大的问题,因为我有很多嵌入式机器,我想在其中运行 docker 主机,并且用户在每台机器上可能有不同的uid/ 。gid因此,我无法在 Dockerfile 中对持久卷的挂载点硬编码uid/来实现匹配。gidid
这是问题的一个示例:假设我的用户foo位于主机上,具有uid 1001和gid 1001,并且将文件写入容器内的卷的用户具有uid 1002。当我运行容器时,docker将chown 1002:1002在主机上安装点目录,并用它写入文件uid,我什至无法用我的用户读取/写入文件foo。
视觉上(主机上的所有这些操作):
$ docker volume create --driver local --opt type=volume --opt device=/home/<my_host_user>/logs --opt o=bind logs
logs
$ docker volume inspect logs …Run Code Online (Sandbox Code Playgroud) permissions containers file-permissions docker docker-volume
我对纯数据 Docker 容器有点困惑。我读到将目录直接安装到源操作系统是一种不好的做法:https://groups.google.com/forum/#!msg/docker- user/EUndR1W5EBo/4hmJau8WyjAJ
我了解如何制作仅数据容器:http://container42.com/2014/11/18/data-only-container-madness/
我看到了一些与我类似的问题:How to deal with permanent storage (eg Databases) in docker
但是,如果我有一个灯服务器设置......并且我对数据容器进行了一切不错的设置,而不是将它们“直接”链接到我的源操作系统并每隔一段时间进行备份......
比有人过来并重新启动我的服务器..如何再次设置我的docker(仅数据)容器,这样我就不会丢失任何数据?
我是Docker的新手.我想要一些专家关于容器设计的意见.我在MongoDB云(Atlas)中建立了一个数据库.我在Docker容器中有Windows应用程序,包括Windows操作系统和基于应用程序的组件.我想使用RavenDB,这个数据库对我来说很新.我的Windows容器的一个组件将与MongoDB和RavenDB进行通信.我的问题是我应该为RavenDB创建不同的docker容器,还是在现有的windows容器中安装RavenDB.这是设计决策问题.我是RavenDB和Docker的新手,所以我的利弊还不清楚.请帮助我.
docker ×9
containers ×2
java ×1
linux ×1
mongodb ×1
permissions ×1
postgresql ×1
ravendb ×1
windows ×1