そもそもDockerとは?というところから、Dockerのインストール方法や基本的なコマンドの使い方まで解説していきます。
1.事前知識 Docker とコンテナ
Dockerに関連する事前知識について紹介致します。
コンテナとは?
隔離され、パッケージ化された箱。
⇒インフラのコンテナも同じ
⇒サーバー上に隔離されたアプリ空間を作れる技術
dockerはコンテナを管理するためのツール
コンテナ技術
- Linux Container
- Windows Container
- Hyper-V Container
- Docker Container
ユーザーフレンドリーなのが、Dockerであるため、Dockerコンテナが一番使われています。
仮想環境とは?
パソコンの中にパソコンを作る技術。
※実環境(サーバー)がLinux、開発端末がWindowsといった違いがあるため。
例)WindowsPCの中にLinuxサーバーを立てる
- 2つOSを立ち上げるため重い
- ゲストOSはHDDに保存
- VirtualBoxが有名
コンテナイメージ
- Linuxサーバー上に直接ソフトウェアのコンテナが立ち上がる
- ホストOSとゲストOSの違いがない
- メモリ上にアプリがあるだけ
Dockerと仮想環境
違い | Docker | 仮想環境 |
存在場所 | メモリ上 | ディスク上 |
ゲストOS | ゲストOSは存在しない | ホストOSとゲストOSに分かれる |
データ管理 | データは一時的 | 常に保存される |
コード化 | Dockerfileで可能 | 不可 |
- Dockerはアプリのような間隔で一時的にメモリ上に立ち上がる。
- インフラをコード化することが可能。
- VirtualBoxで仮想OSを作る場合、PCのHDDメモリを使う。
Docker最大のメリット:コード化 Infrastructure As a Code
- Dockerfileを読むと構成がわかる
- 誰でも同じコンテナになる
- ファイルであるため軽い。受け渡しが可能
- インフラの知識がないアプリエンジニアでも簡単にサーバーを立てられる
- 同じ構成をサーバーに立てられる
DockerfileとDockerイメージ
Dockerfile -build-> Dockerイメージ -run->Dockerコンテナ
- Dockerfile:定義書。(サーバーのインストールコマンドなど)
- Dockerイメージ:buildでファイル内容が実行される。1層1層がLinuxコマンドのイメージレイヤー
- Dockerコンテナ:runでイメージからコンテナに。実際に動作させるコンテナとして実行できる
DockerHubからDockerイメージをダウンロードする方法もある。
Dockerイメージの構造と仕組み
- レイヤー構造:レイヤー1つ1つがLinuxコマンド
- 一番下はLinuxOS:ベースレイヤーはまっさらなLinux(CentOS, Ubuntu)
Docker専用のアルパインLinux(超軽量なLinux)もある
例)レイヤーイメージ
3層目:sudo yum install httpd
2層目:sudo yum update -y
1層目:Base イメージ CentOS
Dockerイメージ タグについて
イメージ名:タグ名
例) ubuntu:20.04
※もしタグを指定しない場合は最新になる。
トラブルにつながるため、タグは必ずつける。
DockerHubからDockerイメージをダウンロード
docker pull ubuntu:18.04
Docker Compose
- 複数コンテナ管理と連携が可能
- コンテナによるアプリケーション環境の構築が可能
※リンクオプションをつかってコンテナ同士の通信をすることができる
2.Dockerのインストール
WindowsとMacでそれぞれインストール方法が異なります。
Docker ToolBox(Windows)
Windows10⇒Docker ToolBox(Windows)
「docker toolbox github」で検索
検索結果からまたはリンクからページへ移動
Releases の最新へ
「DockerToolbox-19.0.3.1.exe」をダウンロード。
exeファイルを実行して、インストールを進める。
※インストーラー起動時に、VirtualBoxが既に入っている場合、チェックを外す。
version確認
docker version
※Windows 10 proの場合は、Docker Desktop Windows
Docker Destop Mac(MacBook)
Mac の場合「docker for Mac」で検索
Intel chipかApple chipかPCに合わせて、インストーラーをダウンロード。
terminalを起動して、windowsのときと同様にversionが出ればOK。
docker version
3.DockerHubアカウントの取得
※passwordは9文字以上で適宜設定する必要があります。
メール通知を確認して、verifyする
ログインできれば、OK。
4.Docker基本コマンド
dockerコマンドを紹介していきます。
docker login
docker login
usernameとpasswordの入力が求められます。
DockerHubで作成したアカウントでログインができます。
docker run
docker run
dockerコンテナ1つを起動するコマンド。
docker imageがない場合、docker hubから自動で取得。
docker ps
docker ps
起動中のコンテナを表示するコマンド
停止中のコンテナは表示されない
-a :このオプションを付けると停止中のコンテナも見れる
–name :コンテナに任意の名前を付ける
–rm :プロセスが終了したら、コンテナを削除
–volume :コンテナにホストのディレクトリをマウント
-it :コンテナの中に入る
-p :コンテナにアクセスする。ポート開放
–env :環境変数(DBのpwなど)を渡す
docker start/stop/restart
docker start [container]
コンテナ1つを起動。
例)docker start mycentos
docker stop [containerID]
コンテナ1つを停止。
例)docker stop f4b31cf01023
docker restart [container]
コンテナ1つを再起動。
docker exec
docker exec
起動中のコンテナに入らずコマンドを実行
例)docker exec mycentos cat /etc/redhat-release
※-it オプションを使うとコンテナに入ることができる
例)docker exec -it mycentos /bin/bash
例)cat /etc/redhat-release
docker rm
docker rm
停止中のコンテナを削除
-f で起動中コンテナも強制削除
⇒コンテナのデータも消えるので注意
docker images
docker images
ローカルにあるimageを全て表示
意外とdockerイメージは容量が大きい
⇒定期的に確認する
docker rmi
docker rmi
dockerイメージを削除
起動中コンテナのイメージは削除できない
⇒dockerイメージは依存関係があるので、ベースイメージは削除できない
例)docker rmi d1165f221234
削除できなかった場合
削除できる場合
docker build
docker build [docker file path]
dockerfileからイメージを生
例) docker build test/
↓
docker imagesで確認
docker cp
docker cp
コンテナとホストマシンでファイルのやりとりを行うコピーコマンド
ログファイルや設定ファイルの取り出しor入力で使う
ホスト⇒コンテナ
例)docker cp C:\\sample\\local.txt mycentos:/opt
コンテナ⇒ホスト
例)docker cp mycentos:/opt/container.txt C:\\sample
docker logs/inspect
docker logs
dockerコンテナのログ出力
-f リアルタイムログ
・原因不明のコンテナ停止
・アクセスログなど
docker inspect
docker の詳細な情報を表示
例) docker inspect mycentos
docker pull
docker pull
Docker イメージのダウンロード
pullの後に*(プライベートイメージレジストリ)を付けると、DockerHub以外からダウンロードできる
※DockerHubは、誰でも見れてしまう。pullはprivateからダウンロードするときに使用。
docker pull イメージ名:タグ[レジストリURL]
php8.0をダウンロードする場合
docker pull php:8.0
docker commit
docker commit
dockerコンテナをイメージ化
※通常イメージからコンテナ化するが、逆を行うコマンド
↓
イメージ化した後、docker pushでDockerHubにuploadする
DockerHubID/イメージ名:タグ
※任意のイメージ名を指定しないとDockerHubにpushできない
docker commit [コンテナ名] DockerHubID/[image name]:[tag]
例)docker commit mycentos myoshimuraml/masa-centos:v1
attachなどで追加操作
追加操作を新しいレイヤーにする
オリジナルイメージ作成
注意点:必ずアカウントIDを入れる
docker push
docker push
dockerイメージをDockerHubにupload
オリジナルイメージを自分のアカウントにアップ
docker push DockerHubID/[image name]:[tag]
例)docker push myoshimuraml/masa-centos:v1
レイヤーがuploadされる
DockerHub側を見る
docker history
docker history
イメージの履歴を確認
docker pullで外部から取得してきたイメージの場合、レイヤーがどうなっているかはdocker fileではわからないため、historyで確認
例)docker pull mongo-express
mongo-express をpull
docker history mongo-express:latest
historyコマンドでイメージがどのように作られたかを確認することができます。