こんにちはフロントエンドエンジニアのまさにょんです!
今回は、Vue(2系)とNuxt.js・TypeScriptの環境をDockerで構築する方法について解説していきます。
目次
- 1 Vue(2系)とNuxt.js・TypeScriptの環境をDockerで構築する方法
- 1.1 今回作成するNuxt.jsプロジェクトのディレクトリ構造
- 1.2 プロジェクト・ディレクトリの作成と移動
- 1.3 Nuxt.jsをinstallするディレクトリを作成する
- 1.4 Dockerfileを作成する
- 1.5 docker-compose.yml を作成する
- 1.6 docker-composeでDockerfileからimageをビルドする
- 1.7 Nuxt.js のAppを作成する
- 1.8 Docker コンテナを実行する
- 1.9 Nuxt.js のAppを起動する
- 1.10 最終的な動作確認
- 1.11 Nuxt.js (v2.16.3) のpackage.json を確認する
- 1.12 Docker Composeで建てた Docker Container を停止 & 削除する
- 2 JavaScript書籍 Ver. 中級-上級者向け
- 3 JavaScript書籍 Ver. 初級者向け
- 4 プログラミング学習・エンジニア転職関連の情報
- 5 Twitterやってます!Follow Me!
- 6 参考・引用
- 7 最近の投稿
Vue(2系)とNuxt.js・TypeScriptの環境をDockerで構築する方法
プロジェクトで、Vue(2系)とNuxt.jsを使用しているのですが、そのTest環境がほしかったので、DockerでVue(2系)とNuxt.js・TypeScriptの環境を構築してみます。
今回作成するNuxt.jsプロジェクトのディレクトリ構造
今回作成するNuxt.jsプロジェクトのディレクトリ構造をtree -L 2
で、2階層まで確認すると次のとおりです。
nuxt_test % tree -L 2
.
├── Dockerfile
├── app
│ ├── README.md
│ ├── assets
│ ├── components
│ ├── jest.config.js
│ ├── layouts
│ ├── node_modules
│ ├── nuxt.config.js
│ ├── package.json
│ ├── pages
│ ├── static
│ ├── store
│ ├── test
│ ├── tsconfig.json
│ └── yarn.lock
└── docker-compose.yml
10 directories, 8 files
プロジェクト・ディレクトリの作成と移動
まずは、次のコマンドでプロジェクト・ディレクトリの作成と移動をします。
プロジェクト・ディレクトリ名は、自由に決めてください。
mkdir プロジェクト名 && cd プロジェクト名
Nuxt.jsをinstallするディレクトリを作成する
Nuxt.jsでは、空のディレクトリにNuxtプロジェクトをinstallする必要があるため、app
というディレクトリを作成しておきます。
空じゃないと、Nuxt.jsプロジェクトをSet Upする際に、
Could not create project in src because the directory is not empty.
と注意されます。
mkdir app
Dockerfileを作成する
Dockerfile
は、Dockerイメージをビルドするための設定ファイルです。
次のコマンドで、Dockerfile
を作成して開きます。
touch Dockerfile && open Dockerfile
openしたDockerfile
の内容は、次の内容をコピペしてください。
# Base_Image
FROM node:lts
# 3000番のPortを解放
EXPOSE 3000
# HostマシンからのAccessを受け付ける
ENV HOST 0.0.0.0
RUN apt-get update && \
apt-get upgrade -y && \
yarn global add @vue/cli && \
yarn global add @vue/cli-init && \
yarn global add nuxt create-nuxt-app
# Docker Cotainer上の作業ディレクトリ
WORKDIR /usr/src/app
docker-compose.yml を作成する
docker-compose.yml
は、Docker Composeを使用して、複数のDockerコンテナを定義し、それらを構成・連携するための設定ファイルです。
次のコマンドで、docker-compose.yml
を作成して開きます。
touch docker-compose.yml && open docker-compose.yml
openしたdocker-compose.yml
の内容は、次の内容をコピペしてください。
YAMLファイルは、JSONと違いコメントができるので、コメントを細かく記しています。
# versionは、3系
version: "3"
# Serviceを設定する
services:
# Service名は、自由に決めていい
frontend:
# DockerfileまでのPath
build: .
# ホストマシン:コンテナ => ファイルを共有するための設定
volumes:
- ./app:/usr/src/app
# ホストマシンPort番号:コンテナのPost番号
ports:
- 3001:3000
# CLI画面の操作をできるようにする
tty: true
今回のdocker-compose.yml
の内容を解説します。
version
は、Docker Composeのバージョンを指定しています。services
は、構築するサービスを動かすための各要素をネストさせて定義します。- 最初にサービス名を定義して、続けて設定内容を記述していきます。
build
コマンドは、Dockerfileを使用してイメージをビルドするためのPath設定を行います。.
は、Dockerfileがあるディレクトリ(Path)を指定しています。- 今回の場合、Docker Composeは現在のディレクトリのDockerfileを使用してイメージを構築します。
volumes
コマンドは、ホストマシンとDockerコンテナの間でファイルを共有するために使用されます。- ホストマシンの
./app
ディレクトリを、Dockerコンテナの/usr/src/app
ディレクトリにマウントしています。
- ホストマシンの
ports
コマンドは、Dockerコンテナとホストマシンのポートをマッピングするために使用されます。- 今回は、ホストマシンの3001番ポートをDockerコンテナの3000番ポートにマッピングしています。
tty
コマンドは、Dockerコンテナ内でTTYを有効にするために使用されます。- 最後の行のTTYを有効にすることで、CLIの標準入出力がLockされずに機能して、コンテナ内でコマンドが実行できるようになります。
docker-composeでDockerfileからimageをビルドする
docker-compose build
コマンドは、Dockerファイルから imageを作成してくれるコマンドです。
コンテナは作成しないので、注意です。
docker-compose build
このコマンドを実行すると、Dockerfileに従って各サービスのDockerイメージがビルドされ、イメージ名とタグ名が作成されます。
docker image ls
で、buildされたimageを確認すると次のとおりです。
nuxt_test % docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nuxt_test-frontend latest 995d9918ff4d 58 minutes ago 2.6GB
Nuxt.js のAppを作成する
次のコマンドで、frontend
サービス内で Nuxt.js のAppを作成するために必要なコマンドをDocker コンテナ内で実行させます。
docker-compose run --rm frontend npx create-nuxt-app
上記のコマンドでは、Docker Composeによって定義された frontend
サービス内で、一時的なコンテナを起動して、その中で指定されたコマンドを実行しています。
詳細な説明は、次のとおりです。
docker-compose run
コマンドを使用して、frontend
サービスを実行。--rm
オプションで、コマンドの実行が終了したらコンテナを自動的に削除されるように設定。npx create-nuxt-app
は一時的なコンテナ内で実行されるコマンドです。- このコマンドは、Nuxt.js のAppを作成するために使用されます。
ちなみに、npx create-nuxt-app
コマンドを実行すると、Nuxt.jsを立ち上げるためのいくつかの質問が聞かれます。
これは、そのプロジェクトに合わせた設定を選択します。
nuxt_test % docker-compose run --rm frontend npx create-nuxt-app
[+] Running 1/1
⠿ Network nuxt_test_default Created 0.1s
create-nuxt-app v5.0.0
✨ Generating Nuxt.js project in .
? Project name: app
? Programming language: TypeScript
? Package manager: Yarn
? UI framework: Vuetify.js
? Template engine: HTML
? Nuxt.js modules: (Press <space> to select, <a> to toggle all, <i> to invert selection)
? Linting tools: ESLint, Prettier
? Testing framework: Jest
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Server (Node.js hosting)
? Development tools:
? Continuous integration: None
? Version control system: Git
yarn run v1.22.19
$ prettier --write --list-different . && yarn lint:js --fix
.eslintrc.js
components/NuxtLogo.vue
components/Tutorial.vue
components/VuetifyLogo.vue
jest.config.js
layouts/default.vue
layouts/error.vue
nuxt.config.js
package.json
pages/index.vue
pages/inspire.vue
README.md
tsconfig.json
$ eslint --ext ".js,.ts,.vue" --ignore-path .gitignore . --fix
Done in 7.16s.
🎉 Successfully created project app
To get started:
yarn dev
To build & start for production:
yarn build
yarn start
To test:
yarn test
For TypeScript users.
See : https://typescript.nuxtjs.org/cookbook/components/
npm notice
npm notice New minor version of npm available! 9.5.1 -> 9.6.7
npm notice Changelog: https://github.com/npm/cli/releases/tag/v9.6.7
npm notice Run npm install -g npm@9.6.7 to update!
npm notice
これで、Nuxt.jsプロジェクトは立ち上がりました。
Docker コンテナを実行する
次のコマンドで、Docker Composeファイルに定義されたサービスをバックグラウンドで起動できます。
docker-compose up -d
docker-compose up -d
コマンドは、Docker Composeファイルに定義されたサービスをバックグラウンドで起動するために使用されます。
このコマンドを実行すると、Docker Composeファイルに定義されたすべてのサービスが起動し、Dockerイメージが必要に応じて自動的にダウンロードされます。
Nuxt.js のAppを起動する
Nuxt.js のAppを起動するために、frontend
(今回のNuxt.jsアプリのDocker Composeでのサービス名) の Bashを起動します。
docker-compose exec frontend bash
Bashを起動すると、WORKDIRとして設定した/usr/src/app
からCurrentがStartするはずです。
nuxt_test % docker-compose exec frontend bash
root@48762e70d917:/usr/src/app#
yarn dev
で、Local Serverを立ち上げます。
root@48762e70d917:/usr/src/app# yarn dev
yarn run v1.22.19
$ nuxt
╭──────────────────────────────────────────╮
│ │
│ Nuxt @ v2.16.3 │
│ │
│ ▸ Environment: development │
│ ▸ Rendering: server-side │
│ ▸ Target: server │
│ │
│ Listening: http://192.168.32.2:3000/ │
│ │
╰──────────────────────────────────────────╯
ℹ Preparing project for development 12:26:51
ℹ Initial build may take a while 12:26:51
ℹ Discovered Components: .nuxt/components/readme.md 12:26:51
✔ Builder initialized 12:26:51
✔ Nuxt files generated 12:26:52
✔ Client
Compiled successfully in 9.86s
✔ Server
Compiled successfully in 8.00s
ℹ Waiting for file changes 12:27:04
ℹ Memory usage: 373 MB (RSS: 563 MB) 12:27:04
ℹ Listening on: http://192.168.32.2:3000/ 12:27:04
No issues found.
最終的な動作確認
Dockerコンテナの起動状況はdocker container ps
で確認できます。
localhost: 3001 から Containerの3000番Portにコネクションがあることがわかります。
docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
48762e70d917 nuxt_test-frontend "docker-entrypoint.s…" 27 seconds ago Up 24 seconds 0.0.0.0:3001->3000/tcp nuxt_test-frontend-1
今回は http://localhost:3001/ にアクセスして、次のような NuxtApp が立ち上がっていれば成功です。
volume
マウントによる Docker ContainerとLocalのファイル共有もしているので、
VSCodeでapp
のディレクトリの中を確認すると、次のような Nuxt.jsのプロジェクトができているはずです。
Nuxt.js (v2.16.3) のpackage.json を確認する
Nuxt.js (v2.16.3) のpackage.json を確認すると、Defaultで"@nuxtjs/composition-api": "^0.33.1"
があったり、
TypeScriptを選択して環境をSet Upしたので、"@nuxt/types": "^2.15.8"
や"@nuxt/typescript-build": "^2.1.0"
があることがわかります。
{
"name": "app",
"version": "1.0.0",
"private": true,
"scripts": {
"dev": "nuxt",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate",
"lint:js": "eslint --ext \".js,.ts,.vue\" --ignore-path .gitignore .",
"lint:prettier": "prettier --check .",
"lint": "yarn lint:js && yarn lint:prettier",
"lintfix": "prettier --write --list-different . && yarn lint:js --fix",
"test": "jest"
},
"dependencies": {
"@nuxtjs/composition-api": "^0.33.1",
"core-js": "^3.25.3",
"nuxt": "^2.15.8",
"vue": "^2.7.10",
"vue-server-renderer": "^2.7.10",
"vue-template-compiler": "^2.7.10",
"vuetify": "^2.6.10"
},
"devDependencies": {
"@babel/eslint-parser": "^7.19.1",
"@nuxt/types": "^2.15.8",
"@nuxt/typescript-build": "^2.1.0",
"@nuxtjs/eslint-config-typescript": "^11.0.0",
"@nuxtjs/eslint-module": "^3.1.0",
"@nuxtjs/vuetify": "^1.12.3",
"@vue/test-utils": "^1.3.0",
"babel-core": "7.0.0-bridge.0",
"babel-jest": "^29.1.2",
"eslint": "^8.24.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-jest": "^27.0.4",
"eslint-plugin-nuxt": "^4.0.0",
"eslint-plugin-vue": "^9.5.1",
"jest": "^29.1.2",
"jest-environment-jsdom": "^29.1.2",
"prettier": "^2.7.1",
"ts-jest": "^29.0.3",
"vue-jest": "^3.0.4"
}
}
Docker Composeで建てた Docker Container を停止 & 削除する
docker-compose down
コマンドを使用して、Docker Composeで建てたすべてのコンテナを停止し、削除することができます。
docker-compose down
JavaScript書籍 Ver. 中級-上級者向け
JavaScript書籍 Ver. 初級者向け
プログラミング学習・エンジニア転職関連の情報
自宅で現役エンジニアから学べる『TechAcademy』 (エンジニア転職保証)
『GEEK JOBキャンプ』スピード転職コース(無料)
【IT道場】入校時0円! 就職目的プログラミングスクール
エンジニア転職なら100%「自社開発」求人に強い【クラウドリンク】
『techgym』 (Python特化・無料)
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!