Rails On Docker의 AWS 배포가 완료되었기 때문에 컨텐츠를 정리합니다.

8280 단어 DockerRubyRails

근황 보고


드디어 도착!!!!
Docker 컨테이너에 rails를 배치했습니다.약 3주 넘게 걸렸어요!
취임 활동에 관해서는 원틀리는 여전하지만 그린의 반응이 좋아진 것 같다.일관부터 회복될 조짐인가?최근 초복리 대우가 좋은 기업의 면접 기회를 얻었지만 기업 연구가 부족해 안 된다.2일 정도 떨어졌지만 면접 대책에 큰 성장을 가져온 경험이라고 생각하기 때문에 그보다 더 적합한 기업을 잡으려고 노력할 것입니다.

오늘의 제목.


rails를 탑재한 docker 비망록 만들기

배포 전 참고 자료


☆배치 참고☆
학습용 로컬 환경 구축
이 글은 컨테이너 제작에 특별한 참고 역할을 하였다
컨테이너를 만들어 부숴버려서 정리가 많이 됐어요.

환경


ruby 2.5.1
rails 5.2.3
Mac OS
docker for mac

대략적인 작성 프로세스


・rails 제작 조합에 dockerfile 등 각종 내용을 탑재하였습니다←
・build 로컬 환경에서 실행 여부 확인
Github에 올리기
・ EC2까지 당김
배치에 관해서는 ☆ 이상의 기사를 쓰고 싶지 않기 때문에 사랑을 끊는다

디렉토리 구성


$ tree 

├── app-...省略
├── Dockerfile
├── containers(このフォルダは別になくても問題なし) --- nginx
│                                     ├── Dockerfile
│                                     └── nginx.conf
├── Gemfile
├── Gemfile.lock
├── docker-compose.yml
・
省略

teccamp 같은 Docker 초보자를 깨물어 설명하면 프로그램이 실행되는 환경을 모두 상자에 정비하면 (이미지의 파란색 테두리) 생산 환경과 로컬 환경의 구조를 일일이 바꾸지 않아도 되는 거죠?이런 느낌.이후 개인용 컴퓨터마다 서로 다른 버전과 OS를 신경 쓰지 않고 Docker가 갖추고 있는 환경을 공유할 수 있는 것도 장점이다.
용기는 Rails 용기와 Nginx 용기를 시작하고 Nginx의localhost에서 받아들이며puma와 통신하여 rails를 연결합니다.

Dockerfile


용기의 설계도.여기에 용기에 무엇을 넣고, 어떤 파일을 읽고, 어떤 처리를 하는지 기입하세요.모든 용기에dockerfile이 있습니다.이번에 내가 배치한 물건은 두 개의dockerfile가 있기 때문에 두 개의 용기를 고려할 수 있다.컨테이너는 Dockerfile을 기반으로 구축됩니다.
빌딩이 기억에 남아요. 테크 캠핑에서는 안 들리는 단어만 나와서 처음에는 구조가 시원했어요.
 .파일 컨테이너
FROM ruby:2.5.1 

# リポジトリを更新し依存モジュールをインストール
RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       nodejs \
                       vim ←コンテナ内でvimを用いる際に必要
 ※rails最新版ではwebpackerが必要なので別途インストールする必要がある。
 youtubeで「俺はdockerに勝った」という動画があるので参考にしてください。

# ルート直下にwebappという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ)
RUN mkdir /webapp ←ぶっちゃけなくても動く。webappは任意の名前で
WORKDIR /webapp

# ホストのGemfileをコンテナにコピー
ADD Gemfile /webapp/Gemfile
ADD Gemfile.lock /webapp/Gemfile.lock 
※アプリケーションのGemfile.lockの中身を空にしないとエラーになる?

# bundle installの実行
RUN bundle install

# ホストのアプリケーションディレクトリ内をすべてコンテナにコピー
ADD . /webapp
 .문서 파일(nginx 용기)
FROM nginx:1.15.8

# インクルード用のディレクトリ内を削除(多分かぶるの防いでる)
RUN rm -f /etc/nginx/conf.d/*

# Nginxの設定ファイルをコンテナにコピー
ADD nginx.conf /etc/nginx/conf.d/nginx.conf

# ビルド完了後にNginxを起動
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
FROM
dockerhub에서 이미지를 가져옵니다.dockerhub의 물건이라면 무엇이든pull할 수 있습니다.최초의 컨테이너는 방금 산 컴퓨터처럼 아무것도 설치되지 않았기 때문에 루비를 이동하기 위해 정비를 진행했다.버전이 지정되지 않으면 최신 버전이 설치됩니다.
RUN
명령을 집행하다.용기를 구축할 때 실행되는 작업입니다.터미널 명령의 느낌으로 처리하다.
COPY
호스트 (이곳은 MAC) 디렉토리의 파일을 복사합니다.
ADD
디렉토리의 파일을 복사합니다.
· 복사와 다른 점은 원격 파일 (ADD) 을 복사할 수 있느냐, 복사할 수 없느냐 (COPY) 를 압축할 수 있느냐 아니면 해제되지 않느냐(ADD) 이다.
CMD
컨테이너 구축 후 집행 시 처리.터미널 명령의 느낌으로 처리하다.
· RUN과 다른 점은 실행의 시기에 있다.build에서 업데이트를 할 것인지, 용기가 시작될 때 명령을 실행할 것인지.

.conf 파일


nginx 자체의 설정 파일입니다.이nginx가 없으면 시작할 수 없습니다.내용만 좋으면 돼.conf도 default입니다.conf도 실행에 방해가 되지 않지만, 모두가 이해할 수 있는 명칭이 가장 좋다
nginx.conf
# プロキシ先の指定
# Nginxが受け取ったリクエストをバックエンドのpumaに送信
upstream webapp {
  # ソケット通信したいのでpuma.sockを指定
  server unix:///webapp/tmp/sockets/puma.sock;
}

server {
  listen 80;
  # ドメインもしくはIPを指定
  server_name localhost;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  # rootの指定。これないとアプリケーション接続した際にパスが迷子になる。
  root /webapp/public;

  client_max_body_size 100m;
  error_page 404             /404.html;
  error_page 505 502 503 504 /500.html;
  try_files  $uri/index.html $uri @webapp;
  keepalive_timeout 5;

  # リバースプロキシ関連の設定
  location @webapp {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://webapp;
  }
}
서버 {}에서 요청한 수신 방법을 설정하고 모두 통과한 후 upstream에 들어가 플러그인 통신을 합니다.컨테이너를 가동할 때 이해하는 곳이 아니니 외우지 마세요.하지만 목록의 이름을 잘 확인해야 한다.대리 관련 공부 중입니다.

docker-compose.yml


여러 컨테이너에서 실행되는 파일을 관리합니다.한 용기에 docker container run...이렇게 실행하지만docker-compose up의 파일에 있는 모든 용기를 시작할 수 있습니다.
version: '3'
services:
  app:
    build:
      context: .
    env_file:
      - ./environments/db.env
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/webapp
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
      - log-data:/webapp/log
    depends_on:
      - db
  db:
    image: mysql:5.7
    env_file:
      - ./environments/db.env
    volumes:
      - db-data:/var/lib/mysql
  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/webapp/public
      - tmp-data:/webapp/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

시작할 때 참조하는 파일, 명령 등을 기술합니다.
depends_on
컨테이너의 종속성을 나타냅니다.위의 경우 DB⇨app⇨web(nginx)의 순서에 따라 시작합니다.
volume
용기 외부의 데이터 저장 공간.volume가 없어도 컨테이너는 이동합니다.컨테이너를 폐기하면 컨테이너 안의 정보가 사라지고 옆면에 같은 정보를 넣어도 시간이 걸린다.컨테이너는 몇 번 깨졌지만 남기고 싶은 데이터가 있는 상황에서 사용된다.이미지는 외장 하드 드라이브
마운트
docker 이외의 데이터는 docker 내에서 사용할 수 있습니다.
env_file
환경 변수로서의 암호 읽기 포트입니다.서류에 직접 쓸 수도 있고, 위처럼 서류에 쓸 수도 있다.후자의 안전성이 더 좋다(가능성)
db.env (예)
MYSQL_ROOT_PASSWORD=aaaaa
MYSQL_USER=aaaaa
MYSQL_PASSWORD=aaaaa

명령

#ビルドする
docker-compose build
#起動する
docker-compose up
#裏で起動する
docker-compose up -d
#コンテナ止める
docker-compose stop
#コンテナ止めて破棄
docker-compose down
#コンテナ止めて破棄&volume削除
docker-compose down --volume
#コンテナの中確認
docker ps
docker images
#image削除
docker image prune
#動いていないもの全て削除
docker system prune

#docker内でrailsのアクション
docker-compose run [アプリケーション名] rails db:createとか
⇨docker-compose内のアプリケーションへの私事です。db:createして

끝날 때


야, 설치하는 데 정말 많은 시간이 걸렸어.특히 Nginx는 프록시와 서버가 시원해서 힘들어요.

좋은 웹페이지 즐겨찾기