dockerのメモ その1

はじめに

dockerを試している中でわかったことをメモしていきます。

環境構築でわかったこと

最初にやったことは以下である。 * docker hubの登録 * dockerのインストール

docker hubの登録

Docker Hub

docker hubはdockerimageを登録するサービスのことである。 よくある使い方としては誰かが作成したイメージを使うことがメインとなると思う。 自分で他の人が使うようなイメージを作成した場合はここに登録すると良い。   

dockerのインストール

www.docker.com インストールとdockerのコマンドを使うことができるようになる。

dockerの整理

いろいろあるが例えば以下のようなところが便利である。 環境ごとに差異がある状態を無くすことができる。

  • ローカル環境でAさんとBさんの環境を同じにする
  • テスト環境でも同じ状態にする
  • さらには本番環境でも同じ状態にする

上記によってある環境では動いたのに本番環境では動かない!という状態を無くすことができる。 またこれを高速に行うことができるというのも良い点である。

dockerを使う

ここでは以下のコマンドを使ってみる。 * docker login * docker pull * docker images * docker run * docker ps

docker login

これはdocker registryにログインするために行う。 これをやることでこの後に実施するdocker pullでdocker imageを取得することができるようになる。

docker pull

docker pullコマンドを実行することでdocker imageを取得することができる。 ここでは試しにmysqlのイメージを取得してみる。 docker registoryとしては以下を対象にする。 hub.docker.com

コマンドは以下の通り

docker pull mysql

しばし待つとpullが完了する。

docker images

pullができたか確認する。 docker imagesコマンドを使うと今保持しているdocker imageをlist表示してくれる。 手元では以下のようにmysqlのimageが存在することが確認できた。 f:id:set21set21:20210825191323p:plain

docker run

imageが取得できたらそのimageを元にcontainerを起動する。 そのためのコマンドがdocker runになる。 ここではmysqlを起動するために以下のコマンドを実行する。

docker run mysql

実行したところ以下のようにERRORが出た

2021-08-25 10:15:59+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.26-1debian10 started.
2021-08-25 10:15:59+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-08-25 10:15:59+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.26-1debian10 started.
2021-08-25 10:15:59+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    You need to specify one of the following:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD

初回の起動時にはなにやらoptionをつける必要がありそうである。

docker hubにある、以下のページにどのように使うか記載があった。 Docker Hub

抜粋すると以下のようなコマンドが書かれている。

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

上記のコマンドにある色々なoptionに何を指定するのかというのも同ページに以下のように記載されていた。

... where some-mysql is the name you want to assign to your container, my-secret-pw is the password to be set for the MySQL root user and tag is the tag specifying the MySQL version you want. See the list above for relevant tags.

※機会翻訳の結果は以下の通り

ここで、some-mysqlはコンテナに割り当てる名前、my-secret-pwはMySQL rootユーザーに設定するパスワード、tagは必要なMySQLバージョンを指定するタグです。関連するタグについては、上記のリストを参照してください。

上記のことからoptionに指定するものを検討する。 --name:sample-mysql -e :root -d:設定しない

上記の設定をすると実行するコマンドは以下のようになるのでこれを実行する。

docker run --name sample-mysql -e MYSQL_ROOT_PASSWORD=root mysql

上記でmysqlの起動が確認できた。

docker ps

ここで実際にmysqlのプロセスが動いているか確認をしたい。 その際はdocker psコマンドを使うと確認できる。

docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                 NAMES
8d8f694faafc   mysql     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   3306/tcp, 33060/tcp   sample-mysql

上記のようにdocker runのときに指定したsample-mysqlという名前のcontainerが確認できた。

containerの中に入る

runしたcontainerの中に入る方法としてexecコマンドを使う方法がある。 以下は先程、runしたmysqlのcontainerに入りbashのshを起動しておく方法である。

docker exec -it sample-mysql bash
root@8d8f694faafc:/#

上記のようにrootでログインしていることがわかる。

さらにmysqlに接続を試み接続が成功した。

mysql -u root -p -h 127.0.0.1
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.26 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

まとめ

今回はdocker hubからimageをpullし、containerを立ち上げ、 そのcontainerに入ることを行うまでのことを実施した。