0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めてのDocker

Last updated at Posted at 2025-03-18

初めてのDocker

Dockerの機能と用語説明

Dockerコンテナ システムの他の部分に影響を与えることなく、アプリケーションを実行できる仮想空間のような隔離された環境で、すべてのコードと依存関係がパッケージ化されている。
Dockerイメージ アプリケーションの実行に必要なソースコード、依存関係、ツールを含んだパッケージで、コンテナ作成時に指示を出す読み取り専用のファイル。
Dockerfile Dockerイメージを構成するテキストデータで、Dockerfileを読み込むことでDockerイメージが構築される。
Docker Compose 複数のコンテナを1度に操作することができるツール。Docker Composeの設定ファイルであるdocker-compose.ymlファイルは複数のコンテナ間の関係や環境変数などを記述する。
Docker Hub Dockerイメージの共有サービス。Dockerイメージ(Dockerfile)が公開されており、Docker Hubから任意のイメージ(Dockerfile)を取得できる。自身で作成したイメージ(Dockerfile)をリポジトリにアップし、他ユーザーと共有することも可能。

Dockerコマンド(基本)

build DockerfileからDockerイメージを作成する bash docker image build [オプション] Dockerfileのパス
run Dockerイメージを使いDockerコンテナを起動(作成)する bashdocker container run [オプション] imagename
start 作成済(停止中)のコンテナを起動する bash docker container start [オプション] containername
stop Dockerコンテナを停止する bash docker container stop [オプション] containername
rm 停止中のコンテナを削除する bash docker container rm [オプション] containername
restart コンテナを再起動する bash docker container restart [オプション] containername
exec 起動中のコンテナ内でコマンドを実行する bash docker container exec [オプション] containername コマンド

実際にDockerを起動してみましょう。よく使われるdocker-compose.ymlから起動します。

Docker Compose とは

複数コンテナのアプリケーションを定義・共有するために役立つように、開発されたツールです。
Compose があれば、サービスを定義する YAML ファイルを作成し、コマンドを1つ実行するだけで、
瞬時にすべて立ち上げたり、すべてを削除したりできます

1. 任意のディレクトリを作成し、その中に/web/Dockerfileを作成してください。

	# Dockerベースイメージの指定		
	FROM nginx		
			
	# ビルド時に実行するシェルコマンド		
	# RUN apt update 		
			
	# ホスト(ローカル)のファイルやディレクトリをDockerイメージにコピー		
	# : COPY [コピー元][コピー先] 		
	COPY ./src /usr/share/nginx/html		
			
	# コマンドを実行する作業ディレクトリ		
	# WORKDIR [ディレクトリのパス] 		
	# WORKDIR /app		
			
	# コンテナが実行されたとき実行するコマンド		
	# CMD ["apachectl","-D","FOREGROUND"]		

作成ついでにコメントアウトで説明書いてます。

2. 次に、/src/index.htmlを作成します。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Docker</title>
</head>
<body>
<p>hello Docker!</p>
</body>
</html>

3.次にルートディレクトリにdocker-compose.ymlを作成します。

docker-compose.yml
services:
  web: #サービス名
    build: # Dockerfileからビルドする際の相対パスを設定
      context: . # 親ディレクトリをコンテキストに
      dockerfile: ./web/Dockerfile # webフォルダ内のDockerfileを使用
    ports:  # ホストマシンのポート番号:コンテナのポート番号
      - "80:80"

最終的なディレクトリ構成は以下です。

.	
├── docker-compose.yml	
├── src	
│   └── index.html	
└── web	
    └── Dockerfile	

実際にコマンドで起動してみましょう。

docker compose up -d

hello Docker!が表示されたかと思います。

先ほどはnginxのイメージを作成しました。
続いてMySQLのイメージを作成しましょう。

docker-compose.yml
	services:	
	  web: #サービス名	
	    build: # Dockerfileからビルドする際の相対パスを設定	
	      context: . # 親ディレクトリをコンテキストに	
	      dockerfile: ./web/Dockerfile # webフォルダ内のDockerfileを使用	
	    ports:  # ホストマシンのポート番号:コンテナのポート番号	
	      - "80:80"	
		
+	  db: #サービス名	
+	    # build: Dockerfileからビルドする際の相対パスを設定	
+	    image: mysql:5.7 # イメージ名:タグ	
+	    volumes: # データをコンテナの外に保存するための設定	
+	      - ./mysql/data:/var/lib/mysql # ホストディレクトリ : コンテナ内ディレクトリ	
+	    environment: # 環境変数	
+	      MYSQL_ROOT_PASSWORD: password	
+	      MYSQL_DATABASE: sample_db	
+	      MYSQL_USER: user	
+	      MYSQL_PASSWORD: password	
+	    ports: 	
+	      - "3306:3306" # ホストマシンのポート番号:コンテナのポート番号	
+	    # depends_on: サービス間の依存関係を定義	
+	    # command: サービスコンテナが起動したときに実行するコマンド	
		

こちらもついでにコメントアウトで説明書いてます。

MySQLのコンテナが作成されましたね。このように簡単なイメージについては、ymlファイルのみで作成可能です。
また、簡単にコンテナを追加できるのも強みですね

動作確認もかねてphpMyAdminのイメージを作成して、確認しましょう。

docker-compose.yml
	services:	
	  web: #サービス名	
	    build: # Dockerfileからビルドする際の相対パスを設定	
	      context: . # 親ディレクトリをコンテキストに	
	      dockerfile: ./web/Dockerfile # webフォルダ内のDockerfileを使用	
	    ports:  # ホストマシンのポート番号:コンテナのポート番号	
	      - "80:80"	
		
	  db: #サービス名	
	    # build: Dockerfileからビルドする際の相対パスを設定	
	    image: mysql:5.7 # イメージ名:タグ	
	    volumes: # データをコンテナの外に保存するための設定	
	      - ./mysql/data:/var/lib/mysql # ホストディレクトリ : コンテナ内ディレクトリ	
	    environment: # 環境変数	
	      MYSQL_ROOT_PASSWORD: password	
	      MYSQL_DATABASE: sample_db	
	      MYSQL_USER: user	
	      MYSQL_PASSWORD: password	
	    ports: 	
	      - "3306:3306" # ホストマシンのポート番号:コンテナのポート番号	
	    # depends_on: サービス間の依存関係を定義	
	    # command: サービスコンテナが起動したときに実行するコマンド	
		
+	  phpmyadmin:	
+	    image: phpmyadmin	
+	    depends_on:	
+	      - db	
+	    environment:	
+	      - PMA_ARBITRARY=1	
+	      - PMA_HOSTS=db	
+	      - PMA_USER=root	
+	      - PMA_PASSWORD=password	
+	    ports:	
+	      - "3001:80"	

docker compose up -d

3001番にマッピングしたので、

しっかり、sample_dbが作成されて動作しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?