Dockerとは? 基本コマンドと使い方についても紹介

Tools/Services

そもそもDockerとは?というところから、Dockerのインストール方法や基本的なコマンドの使い方まで解説していきます。

 

1.事前知識 Docker とコンテナ

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-image-container

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」で検索

検索結果からまたはリンクからページへ移動

docker-toolbox-github

Releases の最新へ

「DockerToolbox-19.0.3.1.exe」をダウンロード。

exeファイルを実行して、インストールを進める。

※インストーラー起動時に、VirtualBoxが既に入っている場合、チェックを外す。

docker-quick-start

version確認
docker version

docker-version

※Windows 10 proの場合は、Docker Desktop Windows

Docker Destop Mac(MacBook)

Docker Desktop Mac(MacBook)

Mac の場合「docker for Mac」で検索

Intel chipかApple chipかPCに合わせて、インストーラーをダウンロード。

docker-desktop-mac

terminalを起動して、windowsのときと同様にversionが出ればOK。

docker version

3.DockerHubアカウントの取得

docker-hub-account

アカウント作成(Sign Up)

※passwordは9文字以上で適宜設定する必要があります。

verify-email-docker-hub

メール通知を確認して、verifyする

docker-hub-logged-in

ログインできれば、OK。

4.Docker基本コマンド

dockerコマンドを紹介していきます。

docker login

docker login

usernameとpasswordの入力が求められます。
DockerHubで作成したアカウントでログインができます。

docker-login

docker run

docker run

dockerコンテナ1つを起動するコマンド。

docker imageがない場合、docker hubから自動で取得。

docker-run

docker ps

docker ps

起動中のコンテナを表示するコマンド
停止中のコンテナは表示されない

-a :このオプションを付けると停止中のコンテナも見れる
–name :コンテナに任意の名前を付ける
–rm :プロセスが終了したら、コンテナを削除
–volume :コンテナにホストのディレクトリをマウント
-it :コンテナの中に入る
-p :コンテナにアクセスする。ポート開放
–env :環境変数(DBのpwなど)を渡す

docker-ps

docker start/stop/restart

docker start [container]

コンテナ1つを起動。

例)docker start mycentos

docker-start

docker stop [containerID]

コンテナ1つを停止。

例)docker stop f4b31cf01023

docker-stop

docker restart [container]

コンテナ1つを再起動。

docker-restart

docker exec

docker exec

起動中のコンテナに入らずコマンドを実行

例)docker exec mycentos cat /etc/redhat-release

docker-exec

※-it オプションを使うとコンテナに入ることができる

例)docker exec -it mycentos /bin/bash

例)cat /etc/redhat-release

docker-exec-it-option

docker rm

docker rm

停止中のコンテナを削除

-f で起動中コンテナも強制削除
⇒コンテナのデータも消えるので注意

docker-rm

docker images

docker images

ローカルにあるimageを全て表示
意外とdockerイメージは容量が大きい
⇒定期的に確認する

docker-images

docker rmi

docker rmi

dockerイメージを削除
起動中コンテナのイメージは削除できない
⇒dockerイメージは依存関係があるので、ベースイメージは削除できない

例)docker rmi d1165f221234
削除できなかった場合

docker-rmi-error

削除できる場合

docker-rmi-success

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-local-container

コンテナ⇒ホスト
例)docker cp mycentos:/opt/container.txt C:\\sample

docker-cp-container-local

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-pull

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

docker-commit

attachなどで追加操作
追加操作を新しいレイヤーにする
オリジナルイメージ作成
注意点:必ずアカウントIDを入れる

docker push

docker push

dockerイメージをDockerHubにupload
オリジナルイメージを自分のアカウントにアップ

docker push DockerHubID/[image name]:[tag]
例)docker push myoshimuraml/masa-centos:v1

docker-push

レイヤーがuploadされる

DockerHub側を見る

docker-push-dockerHub

docker history

docker history

イメージの履歴を確認

docker pullで外部から取得してきたイメージの場合、レイヤーがどうなっているかはdocker fileではわからないため、historyで確認

例)docker pull mongo-express

docker-pull-mongo-express-dockerhub

mongo-express をpull

docker-pull-mongo-express

 

docker history mongo-express:latest

docker-history-mongo-express_latest

historyコマンドでイメージがどのように作られたかを確認することができます。