docker

0からのDocker 1日目

Dockerが便利、時代はDockerということを耳にして1年以上経ち、
自分が関わっているプロジェクトにも導入されていたり、導入したいねという話も出てきたのでちゃんと勉強する。

一日目の感想としては便利なのはわかったけどいまいちイメージがつかめないといったところでした。
このイメージがDocker用語ではないほうのイメージです。
なにやら用語やコマンドが色々出てきて混乱してます。。

Dockerとは

環境構築で必要な設定や実行すべきコマンドを設定ファイル(Dockerfile)を作って、このファイルをもとにDocker イメージ, Docker コンテナを作る。
それぞれの詳細は後述しますが、Dockerコンテナを実行することでDockerfileで設定しておいた環境が立ち上がる。
DockerはDockerイメージを取得したり、作成、Dockerコンテナを作成、実行するためのツール。

人気の理由はコンテナ型仮想化という技術によって、
ホストマシンのリソースを効率的に扱えたり、Dockerがインストールされて入ればどこでも動く手軽さによるもの。

Dockerイメージ

DockerイメージはOSやアプリケーションがパッケージになったもの。
UbuntuやCentOSのようなOSやMySQLやRedisのようなアプリケーションもDockerイメージにある。
これらをセットにしたものもDockerイメージとして作成できる。

docker build -t タグ dockerfileのでィクレクトリ

=> docker build -t tag_name .

イメージのタグ

ユーザ名/リポジトリ:タグの記述でローカルとイメージとレジストリ上にあるリポジトリとを関連付ける。
タグはDockerイメージのバージョン指定の仕組みに使われる。

# タグをつける
docker tag image ユーザ名/リポジトリ:タグ

# イメージをリポジトリにアップロードする
docker push ユーザ名/リポジトリ:タグ

Dockerコンテナ

DockerコンテナはDockerイメージから生成される仮想サーバ。
Dockerコンテナはホストマシン上の1つのプロセスとして実行される。

docker run tag_name

参考

「Docker」を全く知らない人のために「Docker」の魅力を伝えるための「Docker」入門
VagrantとDockerについて名前しか知らなかったので試した - Qiita
流行りにのるために Vagrant で用意した ubuntu に Docker を導入してみた - Qiita

疑問

RUNとCMDの使い分けがわからない問題。
違いはわかったけど、そのコマンドはRUNとCMDのどっち?ってなりがちです。
イメージ時に実行しても問題ないのか、コンテナが作成されてからでないと実行できないのかを考えれば良いような気がしてきました。
Docker 初心者 | <実践> RUN と CMD の違い - Qiita

おわりに

理解が曖昧なため、認識を間違えている可能性が多分にあります。
そのような箇所をみつけたら遠慮なくコメントや編集リクエストをいただければと思います。
また、参考になる記事などをご存知でしたら教えていただければ幸いです。