mac로 Rails api와 Nuxt를 만드는 Docker 환경
개시하다
WEB 서비스 공부를 시작하고 싶은데 개발 환경을 잘 몰라요.
이런 일로 괴로워하는 경우가 많기 때문에 당장 간단한 개발 환경을 재현할 수 있도록 방법을 미리 남긴다.
※ 본 기사는 각 서류 내 상세 사용 방법은 밝히지 않습니다.
골대
준비물
docer.app
Docker Desktop for Mac에 대해서는 https://www.docker.com/products/docker-desktop에서 다운로드할 수 있을 것 같습니다.
편집자
Visual Studio Code 등 원하는 편집을 준비하세요.
몇 개의 업무 문서
우선 개발 환경의 대본 목록을 준비한다.(이하 루트라고 합니다.)
예:nuxtdemo 디렉토리
※ "★"은 적절한 목록 이름을 사용해도 됩니다.나의 상황은'works'다.
/Users/ユーザー名/★/nuxtdemo
nuxtdemo 디렉터리의 구성은 다음과 같다.각 파일의 내용은 잠시 후에 기재될 것이다.
※ []은api목록,front목록을 가리킵니다.
docker-compose.yml
.env
[api]
└Dockerfile
└Gemfile
└Gemfile.lock
[front]
└Dockerfile
각 파일의 컨텐트 정보
docker-compose.yml
version: '3.8'
services:
db:
image: postgres:12.3-alpine
environment:
TZ: UTC
PGTZ: UTC
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
volumes:
- ./api/tmp/db:/var/lib/postgresql/data
api:
stdin_open: true
tty: true
build:
context: ./api
args:
WORKDIR: $WORKDIR
command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
environment:
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
API_DOMAIN: "localhost:$FRONT_PORT"
APP_URL: "http://localhost:$API_PORT"
volumes:
- ./api:/$WORKDIR
depends_on:
- db
ports:
- "$API_PORT:$CONTAINER_PORT"
front:
build:
context: ./front
args:
WORKDIR: $WORKDIR
CONTAINER_PORT: $CONTAINER_PORT
API_URL: "http://api:$API_PORT"
API_URL_BROWSER: "http://localhost:$API_PORT"
command: yarn run dev
volumes:
- ./front:/$WORKDIR
depends_on:
- api
ports:
- "$FRONT_PORT:$CONTAINER_PORT"
.env# commons
WORKDIR=app
CONTAINER_PORT=3000
API_PORT=3000
FRONT_PORT=8080
# db
POSTGRES_PASSWORD=password
api/DockerfileFROM ruby:2.7.1-alpine
ARG WORKDIR
ENV RUNTIME_PACKAGES="linux-headers libxml2-dev make gcc libc-dev nodejs tzdata postgresql-dev postgresql git imagemagick" \
DEV_PACKAGES="build-base curl-dev" \
HOME=/${WORKDIR} \
LANG=C.UTF-8 \
TZ=Asia/Tokyo
WORKDIR ${HOME}
COPY Gemfile* ./
RUN apk update && \
apk upgrade && \
apk add --no-cache ${RUNTIME_PACKAGES} && \
apk add --virtual build-dependencies --no-cache ${DEV_PACKAGES} && \
bundle install -j4 && \
apk del build-dependencies
COPY . .
api/Gemfilesource 'https://rubygems.org'
gem 'rails', '~> 6.0.0'
front/DockerfileFROM node:14.16.1-alpine
ARG WORKDIR
ARG CONTAINER_PORT
ARG API_URL
ARG API_URL_BROWSER
ENV HOME=/${WORKDIR} \
LANG=C.UTF-8 \
TZ=Asia/Tokyo \
HOST=0.0.0.0 \
API_URL=${API_URL} \
API_URL_BROWSER=${API_URL_BROWSER}
WORKDIR ${HOME}
# COPY package*.json ./
# RUN yarn install
# COPY . ./
# RUN yarn run build
EXPOSE ${CONTAINER_PORT}
Rails API 환경 만들기
서류가 준비되면 railsapi 앱으로 제작한다.
대상http://localhost:3000/의 URL에 표시된 화면은 다음과 같습니다.
여기서부터 터미널에 명령을 입력하세요.
이를 위해 먼저 터미널에서 방금 만든 루트로 이동합니다.
root $ cd /Users/ユーザー名/★/nuxtdemo
이동 후 docker가 작동하는지 확인하기 위해buidl 명령을 실행합니다.root $ docker-compose build
그리고build 명령이 올바른지 확인하기 위해docker imaages 명령을 실행합니다.
결과는 다음과 같이 REPOSITORY 등을 표시하면 됩니다.
root $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nuxtdemo_front latest 9043ea43445d 21 minutes ago 116MB
nuxtdemo_api latest 9cd48bec61b8 21 minutes ago 658MB
확인 후 Rails 애플리케이션을 제작합니다.root $ docker-compose run --rm api rails new . -f -B -d postgresql --api
순조롭게 제작된 상황에서 rails와 DB를 연합하기 위해 아래 파일을 업데이트합니다docker 환경이 업데이트되면 DB를 만드는 명령을 실행합니다.
api/config/database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
host: db # 追加
username: postgres # 追加
password: <%= ENV["POSTGRES_PASSWORD"] %> # 追加
root $ docker-compose build
root $ docker-compose run --rm api rails db:create
이 작업을 수행하면 다음과 같이 표시됩니다.root $ docker-compose run --rm api rails db:create
Creating nuxtdemo_api_run ... done
Created database 'app_development'
Created database 'app_test'
DB를 만든 후 docker 환경을 시작합니다.root $ docker-compose up api
이렇게 하면 다음과 같이 나타날 것이다.nuxtdemo_db_1 is up-to-date
Creating nuxtdemo_api_1 ... done
Attaching to nuxtdemo_api_1
api_1 | => Booting Puma
api_1 | => Rails 6.0.4.1 application starting in development
api_1 | => Run `rails server --help` for more startup options
api_1 | Puma starting in single mode...
api_1 | * Version 4.3.10 (ruby 2.7.1-p83), codename: Mysterious Traveller
api_1 | * Min threads: 5, max threads: 5
api_1 | * Environment: development
api_1 | * Listening on tcp://0.0.0.0:3000
api_1 | Use Ctrl-C to stop
이러한 디스플레이를 확인한 상태에서 방문http://localhost:3000/을 시도합니다.이렇게 하면 아래 화면을 표시할 수 있다.
이렇게 되면 Rails API 환경 제작이 완료됩니다.
환경을 만들다
Nuxt 환경을 계속 만듭니다.
대상http://localhost:8080/의 URL에 표시된 화면은 다음과 같습니다.
터미널에서 다음 명령을 실행합니다.
root $ docker-compose run --rm front yarn create nuxt-app app
명령을 처리하는 동안'환경 방법'을 선택할 수 있는 상태입니다.하지만 아무 생각 없이 리턴 버튼으로 쳐도 상관없다.
그래서 이번 결정은 다음과 같다.
create-nuxt-app v3.7.1
✨ Generating Nuxt.js project in app
? Project name: app
? Programming language: JavaScript
? Package manager: Yarn
? UI framework: None
? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Linting tools: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Server (Node.js hosting)
? Development tools: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? What is your GitHub username?
? Version control system: Git
방금 명령이 실행되었는지 확인한 후 생성된 파일을 이동합니다.root $ mv front/app/{*,.*} front
root $ rmdir front/app
파일 이동이 끝나면front/Docker file을 업데이트합니다.(처음 "#"을 삭제하십시오.)
front/Dockerfile
COPY package*.json ./
RUN yarn install
COPY . ./
RUN yarn run build
Docker file을 다시 썼기 때문에build을 다시 썼습니다.root $ docker-compose build
이후 up으로 시작하여 방문http://localhost:3000/과http://localhost:8080/를 시도합니다.root $ docker-compose up
http://localhost:8080/의 디스플레이는 다음과 같이 Nuxt 환경의 준비가 완료되었습니다.수고하셨습니다!
[기타] 공통 Docker 명령
# dockerのイメージを作成する。
root $ docker-compose build
# docker内のnuxt yarn install
root $ docker-compose run --rm front yarn install
# docker内のrails bundle install
root $ docker-compose run --rm api bundle install
# docker環境の立ち上げ
root $ docker-compose up
# dockerのコンテナの停止・削除を一度に行う
root $ docker-compose down
# Dockerイメージを確認する
root $ docker images
# Dockerイメージのうち、noneタグのイメージを削除
root $ docker rmi $(docker images -f 'dangling=true' -q)
[기타] 참고 자료
Reference
이 문제에 관하여(mac로 Rails api와 Nuxt를 만드는 Docker 환경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kkosuke/articles/c3f129195a07ad텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)