エンジニアリングとお絵描き

お絵描きが趣味のエンジニアが、誰かの為になりそうなことや未来の自分の助けになりそうなことを書き残します.

Dockerを学ぶ

Docker に触れる機会があったため、ある程度理解して使えるレベルになりたいと思い、学んだことを備忘録としてまとめました。(まとめたと言うよりも殴り書きした....?)

ざっくり理解して使えるようになることが目的な為、正確では無いと思います。

Docker とは何なのか

wikiには

「コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである」

とあります。

私はとりあえず、「仮想化の技術をより軽くして、環境構築が楽になり、環境の共有が簡単になる便利な物なんだな~」と思っておくことにします。

Dockerの種類

Dockerには無償版Docker CE (Docker Community Edition) と、有償版Docker EE (Docker Enterprise Edition)の2種類あるようです。

今後docker ce が出てきたら「無償版のDocker」と理解すれば良いと思います。(こういった小さな理解の積み重ねを大事にしていきたい)

Dockerにまつわる用語

Dockerについて調べると必ず出てくる用語が「コンテナ」と「イメージ」です。 Dockerに関する記事の多くで、この2つの説明が初めに長く書かれており、「これ...全部読むの...」と心が折れかけ、読んだ後も、「読んだけど...分からん...結局何が違うんだ...??」と私はなりました。

結局私は、「イメージを用いてコンテナを作る。他人と環境を共有する際にはイメージを送受信して共有する。」というのが大事なのかなと思いました。

Docker Compose とは何なのか

Docker Compose とは、複数のコンテナで構成されたシステムの構築を簡単に行うツールみたいです。 「Docker Compose は無くてもDockerは使えるけど、使うと便利でよく使われているツール」という認識ができているだけでも、勉強する際に取っつきやすくなると思います。

Dockerを使えるようにするには、Dockerのインストールと、Docker Composeのインストールが必要になることが多いと思います。

Docker イメージの作成

Docker イメージを作成する方法は以下のように2種類あるようです。

  1. Dockerfileを使用してDocker イメージを作成する
  2. コンテナからDockerイメージを作成する

2つ目の方法でイメージを作成する際には、以下のコマンドを実行するだけです。

docker commit [コンテナ名] [イメージ名]

私は2つ目が楽で良いね!と思ってしまったのですが、作成したDockerイメージが何の操作をしてできたか分からなくなってしまう為、1つ目のDockerfileによってDockerイメージを作成する方が良いみたいです。

Dockerfile

Dockerfileとは、「Dockerのイメージ作成に関するコマンドをコード化してまとめたもの」らしいです。Dockerfileも、Docker Compose と同様に、「無くても使えるけどあると便利なもの」だと思います。

「Dockerfileを使うことで、同一のDocker イメージを簡単に作れて、便利」というのを覚えておけば良いと思います。

コマンド

以下、よく使うコマンドのメモです。

docker run //Docker イメージを使用して、コンテナを起動するコマンド
docker run -d //デーモンを使用してバックグランドで起動させる

docker run hello-world //「hello-world」というDocker イメージを使用して、コンテナを起動させる

docker run コマンドではDocker Hub からDocker イメージのダウンロードと、コンテナの起動まで実行する。

docker pull [イメージ名]:[タグ名]//Dockerイメージのダウンロードだけを行うコマンド

ローカル環境のDocekrイメージの一覧

docker images

Docker コンテナの一覧を確認する

docker ps  //実行中のコンテナの一覧表示
docker ps -a //全てのコンテナの一覧表示

停止中のコンテナ、イメージを放置すると、不要なデータが残り続けることになるため、不要になってコンテナ、イメージは削除する。

docker rm <コンテナ名orCONTAINER ID>// コンテナの削除
docker rmi <Dockerイメージ名orIMAGE ID> //イメージの削除

docker rm $(docker ps -aq)//停止中のコンテナを全て削除

実行中のコンテナにログイン、ログアウト

docker exec -it [コンテナ名もしくはコンテナID] [シェルのコマンド] //ログイン
exit //ログアウト

コンテナとローカル・ファイルシステム間でファイルとフォルダをコピーする

docker cp <ホスト側のファイル> <コンテナ名>:<コンテナ内のコピー先ディレクトリ>//ホスト側からコンテナ内にファイルをコピー
docker cp <コンテナ名>:<コンテナ内のコピー元ファイル> <ホスト側のコピー先ディレクトリ>//コンテナからホストへファイルをコピー

コンテナの起動、停止

docker start <コンテナ名orコンテナID>
docker stop <コンテナ名orコンテナID>

docker stop $(docker ps -q)//稼働中のコンテナを全て停止

参考

Docker - Wikipedia

Docker入門(第一回)~Dockerとは何か、何が良いのか~ | さくらのナレッジ

Dockerのイメージとコンテナの違い | CodeCampus

【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜 | SIOS Tech. Lab