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 3 years have passed since last update.

基本的なDockerのあれこれ

Posted at

はじめに

近年、Dockerで環境構築をする機会が増えていますが、駆け出しエンジニアからしたら何が何だか分からず発狂したくなりますよね。
そういった過去を抱えている自分がDockerを最低限使えるようになれたら良いなと願いを込めて記事を書きます。

Dockerとは

Dockerとは、内部でコンテナ技術を利用しており、様々な環境でアプリケーション実行環境を構築・運用するためのオープンソースのプラットフォームです。
Dockerでは、必要なライブラリ群や。アプリケーションの実行に必要な全てのファイル・ディレクトリ群、インフラ環境などをコンテナとして1つにまとめます。
Dockerを利用すると、別環境でエラーが発生するなどのリスクを減らすことができます。

コンテナとは

コンテナとは、ホストOS上に論理的な区画を作成し、アプリケーションを動作させるのに必要なライブラリなどを1つにまとめることが出来ます。コンテナはオーバーヘッドが少ないため。軽量で高速に動作します。
また、アプリケーションの実行に必要なものをまとめることができるので、複数のコンテナを組み合わせて1つのアプリケーションを構成するマイクロサービス型のアプリケーションと親和性が高いです。

大まかな機能

Dockerには大きく分けて、次の3つの機能があります。

Dockerイメージを作る機能(Build)
Dockerイメージを共有する機能(Ship)
Dockerコンテナを動かす機能(Run)
以下でこの3つの基本機能を説明していきます。

Build

Dockerfileというファイルに書かれた内容をもとにDockerイメージを作成します。
Dockerイメージは、Dockerのコマンドを使って手動で作ることも、Dockerfileという設定ファイルを作ってそれをもとに自動でイメージを作ることもできますが、Dockerfileを使って管理することが望ましいです。
また、Dockerイメージは積み重ねて利用できます。Dockerでは構成に変更があった部分を差分(イメージレイヤー)として管理します。

Ship

DockerのイメージはDockerレジストリ(Docker Hubなど)で共有できます。
公式のDockerレジストリであるDocker HubではUbuntuやMySQLなどよく使うもののベースとなるDockerイメージが配布されています。これらのベースイメージをカスタマイズし、イメージを積み重ねて独自のDockerイメージを作っていきます。

Run

Dockerは、コンテナ単位でサーバ機能を動かします。このコンテナのもとになるのが、Dockerイメージになります。また、Dockerイメージから複数のコンテナを起動することもできます。コンテナの起動・停止・破棄は、Dockerのコマンドを使います。

基本的な使い方

以下、Dockerを利用する際の基本的な操作を記載しています。

Dockerイメージのダウンロード

Dockerイメージを取得するには、docker image pullコマンドを使用します。

# docker image pull [オプション] イメージ名[:タグ名]

$ docker image pull centos:7
#=> CentOSのバージョン7をダウンロード

Dockerイメージの一覧取得

取得したDockerイメージの一覧表示は、docker image lsコマンドを使用します。

# docker image ls [オプション] [レポジトリ名]

$ docker image ls
REPOSITORY       TAG           IMAGE ID       CREATED      SIZE
イメージの名前      イメージタグ名    イメージID       作成日        イメージのサイズ

オプション一覧

オプション 内容
-all, -a すべてのイメージを表示
--digests ダイジェストを表示するかどうか
--no-trunc 結果をすべて表示
--quiet, -q DockerイメージIDのみ表示

Dockerイメージの削除

作成したDockerイメージはdocker image rmコマンドで削除できます。

# docker image rm [オプション] イメージ名(or ID) [イメージ名(or ID)]

$ docker image rm samle_image

オプション一覧

オプション 内容
--force, -f 強制的にイメージを削除
--no-prun 中間イメージを削除しない

コンテナ生成・起動

コンテナの生成・起動には、docker container runコマンドを使用します。

# docker container run [オプション] イメージ名[:タグ名] [引数]

$ docker container run -p 8080:80 nginx
#=> ホストの8080ポートにアクセスすると、コンテナ上で動作しているNginx(80番ポート)のサービスにアクセス

オプション一覧

オプション 内容
--attach, -a 標準入力/出力/エラー出力にアタッチ
--detach, -d コンテナを生成し、バックグラウンドで実行
--name [コンテナ名] コンテナ名を設定

コンテナ停止

起動しているコンテナを停止する時は、docker container stopコマンドを使用します。

# docker container stop [オプション] コンテナ名(or ID) [コンテナ名(or ID)]

$ docker container stop sample_container

コンテナ削除

停止しているコンテナを削除するときは、docker container rmコマンドを使用します。

$ docker container rm [オプション] コンテナ名(or ID) [コンテナ名(or ID)]

$ docker container rm sample_container

オプション一覧

オプション 内容
--force, -f 起動中のコンテナを強制的に削除
--volumes, -v 割り当てたボリュームを削除す

Dockerfileを利用する

Dockerfileとは、Docker上で動作させるコンテナの構成情報を記述するファイルのことです。
具体的には、以下のようなものを記載しておきます。

  • ベースになるDockerイメージ
  • Dockerコンテナ内で行った操作(コマンド)
  • 環境変数などの設定
  • Dockerコンテナ内で動作させておくデーモン実行

記載例

# CentOSのベースイメージを設定
FROM centos:7

# build時に指定したコマンドを実行させる
RUN echo "now building..."
RUN yum -y install httpd
RUN sed -i '/#ServerName/a ServerName www.example.com:80' /etc/httpd/conf/httpd.conf

# index.htmlをコンテナにコピー
ADD ./index.html /var/www/html/

# 80番ポートをエクスポート
EXPOSE 80

# イメージ作成後、指定したコマンドを実行する
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

主な命令文

命令 内容
FROM ベースイメージの設定
RUN build時にコンテナ内で実行
CMD 完成したイメージからコンテナを作成するときに実行
LABEL ラベルを設定
EXPOSE ポートのエクスポート
ENV 環境変数
ADD ファイル/ディレクトリをコンテナにコピー
COPY ファイルのコピー
ENTRYPOINT コンテナの実行コマンド
VOLUME ボリュームのマウント
USER ユーザーの指定
WORKDIR 作業ディレクトリの変更
ARG Dockerfile内の変数
SHELL デフォルトシェルの設定

docker-composeを利用する

一般的にDockerを利用する際は、複数のDockerコンテナが協調して動作します。Docker Composeを利用することで、複数のコンテナをまとめて管理する事が出来ます。
docker-compose.ymlというファイルにコンテナの構成情報を定義し、同一のホスト上の複数のコンテナを一括管理できます。

記載例

docker-compose.yml
version: '3' # バージョンを指定
services: # 管理したいコンテナのサービス
  db: # DBサーバー用のコンテナの設定
    image: mysql:5.7 # コンテナで使用するイメージ名を記載
    environment: # 環境変数を設定
      MYSQL_ROOT_PASSWORD: password # 任意のパスワードを設定
      MYSQL_DATABASE: sample_db # 任意のデータベース名を設定
    ports:
      - "3306:3306" # ホストの3306ポートとコンテナの3306ポートを接続

  web: # APPサーバー用のコンテナの設定
    build: . # docker-compose.ymlと同じ階層のDockerfileを使ってイメージをbuild
    command: bundle exec rails s -p 3000 -b '0.0.0.0' # コンテナ立ち上げ時に起動するコマンド
    volumes: # ボリュームを設定
      - .:/sample_app # 作業ディレクトリをコンテナ内の/sample_appにマウント
    ports: # ポートを設定
      - "3000:3000" # ホストの3000ポートとコンテナの3000ポートを接続
    links:
      - db # dbコンテナと接続

終わりに

こんな簡単なことかよっっ!!と思うかもしれないけど、意外と基礎を固めることは大事なのでド忘れした時などに見返してね!

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?