由于ruby在Windows环境下兼容性不好,所以需要将开发环境搭建在linux上,然后使用vscode远程连接进行开发。
制作镜像
首先查看一下目录结构
> ls
app config db environments Gemfile.lock log package.json Rakefile spec test vendor
bin config.ru Dockerfile Gemfile lib nohup.out public README.md storage tmp
编写Dockerfile
FROM ruby:3.0.4
RUN apt-get update -qq && apt-get install -y nodejs yarn postgresql-client && apt-get install -y git && apt-get install -y vim
RUN mkdir /usr/local/business
WORKDIR /usr/local/business
COPY . /usr/local/business
RUN bundle install
执行命令,构建docker镜像
> docker build -t business:1.0.0 .
查看是否生成成功
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
business 1.0.0 d54fdeb70cfc 26 hours ago 1.24GB
创建网络
创建名为net2的网络,让ruby前后端和redis都在同一个网络
> docker network create net2
启动镜像
启动redis容器
> docker run -it --name ruby-redis -p 6379:6379 --network=net2 -d redis
启动nginx前端容器
> docker run -it --name ruby-nginx -p 10300:10300 --network=net2 -d nginx
启动ruby后端容器
> docker run -it --name business -p 3000:3000 -d business:1.0.0
查看网路信息
> docker network inspect net2
内容详情
[{
"Name": "net2",
"Id": "57eb9a6ee60bc5f137970d7d2b10320868fc7232d46328f663b74b0f86000dc2",
"Created": "2022-08-30T13:06:45.387068887+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.25.0.0/16",
"Gateway": "172.25.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"1191ea8118e89d638a21c77e22652eb4981d7be23feb988da7321dd1fc10ffa5": {
"Name": "ruby-redis",
"EndpointID": "d8fdee8fa920b18f9cbe8b5ff3f45cb4a6f1351ea183d55d4dd3f7dfe59c932a",
"MacAddress": "02:42:ac:19:00:03",
"IPv4Address": "172.25.0.3/16",
"IPv6Address": ""
},
"73ac7826e27d49f57576f28317cbe28357de2bc706fbbe29185b68709ba069c6": {
"Name": "business",
"EndpointID": "045f30e266da36dff32922ef2f88d7a8d9ec61cc76e5cc3ac3280ca944918332",
"MacAddress": "02:42:ac:19:00:02",
"IPv4Address": "172.25.0.2/16",
"IPv6Address": ""
},
"ccf6d22f2ad14907d5a81429a3d8cb31696c27b65022f0f981922d06800aef2c": {
"Name": "ruby-nginx",
"EndpointID": "eb067ccab20d89e7ed329a4c6c5045aea300ab743e6d275ab2d4df40b9f47edb",
"MacAddress": "02:42:ac:19:00:04",
"IPv4Address": "172.25.0.4/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}]
配置前端容器
复制前端文件到html目录
> docker cp busweb.tar.gz ruby-nginx:/usr/share/nginx/html
解压busweb.tar.gz
配置nginx.conf
server {
listen 10300;
server_name 192.168.0.123;
client_max_body_size 5M;
location ^~/api {
# 这里配置network里的后端ip地址
proxy_pass http://172.25.0.2:3000/api/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_read_timeout 600;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
client_max_body_size 5M;
}
location / {
root html;
index index.html index.htm;
}
}
最后重启容器
> docker restart ruby-nginx
配置后端
首先进入容器
> docker exec -it business /bin/bash
> cd config
# 修改database.yml 和 redis.yml文件,使用的也是network的IP
然后进入项目根目录,启动项目
> nohup bundle exec rails s -p 3000 -b '0.0.0.0' &
验证结果
在浏览器里输入http://192.168.0.123:10300/ 可以访问即可。