0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerを使って環境構築をする

Last updated at Posted at 2022-07-06

この記事の概要

Dockerを用いた環境構築について記載する

Dockerのインストール

以下のサイトからDockerをインストールする

※自分はM1 Macだったので、Apple Chipのものをインストールしました。

Dockerの設定とインストール確認

インストールしたアプリを開いて、規約に同意する

規約に同意する

Dockerのインストール確認

// dockernのバージョン確認
$ docker version
// hello-worldしてみる
$ docker run hello-world

Hello from Docker!と返ってくる

Dockerの勉強1

コマンド実行

// docker runコマンド
$ docker run -d -p 80:80 docker/getting-started

Dockerの勉強2

アプリのダウンロード

zipまたはpull

Dockerfileの記述・実行

app/Dockerfile.
# syntax=docker/dockerfile:1
FROM node:12-alpine
RUN apk add --no-cache python2 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
$ cd get***/app
// ビルド(コンテナイメージの作成)
$ docker build -t getting-started .

アプリコンテナの起動

// コンテナの起動
$ docker run -dp 3000:3000 getting-started

dockerの勉強3

ソースコードの変更

src/static/js/app.js
<p className="text-center">No items yet! Add one above!</p>
→<p className="text-center">You have no todo items yet! Add one above!</p>

古いコンテナを削除してからdockerのコンテナ作成

// コンテナのIDを調べる
$ docker ps
// コンテナを停止する
$ docker stop <コンテナID>
// コンテナ削除
$ docker rm <コンテナID>
// コンテナ作成
app $ docker build -t getting-started .
$ docker run -dp 3000:3000 getting-started

// コンテナの強制削除
$ docker rm -f <コンテナID>

dockerの勉強4

dockerイメージの共有

dockerの勉強5

コンテナのファイルシステム

コンテナはそれ自身が「スクラッチ領域」を持っている

// ubuntuコンテナを起動して、/data.txtという名前のファイルを作成し、1から10000までのランダムな数を入れる
$ docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"

dockerDesktopにてubuntuコンテナをCLIで開く

ubuntu/terminal.
// /data.txtのファイル内容を確認
$ cat /data.txt
// /data.txtのファイル内容を確認(docker execを使うVer.)
$ docker exec <コンテナID> cat /data.txt

確認後、他のubuntuコンテナを起動する

// 他のコンテナの起動で、配下の/data.txtを見てみる
$ docker run -it ubuntu ls /
→/data.txtがない

ボリュームを使う

ボリュームを使うことで、
コンテナ内で指定したファイルシステムのパスを、ホストマシン上へと接続できる

このtodoアプリが自身のデータを保存するのは、コンテナ用ファイルシステム内で
/etc/todo/todo.dbにあるSQLite Database野中。

ボリュームを作成し、データを保管するディレクトリに取り付ける(マウントするという)と、
データを保持することができる
つまり、コンテナが書き出すtodo.dbファイルは、ホスト上のボリュームにおいておけば保持できる

名前付きボリュームは、単なる入れ物

// ボリューム作成
$ docker volume create todo-db
// コンテナ削除
$ docker rm -f <コンテナID>
// コンテナ起動時にボリュームをマウントする
$ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
// コンテナ削除
$ docker rm -f <コンテナID>
// コンテナ起動時にボリュームをマウントする
$ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started

データは残っている

ボリュームを深堀り

// データをDockerが実際に保存するところを確認する(MountPoint)
$ docker volume inspect todo-db

dockerの勉強6

名前付きボリュームとバインドマウントの比較

名前付きボリューム バインドマウント
ホスト上の場所 Docker が選択 自分で管理
マウント例( -v を使用) my-volume:/usr/local/data /path/to/data:/usr/local/data
コンテナの内容に新しいボリュームを加える はい いいえ
ボリューム ドライバのサポート はい いいえ

dockerの勉強7

複数コンテナのアプリを連携する(コンテナのネットワーク機能)

// ネットワークの作成
$ docker network create todo-app

MySQLの起動・接続

// MySQLコンテナの起動(Apple Silliconの場合)
$ docker run -d \
    --network todo-app --network-alias mysql \
    --platform "linux/amd64" \
    -v todo-mysql-data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=secret \
    -e MYSQL_DATABASE=todos \
    mysql:5.7

// MySQLに接続
$ docker exec -it <mysqlのコンテナID> mysql -u root -p
$ passwordは、secret

// MySQLでデータベース一覧を表示
mysql> SHOW DATABASES; 

MySQLとの連携

// nicolaka/netshootイメージを使う新しいコンテナ起動
$ docker run -it --network todo-app nicolaka/netshoot

// DNSツールのdigコマンドを使い、MySQLのIPアドレスを調べる
$ dig mysql

MySQLとアプリを動かす

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?