一、安装Docker
1. mac下,可以直接安装Docker for mac:https://www.docker.com/
2. 在docker中添加国内源(否则pull image会很慢):
https://docker.mirrors.ustc.edu.cn
https://hub-mirror.c.163.com
二、利用rails image生成项目文件:
1. 在终端中,进入用于存放项目文件的目录(这里选~/yyyltech/railsweb),输入下面的命令:
docker run -it --rm --user "$(id -u)":"$(id -g)" -v "$PWD":/usr/src/app -w /usr/src/app \
bitnami/rails:5.2.0 rails new --skip-bundle --database postgresql yyylapp
命令相关参数解析:
-it 选项让Docker分配一个伪终端(可选的参数为-d,该参数要求Docker在后台运行容器)
--rm 参数表示清除,意味着只要你退出容器,Docker就会删除容器。如果不指定这个参数,容器会以停止状态一直存在磁盘上,你能从停止状态重新运行它。
--user "$(id -u)":"$(id -g)" 用于必须的权限
-v "$PWD":/usr/src/app选项创建了一个卷挂载点,将当前宿主机的工作目录($PWD)映射为容器内的/usr/src/app。
-w /usr/src/myapp选项设定了目前正在运行的命令的工作目录。本例中,工作目录改成了挂载点。
\ 用于跨行的命令
bitnami/rails:5.2.0 是dockerhub上面的一个rails的镜像,可以换成其他
rails new --skip-bundle --database postgresql yyylapp 不运行bundle,并且把默认数据库改成pg,yyylapp为项目名称
2. 进入项目,修改Gemfile里面的ruby源为
source 'https://ruby.taobao.org'
3. 用docker运行bundle install
cd yyylapp
docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app ruby2.5 bundle install
检查项目下面是否生成了Gemfile.lock,有的话表示成功了。
三、rails开发环境docker容器化
我们采用Passenger+Nginx架构,使用的dockerhub容器为:phusion/passenger-ruby25
以下操作均在项目文件夹下面(~/yyyltech/railsweb/yyylapp)
下面,将利用docker-compose编排4个容器服务:
(1)Setup Container——yyylapp_setup:用于执行db:migrate等初始化命令,它监听postgres容器服务是否可用,当可用时执行初始化命令
(2)Web Application Container——yyylapp:rails app容器
(3)Database Container——postgres:pg数据库容器
(4)Database Data-only Container——postgres-data:用于持有pg数据库容器的数据,以防pg数据库容器出问题,我们还可以持有数据
1. 新建Nginx Virtual Host文件——yyylapp.conf(yyylapp为项目名称)
touch yyylapp.conf
文件内容:
server { listen 80; server_name _; root /home/app/yyylapp/public; passenger_enabled on; passenger_user app; passenger_ruby /usr/bin/ruby2.5; }
2. 新建environmental variables环境变量文件——rails-env.conf,后面会用到
touch rails-env.conf<