Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
當 Rails 遇上 Docker,環境部署原來是這樣!?
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Johnson
August 18, 2019
610
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
當 Rails 遇上 Docker,環境部署原來是這樣!?
Johnson
August 18, 2019
Featured
See All Featured
Visualization
eitanlees
152
17k
Unsuck your backbone
ammeep
672
58k
Agile that works and the tools we love
rasmusluckow
331
21k
Building an army of robots
kneath
306
46k
Between Models and Reality
mayunak
4
330
Automating Front-end Workflow
addyosmani
1370
210k
Navigating Weather and Climate Data
rabernat
0
210
Navigating Team Friction
lara
192
16k
Fireside Chat
paigeccino
42
3.9k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
sira's awesome portfolio website redesign presentation
elsirapls
0
270
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
Transcript
h t t p s : / / 5 x
r u b y . t w / 當 R ail s 遇上 Doc ker 環境部署原來 是這樣!?
簡介 詹昇 五倍紅寶石 Rails 工程師
當 R ail s 遇上 Doc ker 環境部署原來 是這樣!?
在我的電腦不能跑!? 設定黨打包 Configuration management chef 是 VM 的
Docker 要解決的問題 圖片來來源:https://www.flaticon.com Local
Docker 要解決的問題 圖片來來源:https://www.flaticon.com Local
Docker 要解決的問題 別⼈人的電腦 圖片來來源:https://www.flaticon.com Serve Serve Local
Docker 要解決的問題 別⼈人的電腦 圖片來來源:https://www.flaticon.com Serve Serve Local
Docker 要解決的問題 別⼈人的電腦 圖片來來源:https://www.flaticon.com Serve Serve Local
None
Server Host OS Server Host OS 虛擬機 vs Docker 虛擬機
Docker
Server Host OS App A App B Bins/Libs Bins/Libs Server
Host OS App A App B Bins/Libs Bins/Libs 虛擬機 vs Docker 虛擬機 Docker
Server Host OS App A App B Bins/Libs Bins/Libs Server
Host OS App A App B Bins/Libs Bins/Libs 虛擬機 vs Docker 虛擬機 Docker
Server Host OS App A App B Bins/Libs Bins/Libs Guest
OS Guest OS Server Host OS App A App B Bins/Libs Bins/Libs 虛擬機 vs Docker 虛擬機 Docker
Server Hypervisor Host OS App A App B Bins/Libs Bins/Libs
Guest OS Guest OS Server Host OS App A App B Bins/Libs Bins/Libs 虛擬機 vs Docker 虛擬機 Docker
Server Hypervisor Host OS App A App B Bins/Libs Bins/Libs
Guest OS Guest OS Server Host OS App A App B Bins/Libs Bins/Libs 虛擬機 vs Docker 虛擬機 Docker
Server Hypervisor Host OS App A App B Bins/Libs Bins/Libs
Guest OS Guest OS Server Host OS App A App B Bins/Libs Bins/Libs 虛擬機 vs Docker 虛擬機 Docker Docker Engine
Server Hypervisor Host OS App A App B Bins/Libs Bins/Libs
Guest OS Guest OS Server Docker Engine Host OS App A App B Bins/Libs Bins/Libs 虛擬機 vs Docker 虛擬機 Docker
Linux 容器技術 Process Process Process Process Process Process Process Process
Process Process Process
Linux 容器技術 Process Process Process Process Process Process Process Process
Process Process Process 容器
在 Host 機器上刪掉 Container 裡的特定 Process Host OS
在 Host 機器上刪掉 Container 裡的特定 Process Host OS Docker Container
Container 在 Host 機器上刪掉 Container 裡的特定 Process
Container 在 Host 機器上刪掉 Container 裡的特定 Process
Container 在 Host 機器上刪掉 Container 裡的特定 Process
Container 在 Host 機器上刪掉 Container 裡的特定 Process
Host Container 在 Host 機器上刪掉 Container 裡的特定 Process
Host Container 在 Host 機器上刪掉 Container 裡的特定 Process
Host Container 在 Host 機器上刪掉 Container 裡的特定 Process
Host Container 在 Host 機器上刪掉 Container 裡的特定 Process
Host Container 在 Host 機器上刪掉 Container 裡的特定 Process
Host Container 在 Host 機器上刪掉 Container 裡的特定 Process
Host Container 在 Host 機器上刪掉 Container 裡的特定 Process 55 ->
28760
在 Host 機器上刪掉 Container 裡的特定 Process
Host 在 Host 機器上刪掉 Container 裡的特定 Process 55 -> 28760
Host 在 Host 機器上刪掉 Container 裡的特定 Process
在 Host 機器上刪掉 Container 裡的特定 Process
Container Host 在 Host 機器上刪掉 Container 裡的特定 Process 55 ->
28760
Container Host 在 Host 機器上刪掉 Container 裡的特定 Process 55 ->
28760
虛擬機 vs Docker 虛擬機 Docker
虛擬機 vs Docker 虛擬機 Docker 啟動速度:秒 啟動速度:分鐘
虛擬機 vs Docker 虛擬機 Docker 啟動速度:秒 性能:接近原⽣生 啟動速度:分鐘 性能:較弱
虛擬機 vs Docker 虛擬機 Docker 啟動速度:秒 性能:接近原⽣生 運⾏行行密度:幾千 啟動速度:分鐘 性能:較弱
運⾏行行密度:幾⼗十
虛擬機 vs Docker 虛擬機 Docker 啟動速度:秒 性能:接近原⽣生 運⾏行行密度:幾千 隔離效果:共⽤用 Kernel
啟動速度:分鐘 性能:較弱 運⾏行行密度:幾⼗十 隔離效果:完全隔離
虛擬機 vs Docker 虛擬機 Docker 啟動速度:秒 性能:接近原⽣生 運⾏行行密度:幾千 隔離效果:共⽤用 Kernel
跨平台,圖形介⾯面 啟動速度:分鐘 性能:較弱 運⾏行行密度:幾⼗十 隔離效果:完全隔離 跨平台,圖形介⾯面
Docker 介紹 圖片來來源:https://www.flaticon.com Dockerfile Docker Image Docker Container
Docker 介紹 圖片來來源:https://www.flaticon.com Dockerfile
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY . /app ENV RAILS_ENV production RUN bundle install CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Docker 介紹 圖片來來源:https://www.flaticon.com Dockerfile Docker Image
Docker 介紹 圖片來來源:https://www.flaticon.com Dockerfile Docker Image Docker Container
Docker 介紹 圖片來來源:https://www.flaticon.com Docker Container
Docker 介紹 圖片來來源:https://www.flaticon.com Docker Container Docker Container
Docker 介紹 圖片來來源:https://www.flaticon.com Docker Container Docker Container Docker Container
Docker 介紹 圖片來來源:https://www.flaticon.com Docker Container Docker Container Docker Container Docker
Container
Docker 介紹 圖片來來源:https://www.flaticon.com Docker Container Docker Container Docker Container Docker
Container docker-compose.yml
Docker 介紹 圖片來來源:https://www.flaticon.com Docker Container Docker Container Docker Container Docker
Container docker-compose.yml
Docker 介紹 圖片來來源:https://www.flaticon.com Dockerfile docker-compose.yml
Docker 介紹 圖片來來源:https://www.flaticon.com Dockerfile Docker Image Docker Container
Docker 介紹 圖片來來源:https://www.flaticon.com docker-compose.yml Dockerfile Docker Image Docker Container
圖片來來源:https://www.flaticon.com 用 Docker 部署 Rails 網站到 VPS
用 Docker 部署 Rails 網站到 VPS Local 圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS Local 圖片來來源:https://www.flaticon.com Docker Image
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Image
圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image Docker Image 圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
User Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
User http Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local CloudFlare Docker
Hub User Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local CloudFlare Docker
Hub User http https Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
‧ 建立 Rails 專案,並使用 scaffold 準備動作
‧ 建立 Rails 專案,並使用 scaffold rails new example_app rails
generate scaffold post title:string body:text 準備動作
‧ 建立 Rails 專案,並使用 scaffold ‧ 改成 PostgreSQL rails
new example_app rails generate scaffold post title:string body:text 準備動作
準備動作
‧ 從 config/puma.rb 修改連線的 Port 準備動作
‧ 從 config/puma.rb 修改連線的 Port port ENV.fetch("PORT") { 3000
} 準備動作
‧ 從 config/puma.rb 修改連線的 Port port ENV.fetch("PORT") { 80
} 準備動作
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production RUN gem install bundler RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production RUN gem install bundler RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production RUN gem install bundler RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production RUN gem install bundler RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production RUN gem install bundler RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production RUN gem install bundler RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY . /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
‧ 可以在放 Dockerfile 的目錄產生 Docker Image 囉 Dockerfile docker
build . -t johnsonzhan121/example_app
docker-compose.yml version: '3' services: db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson networks: johnson:
docker-compose.yml version: '3' services: db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson networks: johnson:
docker-compose.yml version: '3' services: db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson networks: johnson:
docker-compose.yml db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumes:
- ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson
docker-compose.yml db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumes:
- ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson
docker-compose.yml db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumes:
- ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson
docker-compose.yml db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumes:
- ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson
docker-compose.yml app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… -
RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson
docker-compose.yml app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… -
RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson
docker-compose.yml app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… -
RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson
Dockerfile FROM ruby:2.4.1 MAINTAINER johnson <
[email protected]
> RUN apt-get update &&
apt-get install -y build-essential libpq-dev nodejs vim postgis RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock ENV RAILS_ENV production ENV BUNDLER_VERSION 2.0.1 RUN gem install bundler -v 2.0.1 RUN bundle install COPY . /app CMD rake db:migrate assets:precompile && puma -C config/puma.rb
docker-compose.yml app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… -
RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson
docker-compose.yml app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… -
RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson
docker-compose.yml app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… -
RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson
docker-compose.yml app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… -
RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson
docker-compose.yml version: '3' services: db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson networks: johnson:
‧ 可以在放 docker-compose.yml 的目錄執行指令囉 docker-compose.yml docker-compose up
用 Docker 部署 Rails 網站到 VPS Local docker-compose.yml Docker Image
圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
DigitalOcean
DigitalOcean
Docker Hub
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com ‧ 本地打包 Docker Image ‧ 本地 Docker Image 上傳 Docker Hub ‧ VPS 從 Docker Hub 下載 Docker Image ‧ 本地上傳 docker-compose.yml 到 VPS ‧ 在 VPS 啟動 docker-compose.yml
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com ‧ 本地打包 Docker Image ‧ 本地 Docker Image 上傳 Docker Hub ‧ VPS 從 Docker Hub 下載 Docker Image ‧ 本地上傳 docker-compose.yml 到 VPS ‧ 在 VPS 啟動 docker-compose.yml
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com ‧ 本地打包 Docker Image ‧ 本地 Docker Image 上傳 Docker Hub ‧ VPS 從 Docker Hub 下載 Docker Image ‧ 本地上傳 docker-compose.yml 到 VPS ‧ 在 VPS 啟動 docker-compose.yml
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com ‧ 本地打包 Docker Image ‧ 本地 Docker Image 上傳 Docker Hub ‧ VPS 從 Docker Hub 下載 Docker Image ‧ 本地上傳 docker-compose.yml 到 VPS ‧ 在 VPS 啟動 docker-compose.yml
用 Docker 部署 Rails 網站到 VPS VPS Local Docker Hub
Docker Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com ‧ 本地打包 Docker Image ‧ 本地 Docker Image 上傳 Docker Hub ‧ VPS 從 Docker Hub 下載 Docker Image ‧ 本地上傳 docker-compose.yml 到 VPS ‧ 在 VPS 啟動 docker-compose.yml
完成繁瑣的五步驟 #!/usr/bin/env ruby p '本地打包 Docker Image' `docker build .
-t johnsonzhan121/example_app` p '本地 Docker Image 上傳 Docker Hub' `docker push johnsonzhan121/example_app` p '本地上傳 docker-compose.yml 到 VPS' `scp docker-compose.yml
[email protected]
:/home/example_app` p 'VPS 從 Docker Hub 下載 Docker Image' `ssh
[email protected]
'docker pull johnsonzhan121/example_app'` p '在 VPS 啟動 docker-compose.yml' `ssh
[email protected]
'cd /home/example_app && docker-compose up'`
完成繁瑣的五步驟 #!/usr/bin/env ruby p '本地打包 Docker Image' `docker build .
-t johnsonzhan121/example_app` p '本地 Docker Image 上傳 Docker Hub' `docker push johnsonzhan121/example_app` p '本地上傳 docker-compose.yml 到 VPS' `scp docker-compose.yml
[email protected]
:/home/example_app` p 'VPS 從 Docker Hub 下載 Docker Image' `ssh
[email protected]
'docker pull johnsonzhan121/example_app'` p '在 VPS 啟動 docker-compose.yml' `ssh
[email protected]
'cd /home/example_app && docker-compose up'`
完成繁瑣的五步驟
完成繁瑣的五步驟
完成繁瑣的五步驟
CloudFlare VPS Local Docker Hub User http Docker Image docker-compose.yml
Docker Image 圖片來來源:https://www.flaticon.com
CloudFlare VPS Local CloudFlare Docker Hub User Docker Image docker-compose.yml
Docker Image 圖片來來源:https://www.flaticon.com
CloudFlare VPS Local CloudFlare Docker Hub User http https Docker
Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
CloudFlare
CloudFlare
CloudFlare
CloudFlare 這邊是⽤ https://my.freenom.com 申請域名的
CloudFlare
CloudFlare VPS CloudFlare User http https 圖片來來源:https://www.flaticon.com
大功告成
大功告成 VPS Local CloudFlare Docker Hub User http https Docker
Image docker-compose.yml Docker Image 圖片來來源:https://www.flaticon.com
還沒結束
目前架構 圖片來來源:https://www.flaticon.com Rails Postgres docker-compose.yml
目前架構 圖片來來源:https://www.flaticon.com Rails Postgres
目前架構 圖片來來源:https://www.flaticon.com Rails Postgres CloudFlare User http https
Nginx 圖片來來源:https://www.flaticon.com Rails CloudFlare User http https Postgres
Nginx 圖片來來源:https://www.flaticon.com Nginx Rails CloudFlare User http https Postgres
Nginx 圖片來來源:https://www.flaticon.com Rails Postgres Nginx docker-compose.yml
準備動作 ‧ 需要客製化的 Nginx Image ‧ 新增 docker/nginx/Dockerfile ‧ 新增
docker/nginx/default.conf
準備動作 ‧ 需要客製化的 Nginx Image ‧ 新增 docker/nginx/Dockerfile ‧ 新增
docker/nginx/default.conf
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log
main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } /etc/nginx/conf.d/default.conf
default.conf server { listen 80; server_name dockerapp.ga; location / {
proxy_pass http://unix:/app/tmp/sockets/puma.sock; proxy_set_header X-Forwarded-Host dockerapp.ga; } }
default.conf server { listen 80; server_name dockerapp.ga; location / {
proxy_pass http://unix:/app/tmp/sockets/puma.sock; proxy_set_header X-Forwarded-Host dockerapp.ga; } }
default.conf server { listen 80; server_name dockerapp.ga; location / {
proxy_pass http://unix:/app/tmp/sockets/puma.sock; proxy_set_header X-Forwarded-Host dockerapp.ga; } }
default.conf server { listen 80; server_name dockerapp.ga; location / {
proxy_pass http://unix:/app/tmp/sockets/puma.sock; proxy_set_header X-Forwarded-Host dockerapp.ga; } }
default.conf server { listen 80; server_name dockerapp.ga; location / {
proxy_pass http://unix:/app/tmp/sockets/puma.sock; proxy_set_header X-Forwarded-Host dockerapp.ga; } }
default.conf ActionController::InvalidAuthenticityToken
default.conf server { listen 80; server_name dockerapp.ga; location / {
proxy_pass http://unix:/app/tmp/sockets/puma.sock; proxy_set_header X-Forwarded-Host dockerapp.ga; } }
Nginx 的 Dockerfile FROM nginx COPY default.conf /etc/nginx/conf.d/default.conf
Nginx 的 Dockerfile FROM nginx COPY default.conf /etc/nginx/conf.d/default.conf
‧ 從 config/puma.rb 修改連線的 Port port ENV.fetch("PORT") { 80
} 準備動作
‧ 從 config/puma.rb 修改連線的 Port #port ENV.fetch("PORT") { 80
} bind "unix:///app/tmp/sockets/puma.sock" 準備動作
‧ 從 config/puma.rb 修改連線的 Port #port ENV.fetch("PORT") { 80
} bind "unix:///app/tmp/sockets/puma.sock" 準備動作 server { listen 80; server_name dockerapp.ga; location / { proxy_pass http://unix:/app/tmp/sockets/puma.sock; proxy_set_header X-Forwarded-Host dockerapp.ga; } }
更新 docker-compose.yml
更新 docker-compose.yml version: '3' services: db: image: postgres:9.6 environment: -
"POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson networks: johnson:
更新 docker-compose.yml version: '3' services: db: image: postgres:9.6 environment: -
"POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson networks: johnson:
更新 docker-compose.yml version: '3' services: db: image: postgres:9.6 environment: -
"POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true restart: always depends_on: - db ports: - "80:80" networks: - johnson networks: johnson:
nginx: image: johnsonzhan121/example_nginx:latest ports: - "80:80" volumes: - /tmp/sockets:/app/tmp/sockets depends_on:
- app networks: - johnson 更新 docker-compose.yml
app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true
restart: always depends_on: - db ports: - "80:80" networks: - johnson 更新 docker-compose.yml
app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true
restart: always depends_on: - db ports: - "80:80" networks: - johnson 更新 docker-compose.yml
app: build: . environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4dcf3039eccd59cf787cfb9… - RAILS_SERVE_STATIC_FILES=true
restart: always depends_on: - db ports: - "80:80" volumes: - /tmp/sockets:/app/tmp/sockets networks: - johnson 更新 docker-compose.yml
app: image: johnsonzhan121/example_app:latest environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4df56c3f41d8dc270ee48f5… - RAILS_SERVE_STATIC_FILES=true
restart: always volumes: - /tmp/sockets:/app/tmp/sockets depends_on: - db networks: - johnson nginx: image: johnsonzhan121/example_nginx:latest ports: - "80:80" volumes: - /tmp/sockets:/app/tmp/sockets depends_on: - app networks: - johnson 更新 docker-compose.yml
app: image: johnsonzhan121/example_app:latest environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4df56c3f41d8dc270ee48f5… - RAILS_SERVE_STATIC_FILES=true
restart: always volumes: - /tmp/sockets:/app/tmp/sockets depends_on: - db networks: - johnson nginx: image: johnsonzhan121/example_nginx:latest ports: - "80:80" volumes: - /tmp/sockets:/app/tmp/sockets depends_on: - app networks: - johnson 更新 docker-compose.yml
version: '3' services: db: image: postgres:9.6 environment: - "POSTGRES_USER=postgres" -
"POSTGRES_PASSWORD=postgres" volumes: - ./pg-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - johnson app: image: johnsonzhan121/example_app:latest environment: - DATABASE_URL=postgres://postgres:postgres@db/postgres - SECRET_KEY_BASE=8527f4cd4df56c3f41d8dc… - RAILS_SERVE_STATIC_FILES=true restart: always volumes: - /tmp/sockets:/app/tmp/sockets depends_on: - db networks: - johnson nginx: image: johnsonzhan121/example_nginx:latest ports: - "80:80" volumes: - /tmp/sockets:/app/tmp/sockets depends_on: - app networks: - johnson networks: johnson: 更新 docker-compose.yml
更新自動化程式
#!/usr/bin/env ruby p '本地打包 Docker Image' `docker build . -t
johnsonzhan121/example_app` p '本地 Docker Image 上傳 Docker Hub' `docker push johnsonzhan121/example_app` p '本地上傳 docker-compose.yml 到 VPS' `scp docker-compose.yml
[email protected]
:/home/example_app` p 'VPS 從 Docker Hub 下載 Docker Image' `ssh
[email protected]
'docker pull johnsonzhan121/example_app'` p '在 VPS 啟動 docker-compose.yml' `ssh
[email protected]
'cd /home/example_app && docker-compose up'` 更新自動化程式
#!/usr/bin/env ruby p '本地打包 Docker Image' `docker build . -t
johnsonzhan121/example_app` `docker build docker/nginx/. -t johnsonzhan121/example_nginx` p '本地 Docker Image 上傳 Docker Hub' `docker push johnsonzhan121/example_app` `docker push johnsonzhan121/example_nginx` p '本地上傳 docker-compose.yml 到 VPS' `scp docker-compose.yml
[email protected]
:/home/example_app` p 'VPS 從 Docker Hub 下載 Docker Image' `ssh
[email protected]
'docker pull johnsonzhan121/example_app’` `ssh
[email protected]
'docker pull johnsonzhan121/example_nginx'` p '在 VPS 啟動 docker-compose.yml' `ssh
[email protected]
'cd /home/example_app && docker-compose up'` 更新自動化程式
#!/usr/bin/env ruby p '本地打包 Docker Image' `docker build . -t
johnsonzhan121/example_app` `docker build docker/nginx/. -t johnsonzhan121/example_nginx` p '本地 Docker Image 上傳 Docker Hub' `docker push johnsonzhan121/example_app` `docker push johnsonzhan121/example_nginx` p '本地上傳 docker-compose.yml 到 VPS' `scp docker-compose.yml
[email protected]
:/home/example_app` p 'VPS 從 Docker Hub 下載 Docker Image' `ssh
[email protected]
'docker pull johnsonzhan121/example_app’` `ssh
[email protected]
'docker pull johnsonzhan121/example_nginx'` p '在 VPS 啟動 docker-compose.yml' `ssh
[email protected]
'cd /home/example_app && docker-compose up'` 更新自動化程式
大功告成
補充
用 Docker 部署 Rails,原來是這樣!? https://5xruby.tw/posts/deploying-your-docker-rails-app/
bankai-docker https://github.com/5xRuby/bankai-docker
自動產生 Docker,一鍵部署不是夢!? https://5xruby.tw/posts/bankai-docker/
五倍品質.五倍專業 期 待 與 您 的 合 作 T h
a n k y o u .
None