Closed10

docker環境構築

恐竜さん恐竜さん

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
恐竜さん恐竜さん

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 |
+----+-------+------+------+---------------------+---------------------+
このスクラップは18日前にクローズされました