5
3

More than 3 years have passed since last update.

Docker勉強メモ① DockerインストールからHelloWorld

Last updated at Posted at 2020-03-08

はじめに

重い腰をあげて前から興味があったDockerの勉強をはじめました。これはそのメモです。
こちらのサイトを参考にハンズオン形式で始めていきます。

Docker勉強メモ

参考

環境

Dockerを触る環境はAWSのEC2を使いました。
※AWS ECSを使う記事はこっち → AWS ECR/ECS 勉強メモ① Dockerコンテナ起動

image.png

EC2作成時のAMIイメージは ami-045f38c93733dd48d です。
DockerインストールだけLinux2 (amzn2-ami-hvm-2.0.20200304.0-x86_64-gp2 (ami-052652af12b58691f))も使います。

1.Docker入門(第一回)メモ

1-1.Dockerエンジンをインストールする

※ root権限が必要なところは、sudoを使ってます。

1-1-1.CentOS7 ami-045f38c93733dd48d の場合

Dockerを使うにはDockerエンジンが必要らしいのでインストールします。

image.png

$ yum-config-manager --enable Extra
$ yum install container-selinux
$ yum install -y yum-utils device-mapper-persistent-data lvm2
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

docker-ce.repoが追加されたか確認

ll /etc/yum.repos.d/

Dockerインストール

$ yum install docker-ce

Dockerインストールされたか確認

$ yum list installed | grep docker-ce

こんな感じになるとインストール成功

[centos@ip-172-31-7-38 ~]$ yum list installed | grep docker-ce
containerd.io.x86_64                  1.2.13-3.1.el7           @docker-ce-stable
docker-ce.x86_64                      3:19.03.7-3.el7          @docker-ce-stable
docker-ce-cli.x86_64                  1:19.03.7-3.el7          @docker-ce-stable

ユーザー centos が、sudoなくてもdockerコマンド使えるようにする。
以下コマンド実行したら設定反映のためセッションを繋ぎなおす(切断→接続)

$ sudo usermod -a -G docker centos
$ cat /etc/group | grep docker
1-1-2.amzn2-ami-hvm-2.0.20200304.0-x86_64-gp2 (ami-052652af12b58691f) の場合
$ yum update -y
$ amazon-linux-extras install docker
$ service docker start
$ ps -ef |grep docker

1-2.Docketサービスを起動

Dockerサービスを起動

$ systemctl start docker

Dockerサービス起動しているか確認

$ systemctl status docker

こんな感じになると成功

[centos@ip-XXX-XXX-XXX-XXX ~]$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2020-03-05 23:01:50 UTC; 6s ago
     Docs: https://docs.docker.com
 Main PID: 4219 (dockerd)
    Tasks: 8
   Memory: 42.7M
   CGroup: /system.slice/docker.service
           └─4219 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.476420738Z" level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.476435398Z" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/contai... module=grpc
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.476445516Z" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.512172262Z" level=info msg="Loading containers: start."
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.696125954Z" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Da... IP address"
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.756440317Z" level=info msg="Loading containers: done."
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.770477383Z" level=info msg="Docker daemon" commit=7141c199a2 graphdriver(s)=overlay2 version=19.03.7
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.770631125Z" level=info msg="Daemon has completed initialization"
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal dockerd[4219]: time="2020-03-05T23:01:50.800711711Z" level=info msg="API listen on /var/run/docker.sock"
Mar 05 23:01:50 ip-XXX-XXX-XXX-XXX.ap-northeast-1.compute.internal systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

※余談※ Dockerサービスの自動起動設定

sudo systemctl enable docker

-ーー 以上でDockerを触る環境が作れた。 ---

line.png

2.Dockerコンテナ実行してみる

2-1.挨拶する(hello-world)

新しいことは挨拶から始まる。Hello Worldしてみる。

$ docker run hello-world

実行結果はのせないけど、『Hello from Docker!』とかいろいろ文字がドバっと出たら成功

動いたらもう不要なので削除する。DockerコンテナとDockerイメージの2つを削除。

2-2.Dockerコンテナを削除

Dockerコンテナ削除コマンド

$ docker rm <コンテナ名 or CONTAINER ID>

実行例

sudo docker rm heuristic_wozniak
sudo docker rm 1740d7b07a8a

コンテナ名,CONTAINER IDの確認方法

[centos@ip-172-31-3-246 ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
1740d7b07a8a        hello-world         "/hello"            About a minute ago   Exited (0) About a minute ago                       heuristic_wozniak
  • コンテナ名 → NAMES (今回はheuristic_wozniak)
  • CONTAINER ID → CONTAINER ID (今回は1740d7b07a8a)

2-3.Dockerイメージを削除

Dockerイメージ削除コマンド

$ docker rmi <Dockerイメージ名 or IMAGE ID>

イメージ名,IMAGE IDの確認方法

[centos@ip-172-31-3-246 ~]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        14 months ago       1.84kB
  • イメージ名 → REPOSITORY (今回はhello-world)
  • IMAGE ID → IMAGE ID (今回はfce289e99eb9)

これで、Dockerへの挨拶と後片付けが完了

3.DockerコンテナでWebサイト構築

Docker Hubに公開されているNginxのDocketイメージを使いWebサーバーを立てる。

image.png

3-1.Webサーバー構築

Dockerイメージ取得

$ docker pull nginx

Dockerコンテナ起動

$ docker run -d --name nginx-container -p 8181:80 nginx

オプションの意味
 -d バックグラウンド実行
 -name コンテナ名
 -p <ホスト側のポート>:<コンテナ側のポート>

起動したままになっている

[centos@ip-172-31-3-246 ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
a0672eaa1c9d        nginx               "nginx -g 'daemon of…"   5 minutes ago       Up 5 minutes        0.0.0.0:8181->80/tcp   nginx-container

これだけでWebサーバーができた。Docker便利!
http://{ホストのIP}:8181/ でアクセスでWebサイトにアクセスできる。確認できたら後片付けする。

3-2.後片付け

コンテナ停止

sudo docker stop nginx-container

コンテナ停止時の実行ログ

[centos@ip-172-31-3-246 ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
a0672eaa1c9d        nginx               "nginx -g 'daemon of…"   5 minutes ago       Up 5 minutes        0.0.0.0:8181->80/tcp   nginx-container
[centos@ip-172-31-3-246 ~]$ sudo docker stop nginx-container
nginx-container
[centos@ip-172-31-3-246 ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
a0672eaa1c9d        nginx               "nginx -g 'daemon of…"   7 minutes ago       Exited (0) 6 seconds ago                       nginx-container

Dockerコンテナ削除

$ docker rm a0672eaa1c9d

Dockerイメージ削除

$ docker rmi nginx

おまけ:Dockerコマンドメモ

コマンド 概要
systemctl start docker Dockerサービス起動
systemctl status docker Dockerサービス起動確認
docker info Dockerの状態確認
docker images 初期状態の確認
docker ps -a ローカル環境のDockerコンテナの一覧を確認
systemctl enable docker OS起動時にDockerサービス起動
docker ps -a コンテナ一覧
docker rm <コンテナ名 or CONTAINER ID> コンテナイメージ削除
docker images Dockerイメージ一覧
docker rmi <コンテナ名 or CONTAINER ID> Dockerイメージ削除
docker pull <イメージ名> Dockerイメージ取得
docker run ・・・ コンテナ起動
docker stop <コンテナ名 or CONTAINER ID> コンテナ停止
docker cp <ホスト側のファイル> <コンテナ名>:<コピー先ディレクトリ> ホスト→コンテナへデータコピー
docker cp <コンテナ名>:<コピー元ファイル> <ホストのコピー先ディレクトリ> コンテナ→ホストへデータコピー

docker run オプション

オプション 概要
-d バックグラウンド実行
-name コンテナ名
-p <ホスト側のポート>:<コンテナ側のポート>
-v
--link コンテナ間通信 ※レガシー機能
5
3
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
5
3