LoginSignup
0
0

More than 1 year has passed since last update.

本当に簡単にDockerを理解する

Last updated at Posted at 2021-06-29

ザックリとDockerの使用方法(コンテナの実行関係、イメージの作成)についてまとめました。これを読めば一通りはわかるよ!

1.Dockerって何?

1.1.コンテナ

仮想マシンと考えてください。Dockerではコンテナの上でイメージを実行します。

1.2.イメージ

OSで実行するHDDのイメージと考えてみましょう。

1.3.コンテナとイメージを使うことで何が良いの?

結局、なんでDockerを使うのか?ですが、次のようなメリットがあります。以下では、それをDockerを触って理解していくことにしてみます。

  • いろいろなタイプのイメージを作成・管理できる。
  • イメージを共有ができ、同じ処理を様々なコンテナ上で実行できる。

つまり、複数の同じ構成を持ったサーバーマシンをすぐに用意できることができることがDockerのメリットです。

2.Dockerのコマンドを覚えよう。

まずはDockerの実行してみましょう!

2.1.準備インストール

皆さんの手持ちの環境で一番簡単に動かせると思うので、Docker for Windowsを使っていくことにしてみます。

Dockerにサインインしておきます。

2.2.Run(コンテナの実行)

何はともあれ、コンテナを実行したいと思います。
nginxというWebサーバーのイメージを起動してみましょう。

以下のコマンドで実行することができます。

> docker run nginx

ただ、nginxはWebサーバーですので80番ポートを使用します。ですが、80番ポートはすでに使用されている場合が多いと思います。コンテナの80番ポートは、実機の5000番ポート上にポートを転送して実行してみましょう。(-p オプションを使用します。)

>docker run -p 5000:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
68ced04f60ab: Pull complete                                                                                             28252775b295: Pull complete                                                                                             a616aa3b0bf2: Pull complete                                                                                             Digest: sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b
Status: Downloaded newer image for nginx:latest

これで http://localhost:5000/にアクセスしてみましょう。
nginxが起動していることがわかりました。

Tips

今回は起動後、nginxサーバーをフォアグランドで実行し続けるイメージですので、コンテナは実行したままになります。イメージによっては起動後して処理を終えると、コンテナが終了してしまう場合もあります。コンテナの実行を維持したい場合は、
docker run -itd イメージ名 /bin/bash
を試してみましょう。

2.3.実行中のコンテナの確認(PS)

次にどんなコンテナが実行されているか確認してみましょう。

> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
aa8e7e1c8d67        nginx               "nginx -g 'daemon of…"   39 minutes ago      Up 39 minutes       0.0.0.0:5000->80/tcp   funny_dijkstra

コンテナIDにaa8e7e1c8d67(以降 aa)でnginxのコンテナが動作しているのがわかります。

2.4.実行中のコンテナで、コマンドの実行

実行中のコンテナでコマンドを実行してみます。
そのためにはexecを使います。また、実行先のコンテナを指定する必要があります。

>docker exec -it (コンテナ) コマンド

コンテナ名は途中で省略してもよいです。

>docker exec -it aa ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

また、以下のようにすれば、exitまでの期間、ターミナルを操作できますね。

>docker exec -it aa /bin/bash

コンテナのシェルの中でnginxの設定ファイル(/etc/nginx/conf.d/default.conf)の中を見てみましょう。dockerは最小限しかインストールしないものなので、viが入っていません。catを使う必要がありますね。

root@aa8e7e1c8d67:cat /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;
...
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
...
}

なるほど、/usr/share/nginx/htmlがコンテンツ置き場のようですね。

最後はexitしてシェルを抜けます。

>....(いろいろなコマンド操作)
>exit

これで大体の操作の感じをつかめたのではないでしょうか。

3.コンテナイメージを作ろう

それでは自分用のコンテナイメージを作っていきましょう。
Dockerの利点は、様々なバリエーションのイメージを簡単に管理できることにあります。
DockerのイメージはDockerfileで作成しますので、まずはDockerfileを編集します。

3.1.Dockerfileの作り方

今回は次の操作をしてみましょう。Webサーバーに提供されるコンテンツです。
このイメージは、nginxが動作しているよ!と言いたいイメージとします。

以下のhello.htmlを表示でいるようにしたいと思います。

hello.html
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
# nginxイメージを起点にする
FROM nginx
# vimのインストール
RUN apt-get update
RUN apt-get -y install vim
# hello.htmlファイルをコンテナに追加
ADD hello.html /usr/share/nginx/html
# コンテナ実行時にnginxを実行
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

よく使用するコマンドをまとめておきます。

コマンド 意味
FROM 派生元のイメージを指定する
RUN イメージをビルドする際の処理
ADD イメージに指定のファイルを追加する。アーカイブファイルの場合は展開する
COPY イメージに指定のファイルを追加する。
CMD イメージを実行する際に実行するコマンド
ENTORYPOINT イメージ実行時に実行するコマンド、docker run時に上書き不可

Dockerfileができたら、ビルドをします。
空のディレクトリを作り、Dockerfileとhello.htmlにしてください。

>mkdir my_nginx_dockerfiles               # 空ディレクトリを作り
>copy Dockerfile my_nginx_dockerfiles   # Dockerfileと
>copy hello.html my_nginx_dockerfiles     # 今回イメージに追加するファイルだけを入れます。
>cd my_nginx_dockerfiles                  # ディレクトリに移動します

>docker build -t my_nginx:0.1 .      # ビルドです 
Sending build context to Docker daemon  3.072kB
...
Successfully built 1e53c2c84fba
Successfully tagged my_nginx:0.1
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.  

最後にパーミッション関係で指摘がありますが、成功ですね。image listコマンドでイメージができたか確認します。

>docker image list
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my_nginx            0.1                 1e53c2c84fba        7 minutes ago       178MB
nginx               latest              6678c7c2e56c        10 days ago         127MB

さぁ、さっそく実行してみましょう。

>docker run -p 5000:80 my_nginx:0.1

追加したファイル(http://localhost:5000/hello.html)にアクセスしてみましょう。

カスタムイメージの完成です!

4.コンテナやイメージを管理しよう。

4.1. Push / Pull

Dockerではイメージを共有することができます。非常に素晴らしい機能です。

Pull イメージを取得します。

> docker pull tensorflow/tensorflow 

4.1. 不要コンテナ、イメージの削除

コンテナやイメージを管理しましょう。
コンテナはdocker psコマンドで、イメージはdocker image listコマンドで一覧できます。

Exitされたコンテナは不要ですので、rmで削除することができます。

また、同様にカスタムイメージを作り終わったので、nginxも不要です。

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