Dockerの基礎知識編

どうも!めがとんです!

今回は現在勉強中のDockerに関する、基礎知識をまとめて見ました。

興味がある方は最後まで読んでいただけると幸いです。

 

Docker Hubとは

Docker imageが管理されているレジストリの名前(Git Hubみたいな感じ)。
Docker imageを管理するレジストリは他にもあるが、
その一つがこのDocker Hubである。

 

リポジトリーの共有

Git Hub同様、Docker Hubもリポジトリーで管理することが可能。
そのリポジトリー(image)をチームなど、
様々な人と共有することで簡単に開発環境を整えられる。
Git Hubでいう、リモートリポジトリをローカルにクローンするイメージ。

 

Docker Hubを使用するには

Docker HubのWebサイトから新規登録を行う。
ターミナルを開き、ログインを行う。

$ docker login

Login Succeeded

と表示されれば、ログイン成功。

 

リポジトリー(image)をローカル(Host)Pullする

Docker Hubで管理しているリポジトリーをローカルにプルする。

$ docker pull <imageの名前>

例えば、testOSがリポジトリ名であれば

$ docker pull testOS

これで、リポジトリのクローンがローカルに完成。

 

コンテナを作成する

testOSが入ったコンテナで作業するために、runコマンドを実行する。

$ docker run -it testOS bash

これでコンテナを作成し、コンテナの中に入ることが出来る。
ここで一旦次のパートで情報を整理する。

 

コンテナを作成する理由は?

先ほどDocker HubからtestOSというリポジトリー(image)をローカルにPullしました。
しかし、この時点ではローカル環境でtestOSを使うことは出来ません。

例えば、作成するアプリケーションの開発環境でtestOSが必要なので、
testOSを使えるようにしたいとする。
そこで、testOSが含まれるコンテナを作成し、
そのコンテナの中で作業することで、testOSが使えるようになる。

 

コンテナから抜けるには

$ exit

このコマンドで、コンテナから抜けることが出来る。

 

ローカルで管理しているコンテナの確認方法

$ docker ps -a

-aを付けないと、動いているコンテナしか表示されないので、
全て表示するには-aが必要。

 

ローカルで管理しているイメージの確認方法

$ docker images

 

exitした後に、再度コンテナの中に入る方法

runした後にexitコマンドでコンテナから抜けると、コンテナはexited状態になる。
このままではコンテナが起動しておらず、中に入ることが出来ないので、再度立ち上げる。

$ docker restart

その後、execコマンドで、再びコンテナに入るコマンドを打つ

$ docker exec -it <containerの名前> bash

 

Docker imageに変更を保存する方法

開発環境で、RubyやPHP、Javascriptが必要になったとする。
一人がコンテナの中で、Ruby、PHP,Javascriptを扱えるように設定した。

他の人も同じ環境構築をするのは手間も時間もかかり大変。
→ 一人が設定したコンテナの作業環境をimage(リポジトリ)に保存し、提供すれば解決!

$ docker commit <container> <image>

このコマンドで、コンテナの変更内容をimageに保存する。

Docoker Hubimageをプッシュ前に、タグで名前を一致させる

予めDocker Hubでリポジトリを新規作成しておく。(ここではnew-repoとする)
名前が一致している必要があるので、タグを付ける。

$ docker tag old-repo:updated username/new-repo

old-repoが変更を加えたローカルのリポジトリで、タグが更新を表すupdated。
Docker Hubで新規作成した「new-repo」にusername/new-repoで名前を一致させる。

Docoker Hubimageをプッシュする

$ docker push username/new-repo

これでDocker Hubで管理しているリポジトリにプッシュが完了
プルすることで、変更が加えられたimage(リポジトリ)をローカルで扱えるようになる。

 

imageの削除方法

$ docker rmi <image>

今回は以上になります!