Docker容器内搭建ruby开发环境

由于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/ 可以访问即可。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

countrysides

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值