一:机遇https://hub.docker.com/_/ruby打原生ruby镜像
build.sh
#!/bin/bash
docker build --no-cache -t registry.xxx.com/xs/ruby:2.6.6-ubuntu /data/images/ruby2.6.6-ubuntu/ && \
docker push registry.xxx.com/xs/ruby:2.6.6-ubuntu
Dockerfile
FROM ubuntu:18.04
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends \
bzip2 \
ca-certificates \
libffi-dev \
libgmp-dev \
libssl-dev \
libyaml-dev \
procps \
apt-utils \
debconf-utils \
zlib1g-dev \
; \
echo "tzdata tzdata/Areas select Asia" > /tmp/preseed.txt && \
echo "tzdata tzdata/Zones/Asia select Shanghai" >> /tmp/preseed.txt && \
rm -f /etc/timezone && \
rm -f /etc/localtime && \
debconf-set-selections /tmp/preseed.txt && \
apt-get -y install locales tzdata && \
rm -rf /var/lib/apt/lists/*
# skip installing gem documentation
RUN set -eux; \
mkdir -p /usr/local/etc; \
{ \
echo 'install: --no-document'; \
echo 'update: --no-document'; \
} >> /usr/local/etc/gemrc
ENV RUBY_MAJOR 2.6
ENV RUBY_VERSION 2.6.6
ENV RUBY_DOWNLOAD_SHA256 5db187882b7ac34016cd48d7032e197f07e4968f406b0690e20193b9b424841f
# some of ruby's build scripts are written in ruby
# we purge system ruby later to make sure our final image uses what we just built
RUN set -eux; \
\
savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends \
autoconf \
bison \
dpkg-dev \
gcc \
libbz2-dev \
libgdbm-compat-dev \
libgdbm-dev \
libglib2.0-dev \
libncurses-dev \
libreadline-dev \
libxml2-dev \
libxslt-dev \
make \
ruby \
wget \
xz-utils \
; \
rm -rf /var/lib/apt/lists/*; \
\
wget -O ruby.tar.xz "https://cache.ruby-lang.org/pub/ruby/${RUBY_MAJOR%-rc}/ruby-$RUBY_VERSION.tar.xz"; \
echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.xz" | sha256sum --check --strict; \
\
mkdir -p /usr/src/ruby; \
tar -xJf ruby.tar.xz -C /usr/src/ruby --strip-components=1; \
rm ruby.tar.xz; \
\
cd /usr/src/ruby; \
\
# hack in "ENABLE_PATH_CHECK" disabling to suppress:
# warning: Insecure world writable dir
{ \
echo '#define ENABLE_PATH_CHECK 0'; \
echo; \
cat file.c; \
} > file.c.new; \
mv file.c.new file.c; \
\
autoconf; \
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
./configure \
--build="$gnuArch" \
--disable-install-doc \
--enable-shared \
; \
make -j "$(nproc)"; \
make install; \
\
apt-mark auto '.*' > /dev/null; \
apt-mark manual $savedAptMark > /dev/null; \
find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \
| awk '/=>/ { print $(NF-1) }' \
| sort -u \
| xargs -r dpkg-query --search \
| cut -d: -f1 \
| sort -u \
| xargs -r apt-mark manual \
; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
\
cd /; \
rm -r /usr/src/ruby; \
# verify we have no "ruby" packages installed
! dpkg -l | grep -i ruby; \
[ "$(command -v ruby)" = '/usr/local/bin/ruby' ]; \
# rough smoke test
ruby --version; \
gem --version; \
bundle --version
# don't create ".bundle" in all our apps
ENV GEM_HOME /usr/local/bundle
ENV BUNDLE_SILENCE_ROOT_WARNING=1 \
BUNDLE_APP_CONFIG="$GEM_HOME"
ENV PATH $GEM_HOME/bin:$PATH
# adjust permissions of a few directories for running "gem install" as an arbitrary user
RUN mkdir -p "$GEM_HOME" && chmod 777 "$GEM_HOME"
CMD [ "irb" ]
二:在原生镜像基础上,打包执行gemfile的中间镜像,这样不需要每次up都重新拉gemfile
可以修改使用FROM ubuntu:18.04
build.sh
#!/bin/bash
image_name=ruby-middle
tag=v2
docker build --no-cache -t registry.xxx.com/xs/"$image_name":"$tag" . && \
docker push registry.xxx.com/xs/"$image_name":"$tag"
Dockerfile
FROM registry.xxx.com/xs/ruby:2.6.6-ubuntu18
LABEL layer=middle
#修改时区及中文环境
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
COPY prepare/ /var/tmp/ruby_om_export
COPY exclude.list /var/tmp/
RUN apt-get update && \
apt-get install -y locales language-pack-zh-hans net-tools git rsync gcc g++ make libmariadb-dev unzip zip vim && \
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
ENV LANG zh_CN.utf8
ENV LANGUAGE zh_CN:zh
WORKDIR /var/tmp/ruby_om_export
RUN sed -i "s/^ruby.*/ruby \'2.6.6\'/" /var/tmp/ruby_om_export/Gemfile && \
gem i bundler -v 1.17.3 && \
bundle install
#
COPY entrypoint.sh /usr/bin/
#EXPOSE 映射端口
EXPOSE 3002
#CMD 容器运行命令
ENTRYPOINT ["entrypoint.sh"]
三:机遇中间镜像做git更新发布镜像,可以配合脚本,过滤不必要覆盖的文件。
entrypoint.sh
#!/bin/sh
instfile=/opt/ruby_om_export/init_inst
intdir=/var/tmp/ruby_om_export
#清空日志
if [ -f /opt/ruby_om_export/log/production.log ];then
:>/opt/ruby_om_export/log/production.log
fi
#拷贝代码文件,排除配置文件
if [ -d "$intdir" ];then
rsync -a --delete /var/tmp/ruby_om_export /opt/ --exclude-from=/var/tmp/exclude.list && rm -fr /var/tmp/ruby_om_export
chmod +x /opt/ruby_om_export/bin/*
fi
if [ -f "$instfile" ];then
cd /opt/ruby_om_export && \
RAILS_ENV=production bundle exec rake db:migrate && \
RAILS_ENV=production bundle exec rake assets:precompile && \
RAILS_ENV=production bundle exec sidekiq -d -C config/sidekiq.yml && \
/usr/local/bundle/bin/puma -e production && \
RAILS_ENV=production bundle exec rake monitor_key_event file_path='/opt/ruby_om_export/log/redis_key_event.log' pid_file_path='/opt/ruby_om_export/tmp/pids/monitor_key_event.pid' && \
tail -f /opt/ruby_om_export/log/production.log
else
cd /opt/ruby_om_export && \
RAILS_ENV=production bundle exec rake db:create
RAILS_ENV=production bundle exec rake db:migrate && \
RAILS_ENV=production bundle exec rake assets:precompile && \
RAILS_ENV=production bundle exec sidekiq -d -C config/sidekiq.yml && \
/usr/local/bundle/bin/puma -e production && \
RAILS_ENV=production bundle exec rake monitor_key_event file_path='/opt/ruby_om_export/log/redis_key_event.log' pid_file_path='/opt/ruby_om_export/tmp/pids/monitor_key_event.pid' && \
echo "`date`" > "$instfile" && \
tail -f /opt/ruby_om_export/log/production.log
fi
exclude.list
config/database.yml
config/secrets.yml
config/mqtt.yml
config/mongoid.yml
log/redis_key_event.log
分享到:
相关推荐
Dawn 是一个基于 Docker 的 PaaS 系统,使用 Ruby 开发。实现了类 Heroku 的接口。该项目是在 2013年10月 开始的,原本计划是作为商业服务发布,但由于 PaaS 市场的竞争越来越激烈,因此决定开源。 当前开发的版本是...
使用 ruby-build 构建 Ruby 的 Docker 镜像。 使用 $RUBY_VERSION 环境变量默认为 2.2.0。 为 gem 安装捆绑程序和通用系统依赖项。 将此用作 Ruby 应用程序的基本映像。 用法 该映像使用 ONBUILD 命令构建 ...
passenger-docker 是为 Ruby,Python,Node.js 和 Meteor web 应用提供 Docker 基础镜像的工具。 标签:passenger
Docker Ruby 为Ruby映像提供构建所需的Vim,GPG和Git工具。 目录 产品特点 生成最新版本的GPG。 生成最新版本的Git。 包括Vim并将Vim设置为默认编辑器。 默认终端为xterm。 设置默认的Git分支。 确保Ruby系统...
docker-ruby ...从 Docker Hub 拉取镜像: docker pull brigand/ruby 用法 这主要用作基础映像(请参阅 brigand/docker-jekyll)。 要按原样运行图像: docker run -it --rm brigand/ruby ash
使用Dockerfile构建Ruby镜像 Dockerfile指令说明 构建私有镜像服务器 为私有镜像服务添加Basic认证... 为私有镜像服务添加Token认证... Docker Hub和自动构建 Docker容器连接 创建和使用数据卷 使用数据卷...
基于Alpine linux的Ruby的极简Docker镜像。 如何使用这张图片 运行交互式Ruby Shell $ docker run -it coopermaa/alpine-ruby 这将为您提供一个交互式Ruby Shell。 运行一行Ruby脚本 $ docker run --rm coopermaa...
基于docker,可以运行任何语言、简单程序的开源小项目。使用ruby编写。 已经支持的语言: PHP、RUBY、PYTHON、JAVA、C、C++、Go 安装 你需要知道docker的基本操作。命令行进入该项目。 编译镜像(需要安装各种语言...
本文提出了一种基于Docker容器组建Web集群的设计方案。该方案主要采用了Docker容器引擎打包Web应用环境镜像生成应用容器,并利用Nginx对业务流量进行负载均衡的方法。系统设计完成后,通过Ruby On Rails框架生成的...
维护者:这是的GIT中回购为 (不要与任何官方混淆ruby由提供的图像ruby上游)。 有关如何使用此Docker映像的完整自述文件以及有关贡献和问题的信息,请参阅。 的是在生成/维护的,尤其是。看到此处合并的更改尚未...
Docker Ruby 这个 repo 使用当前可用于内容为一堆不同风格的 MRI Ruby 和 JRuby 自动生成 Dockerfile。 查看abevoelker/ruby:ruby-2.2.0 rubies/目录以查看可用的,例如abevoelker/ruby:ruby-2.2.0 。 abevoelker/...
GStreamer Docker 安装的所有映像均具有对rtsp-server和webrtcbin的预期支持。 可能缺少必要的插件。 标签: 1.14-alpine 1.14-buster latest 1.14-cerbero
用于运行 Ruby、Python、Node.js 和 Meteor Web 应用程序的 Red Hat docker 镜像 Passenger-docker-redhat 是一组镜像,提供了一种非常简单的方法来运行Ruby、Python、Node.js 和使用 (一种快速、简单且可靠的 Web ...
支持的标签latest 卡皮斯特拉诺 3.3.5 Ruby 2.1.5 Ubuntu 14.04 LTS如何使用$ docker run \ --rm \ -it \ --name capistrano \ -v /path/to/.ssh:/capistrano/.ssh \ quay.io/spesnova/capistrano \ cap -T 每次输入...
Docker 镜像的包装。 此映像已预装 Ruby。 它还带有安装的 Bundler gem 和健全的 Bundler 配置值。 Ruby版 此映像中打包的默认 Ruby 版本是2.1.3 。 ruby-install预安装在映像中,因此安装新的 Ruby 版本很容易:...
docker create --name gems-data -v /data/rubygems busybox# Fetch packages to data only containerdocker run -d --volumes-from gems-data mookjp/rubygems-mirror-docker gem mirror然后将服务器作为镜像运行...
Docker用于开发 Docker不仅用于部署,它还可以用于开发。 1、为什么要在开发中使用Docker 主要有以下几个原因。 1)一致的开发环境 使用Docker,可以保证...可以使用同一编程语言(如python, python, ruby, ruby,
带有 Oracle Instant Client 的 Ruby Docker 镜像基于官方ruby:slim图像。 为什么不是ruby:alpine图像? Instant Client 库是针对glibc构建的,并使用了musl libc中未实现的一些功能,而 Alpine linux 使用的正是...
基于 Docker 的综合构建实验室模板此 repo 提供了一组“模板”,您可以使用它来创建自己的基于 docker 的综合构建实验室。 目前仅适用于x86_64 / amd64 。用法您可以只从顶级目录运行make images来获取一组基本图像...
基于 docker镜像的修改后的docker镜像。 增加了nginx上载限制,并删除了nginx服务器令牌。 用法 docker pull jasonheecs/nginx-proxy:latest 样本docker-compose文件: version : ' 2 ' services : nginx-proxy ...