docker環境構築
使用するバージョンを指定
今回はNext.jsの環境構築なのでnodeを使用する
node:<version>
で記述する
node:<version>-[option]
でoptionのようなものをつけられる
FROM node:16.14.2-alpine
Dockerfileの記述項目詳細
FROM:ベースイメージを指定します。
WORKDIR:作業ディレクトリを設定します。
COPY:ローカルファイルをコンテナ内にコピーします。
RUN:コマンドを実行します(例:パッケージのインストール)。
CMD:コンテナが起動されたときに実行されるデフォルトのコマンドを指定します。
ビルド
-t でタグ指定。今回だとmy-hello-worldをタグ付け
docker build -t my-hello-world .
新しいコンテナの作成。タグ名or IMAGE ID で起動できる
docker run my-hello-world
--nameを使用することでコンテナ内でmy-hello-worldで参照可能になる
docker run --name my-hello-world my-hello-world
起動
docker start my-node-app
停止
docker stop my-hello-world
docker-compose.ymlメモ
ポートマッピング
:
左側:ホストマシンのポート
右側:Dockerコンテナ内のポート
ports:
- "3000:3000"
docker composeコマンド
作成
docker-compose create
起動
docker-compose start
停止
docker-compose stop
削除
docker-compose rm
作成・起動を一気にやる
docker-compose up
停止・削除を一気にやる
docker-compose down
docker-compose.ymlとDockerfileでvolumesのコンテナ側のパスとWORKDIRが一致していればうまく動いた
docker-compose.yml
services:
app:
build: .
container_name: docker-next-setting
volumes:
- ./my-app:/app
- /app/node_modules
ports:
- "3000:3000"
command: yarn dev
Dockerfile
# 作業ディレクトリを設定
WORKDIR /app
docker-compose.ymlを書いてdocker環境構築したほうがコマンドが簡単でいい気がする
next.jsを動かすコンテナ(frontend)
mysqlのデータベース(database)
いい感じにふたつ動いている
services:
# フロントエンド
app:
build:
context: ./frontend
dockerfile: Dockerfile.frontend
container_name: frontend
volumes:
- ./frontend:/app
- /app/node_modules
ports:
- "3000:3000" # 開発用
command: yarn dev
# データベース
database:
image: mysql:8.3.0
container_name: database
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_DATABASE: database
TZ: "Asia/Tokyo"
ports:
- "3306:3306"
detabaseにshellで接続してテーブル作成と確認
shellで接続
docker-compose exec database mysql -u user -p
テーブル作成
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT,
sex ENUM('male', 'female') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
確認
mysql> SHOW tables;
+--------------------+
| Tables_in_database |
+--------------------+
| users |
+--------------------+
データ作成
INSERT INTO users (name, age, sex) VALUES
('test1', 25, 'male');
確認
mysql> SELECT * FROM users;
+----+-------+------+------+---------------------+---------------------+
| id | name | age | sex | created_at | updated_at |
+----+-------+------+------+---------------------+---------------------+
| 1 | test1 | 25 | male | 2024-12-01 17:39:16 | 2024-12-01 17:39:16 |
+----+-------+------+------+---------------------+---------------------+
テーブルプラス接続
github