LoginSignup
1
2

Docker を使ってみたの続き

Last updated at Posted at 2024-04-18

はじめに

友人(@digital24s さん)に誘われて、Docker を使ってみました。

Docker を使ってみた #Docker - Qiita

その続きです。

Docker を使ってみる

Linux マシンを用意する

Docker は Linux OS で稼動します。そのため Linux マシンを用意します。
自分は Google Cloud の Compute Engine を使って Ubuntu OS の仮想マシンを作りました。

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

Ubuntu OS マシンに Docker エンジンをインストールします。

Docker Engine インストール(Ubuntu 向け) | Docker ドキュメント

Docker コンテナを作ってみる

以下のサイトを参考にしました。

手を動かして覚えるDocker入門 #初心者 - Qiita

コンテナイメージをダウンロードする

Docker リポジトリからコンテナイメージをダウンロードします。
今回は Ubuntu を使うことにします。

$ docker pull ubuntu:latest

コンテナを作成する

イメージからコンテナを作成します。

$ docker create -it -p 8080:80 --name trydocker ubuntu

-it オプションと -p オプションを指定しておきます。

コンテナを起動する

作成したコンテナを起動します。

$ docker start trydocker

コンテナ内で操作する

シェルを実行してコンテナ内で操作できるようにします。

$ docker exec -it trydocker /bin/bash

コンテナ内で nginx をインストールします。

# apt update
# apt install -y -q curl gnupg2
# curl http://nginx.org/keys/nginx_signing.key | apt-key add -
# apt install -y -q nginx

コンテナ内で nginx を起動します。

# nginx

ウェブサーバが起動したので、ウェブブラウザでアクセスしてみます。

http://localhost:8080

ターミナルで使えるウェブブラウザを導入する

ウェブブラウザがないとウェブサーバの稼動を確認するのが大変です。ターミナルで使えるウェブブラを導入します。幾つか試してみましたが Lynx がよさそうです。

UbuntuにLynxブラウザーをインストールして使用する

実行してみます。

$ lynx http://localhost:8080

コンテナを停止する

実行しているコンテナを停止します。

$ docker stop trydocker

コンテナイメージを作ってみる

コンテナを作って nginx をインストールしましたが、コンテナは使い捨てるものだと聞きました。コンテナを作って起動し直すたびに nginx をインストールするものでしょうか。さすがにそれはありませんね。

「nginx をインストールした状態」のコンテナイメージを作っておいて、これを使ってコンテナを起動するようにします。

コンテナイメージを実際に作成してみよう ! ~スペシャリストから学ぶコンテナ技術 第 3 回 - 変化を求めるデベロッパーを応援するウェブマガジン | AWS

docker commit でイメージを作成する

コンテナイメージを確認します。

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    ca2b0f26964c   7 weeks ago    77.9MB

docker pull したイメージが確認できます。
続いて、コンテナを確認します。

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                       PORTS     NAMES
ff2f5e2378ba   ubuntu    "/bin/bash"   a minute ago    Exited (137) a minute ago              trydocker

このコンテナからイメージを作成します。docker commit します。

$ docker commit trydocker trynginx:v1

コンテナイメージを確認します。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
trynginx     v1        fd5f2da6a15b   a minute ago    195MB
ubuntu       latest    ca2b0f26964c   7 weeks ago     78MB

作成したイメージが確認できます。
このイメージからコンテナを起動します。

$ docker run --rm -d -p 8080:80 trynginx:v1 nginx -g "daemon off;"

-d オプションと -p オプションを指定します。
-g "daemon off;" オプションをつけて nginx を起動します。
ウェブサーバが稼動しているか確認してみます。

$ lynx http://localhost:8080

Dockerfile でイメージを作成する

コンテナ内で操作する代わりに、操作の手順をスクリプトに記述してイメージを作ることができます。

Dockerfile を用意します。↓

Dockerfile
# ベースのイメージを指定
FROM ubuntu:latest

# 必要なパッケージをインストール
RUN apt update && \
    apt install -y -q curl gnupg2 && \
    curl http://nginx.org/keys/nginx_signing.key | apt-key add - && \
    apt install -y -q nginx

# コマンド実行
CMD ["nginx", "-g", "daemon off;"]

OS だけのコンテナイメージに対して nginx をインストールして、最後に nginx を起動するスクリプトです。
この Dockerfile を使ってdocker build します。

$ docker build -t trynginx:v2 .

コンテナイメージを確認します。

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
trynginx     v1        fd5f2da6a15b   a minute ago     195MB
trynginx     v2        ab1535c34ac8   a minute ago     195MB

作成したイメージが確認できます。
このイメージからコンテナを起動します。

$ docker run -p 8080:80 --rm trynginx:v2

ウェブサーバが稼動しているか確認してみます。

$ lynx http://localhost:8080

Docker Compose でコンテナを実行する

これまで Docker コンテナを実行するのに docker run コマンドを使ってきました。

Docker Compose を使ってコンテナを実行してみます。

Docker Compose をインストールする

Ubuntu OS マシンに Docker Compose をインストールします。

Compose プラグインをインストールする | ドッカードキュメント

Docker Compose でコンテナを実行する

docker-compose.yml を用意します。↓

docker-compose.yml
version: '3'
services:
    # 作成したイメージを指定
    app:
        image: trynginx:v2
        ports:
            - 8080:80

この docker-compose.yml を使ってdocker-compose up します。

$ docker-compose up

コンテナを確認します。

$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS              PORTS                                   NAMES
64b1e6319aab   hellonginx    "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp, :::8080->80/tcp   nginx_app_1

ウェブサーバが稼動しているか確認してみます。

$ lynx http://localhost:8080

コンテナを停止します。docker-compose down します。

$ docker-compose down

コンテナを確認します。

$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS              PORTS                                   NAMES
表示なし

Docker Compose は、複数のコンテナを同時に起動して運用しないといけないときに、効果あります。
例えば、ウェブサーバと同時にデータベースサーバを起動したいとします。

docker-compose.yml を用意します。↓

docker-compose.yml
version: '3'
services:
    # 作成したイメージを指定
    app:
        image: trynginx:v2
        ports:
            - 8080:80
    # 利用するイメージを追加
    db:
        image: mysql:8.0-oracle
        environment:
            - MYSQL_ROOT_PASSWORD=password

この docker-compose.yml を使ってdocker-compose up します。

Docker を理解する

自分は仕事でも趣味でも、Docker を使う機会はないと思っていました。なので、Docker について勉強してきませんでした。
とはいうものの、周囲の知人は Docker を使っていて、会話に出てくることがあります。このとき自分が話題についていけないのは、悔しいと思っていました。

入門といえる記事を検索して一通り読んでいきました。
Docker や Dockerfile 、Docker Compose の「使い方」は分かります。ただ、Docker がどんな「振る舞い」するのか見えてきませんでした。

試してみて分かったこと。記事によっては書かれていなかったこと

実際に使って試しながら、他の記事を読んでいきました。その結果、分かったことがありました。いわゆる「入門」記事には書かれていなかったり、書かれていても分かりづらかったりしたことでした。

コンテナは基本的に使い捨てる運用する。

ベースになるコンテナイメージに対して必要なミドルウェアやアプリを導入して、独自のコンテナイメージを作成できる。

コンテナ内にあるアプリを改修するときは、コンテナを停めてアプリを改修して再起動するのでなく、改修したアプリを含むコンテナイメージを作り直して、そのイメージで新たにコンテナを起動する。

説明3.png

1
2
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
1
2