ふと、docker-composeを使ってNuxtのアプリケーションを作ろうと思ったから書いておこう。やるのはdocker-compose up
でNuxtアプリケーションを立ち上げるところまで。前のプロジェクトでKubernetes使ってNuxtの開発していたからKubernetes使ったバージョンもやりたいな。
Nuxtアプリケーションのディレクトリ構成
ディレクトリ構成はこうしよう。
. ├── Dockerfile ├── docker-compose.yml └── src
src配下にNuxtのファイルが入るイメージ。srcディレクトリを置いているのは、単純に破棄しやすいから。トップのディレクトリ配下にNuxtアプリケーションのコードがあると、消したい時なんかにちょっと不便。だからdocker-composeのvolumesではsrcを指定するよ。
Dockerfileを作る
まずはDockerfile。これだけ。
# イメージ指定 FROM node:12.13.0-alpine EXPOSE 3000 ENV HOST 0.0.0.0 # コマンド実行 RUN apk update && \ apk add git && \ npm install -g @vue/cli nuxt create-nuxt-app
docker-compose.ymlを作る
docker-comppose.ymlもこれだけ。
version: '3' services: nuxt-app: # Dockerfileの場所 build: . working_dir: /src command: yarn run dev # ホストOSとコンテナ内でソースコードを共有する volumes: - ./src:/src # コンテナ内部の3000を外部から5000でアクセスする ports: - 5000:3000
docker-composeでcommandを指定するのかDockerfileでCMDを指定するのかっていうのをちょっと迷うけど、docker-compose upを打った時に実行したいからdocker-compose.ymlにcommandを記述している。
Nuxtアプリケーションを作成する
nuxtアプリケーションの作成をcreate-nuxt-app
コマンドで作成する。作成したら立ち上げよう。
$ docker-compose run --rm nuxt-app npx create-nuxt-app
どんな設定にするか色々聞かれるから、答えてあげよう。この時点でTypeScriptを選択できるようになったんだね。TypeScriptでやりたいからTypeScriptを選択しておいた。runtime
も以前TypeScriptを使った時には@nuxt/typescript-runtime
を使ったから、それを選択。
create-nuxt-app v2.15.0 ✨ Generating Nuxt.js project in . ? Project name nuxt-app ? Project description My transcendent Nuxt.js project ? Author name me ? Choose programming language TypeScript ? Choose the package manager Yarn ? Choose UI framework None ? Choose custom server framework None (Recommended) ? Choose the runtime for TypeScript @nuxt/typescript-runtime ? Choose Nuxt.js modules (Press <space> to select, <a> to toggle all, <i> to invert selection) ? Choose linting tools (Press <space> to select, <a> to toggle all, <i > to invert selection) ? Choose test framework None ? Choose rendering mode Universal (SSR) ? Choose development tools (Press <space> to select, <a> to toggle all , <i> to invert selection)
全て回答するとアプリケーションが作られるぞ。TypeScript選択するとnuxt.config.json
にbuildModule追加してくれたり、tsconfig.json
作ってくれるのか。以前 JavascritpのものをTypeScriptに途中からした事があるけど、最初からやるとこんな楽なのか・・・
アプリケーションが作られたらsrc
配下に色々ファイルが作られる。作られたら起動してみよう。
$ docker-compose up
docker-compose.ymlのportsで- 5000:3000
と指定しているからhttp://localhost:5000/
でアクセス。ビルドが終わったら、nuxtの画面が表示されるはず