原文见: https://docs.docker.com/samples/library/redmine/
简单翻译整理。
文章目录
- 1. 用SQLite3运行Redmine
- 2. 使用数据库容器运行Redmine
- 2.1. 启动数据库容器
- 2.2. 启动redmine
- 3. 通过docker stack deploy或docker-compose方式运行
- 4. 访问应用程序
- 4.1. 存储数据的位置
- 4.2. 端口映射
- 4.3. 环境变量
- 4.3. Docker的秘密
- 4.4. 镜像变体
1. 用SQLite3运行Redmine
这是最简单的设置; 刚刚运行redmine。
$ docker run -d --name some-redmine redmine
注意:不适合多用户生产使用(见redmine wiki 中说明)
2. 使用数据库容器运行Redmine
建议使用数据库服务器运行Redmine。
2.1. 启动数据库容器
- PostgreSQL的
$ docker run -d --name some-postgres --network some-network -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=redmine postgres
- MySQL的(替代-e REDMINE_DB_POSTGRES=some-postgres与-e REDMINE_DB_MYSQL=some-mysql运行管理平台时)
$ docker run -d --name some-mysql --network some-network -e MYSQL_USER=redmine -e MYSQL_PASSWORD=secret -e MYSQL_DATABASE=redmine -e MYSQL_RANDOM_ROOT_PASSWORD=1 mysql:5.7
2.2. 启动redmine
$ docker run -d --name some-redmine --network some-network -e REDMINE_DB_POSTGRES=some-postgres -e REDMINE_DB_USERNAME=redmine -e REDMINE_DB_PASSWORD=secret redmine
3. 通过docker stack deploy或docker-compose方式运行
一个名为stack.yml 的redmine例子:
version: '3.1' # 指定docker-compose.yml 文件的写法格式,需要和docker版本对应上services: # 配置多个容器的集合redmine:image: redmine # 指定服务所使用的镜像restart: alwaysports: # 指定对外暴露的端口- 8080:3000environment:REDMINE_DB_MYSQL: dbREDMINE_DB_PASSWORD: exampledb:image: mysql:5.7restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: redmine
运行docker stack deploy -c stack.yml redmine
(或docker-compose -f stack.yml up
),等待它完全初始化,访问:
http://swarm-ip:8080,http://localhost:8080或http://host-ip:8080(如适用)。
替代Web服务器
此存储库中的其他标记(如passenger使用的–links标记rails s)使用相同的环境和使用WEBrick()的默认标记,而是为您提供不同的Web和应用程序服务器的选项。passenger使用Phusion Passenger。tini用于收割僵尸。
4. 访问应用程序
目前,上游的默认用户和密码是admin / admin(登录到应用程序)。
4.1. 存储数据的位置
重要说明:有几种方法可以存储在Docker容器中运行的应用程序使用的数据。我们鼓励redmine镜像用户熟悉可用选项,包括:
让Docker 通过使用自己的内部卷管理将文件写入主机系统上的磁盘来管理文件的存储。这是默认设置,对用户来说简单且相当透明。缺点是文件可能很难找到直接在主机系统上运行的工具和应用程序,即外部容器。
在主机系统(容器外部)上创建一个数据目录,并将其挂载到容器内可见的目录中。这将数据库文件放置在主机系统上的已知位置,并使主机系统上的工具和应用程序可以轻松访问这些文件。缺点是用户需要确保目录存在,并且例如正确设置了主机系统上的目录权限和其他安全机制。
Docker文档是了解不同存储选项和变体的一个很好的起点,并且有多个博客和论坛帖子在这个领域进行讨论和提供建议。我们将简单地显示上面后一个选项的基本过程:
在主机系统上的适当卷上创建数据目录,例如/my/own/datadir。
redmine像这样启动你的容器:
$ docker run -d --name some-redmine -v /my/own/datadir:/usr/src/redmine/files --link some-postgres:postgres redmine
-v /my/own/datadir:/usr/src/redmine/files命令的一部分/my/own/datadir将底层主机系统中的目录安装在/usr/src/redmine/files容器内,Redmine将存储上载的文件。
4.2. 端口映射
如果您希望能够在没有容器IP的情况下从主机访问实例,则可以使用标准端口映射。只需添加-p 3000:3000到docker run参数,然后访问或者http://localhost:3000或http://host-ip:3000在浏览器中。
4.3. 环境变量
启动redmine映像时,可以通过在docker run命令行上传递一个或多个环境变量来调整实例的配置。
REDMINE_DB_MYSQL 要么 REDMINE_DB_POSTGRES
这两个变量允许您分别设置MySQL或PostgreSQL主机的主机名或IP地址。这些值是互斥的,因此如果两者都设置,则它是未定义的行为。如果两个变量都未设置,则镜像将回退到使用SQLite。
REDMINE_DB_PORT
此变量允许您指定自定义数据库连接端口。如果未指定,它将默认为常规连接端口:MySQL为3306,PostgreSQL为5432,SQLite为空字符串。
REDMINE_DB_USERNAME
此变量设置Redmine和任何rake任务用于连接到指定数据库的用户。如果未指定,则默认root为MySQL,postgresPostgreSQL或redmineSQLite。
REDMINE_DB_PASSWORD
此变量设置指定用户在连接数据库时将使用的密码。没有默认值。
REDMINE_DB_DATABASE
此变量设置Redmine将在指定数据库服务器中使用的数据库。如果没有指定,它将默认redmine为MySQL,REDMINE_DB_USERNAMEPostgreSQL或sqlite/redmine.dbSQLite的值。
REDMINE_DB_ENCODING
此变量设置连接到数据库服务器时要使用的字符编码。如果未指定,它将使用默认的mysql2库(UTF-8)用于MySQL,utf8PostgreSQL或utf8SQLite。
REDMINE_NO_DB_MIGRATE
此变量允许您控制是否rake db:migrate在容器启动时运行。只需将变量设置为非空字符串1,true并且迁移脚本不会自动在容器启动时运行。
db:migrate如果你用默认值以外的东西开始你的形象也将无法运行CMD,像bash。有关docker-entrypoint.sh详细信息,请参阅镜像中的当前内容
REDMINE_PLUGINS_MIGRATE
此变量允许您控制是否rake redmine:plugins:migrate在容器启动时运行。只需设置变量像一个非空字符串1或true与迁移脚本将在每个容器启动自动运行。它将在之后运行db:migrate。
redmine:plugins:migrate如果你用默认值以外的东西开始你的形象将不会运行CMD,喜欢bash。有关docker-entrypoint.sh详细信息,请参阅镜像中的当前内容
REDMINE_SECRET_KEY_BASE
此变量用于创建初始值config/secrets.yml并设置该secret_key_base值,“Rails使用该值来编码存储会话数据的cookie,从而防止其被篡改。生成新的秘密令牌会在重新启动“(会话存储)后使所有现有会话无效。如果您未设置此变量或提供secrets.yml将使用的变量生成rake generate_secret_token。
4.3. Docker的秘密
作为通过环境变量传递敏感信息的替代方法,_FILE可以将其附加到先前列出的环境变量,从而使初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可以用于从存储在/run/secrets/<secret_name>文件中的Docker机密加载密码。例如:
$ docker run -d --name some-redmine -e REDMINE_DB_MYSQL_FILE=/run/secrets/mysql-host -e REDMINE_DB_PASSWORD_FILE=/run/secrets/mysql-root redmine:tag
目前,这仅支持REDMINE_DB_MYSQL,REDMINE_DB_POSTGRES,REDMINE_DB_PORT,REDMINE_DB_USERNAME,REDMINE_DB_PASSWORD,REDMINE_DB_DATABASE,REDMINE_DB_ENCODING,和REDMINE_SECRET_KEY_BASE。
4.4. 镜像变体
该redmine镜像有许多种,每一个设计用于特定的使用情况。
redmine:
这是事实上的形象。如果您不确定您的需求是什么,您可能想要使用这个。它被设计为既可以用作丢弃容器(安装源代码并启动容器来启动应用程序),也可以用作构建其他镜像的基础。
redmine:-alpine
该镜像是基于流行的高山Linux项目,可用的alpine官方镜像。Alpine Linux比大多数分发基础镜像(约5MB)小得多,因此通常会导致更小的镜像。
当最终镜像尺寸尽可能小时,强烈建议使用此变体。需要注意的主要注意事项是它确实使用musl libc而不是glibc和朋友,因此某些软件可能会遇到问题,具体取决于其libc要求的深度。但是,大多数软件都没有这个问题,因此这种变体通常是一个非常安全的选择。请参阅此黑客新闻评论主题,以获取有关可能出现的问题的更多讨论以及使用基于Alpine的镜像的一些比较/比较。
为了最小化镜像大小,在基于Alpine的镜像中包含其他相关工具(例如git或bash)并不常见。使用此镜像作为基础,在您自己的Dockerfile中添加所需的内容(如果您不熟悉,请参阅alpine镜像说明以获取如何安装软件包的示例)。