liguofeng29’s blog

個人勉強用ブログだっす。

Docker&DockerHubチュートリアル

参考

イメージ

f:id:liguofeng29:20170801102902p:plain

重要な用語

コンテナ

Dockerイメージから作られ、実行される仮想環境。

Dockerイメージ

コンテナーのファイルシステム、設定をまとめて保存したファイル。 複数のコンテナーで利用可能

Dcoker Hub

Dockerイメージを保存するレジストリ。githubのようなもの? DockerHub的なものが、AwsにはECR(Amazon EC2 Container Registry)がある。

Dockerfile

Dockerイメージの構築方法をコードとして記述したファイル

FROM java:8

ADD spring-boot-sample.jar /opt/spring-boot-sample/
EXPOSE 8080
WORKDIR /opt/spring-boot-sample/
CMD ["java", "-Xms512m", "-Xmx1g", "-jar", "spring-boot-sample.jar"]

チュートリアル

前提:

  1. docker install
  2. java8
  3. maven
  4. git

処理イメージ

  1. DockerfileからDokcerイメージする作成する
$ echo "イメージ一覧"
$ docker images  
  
$ echo "コンテナー一覧"
$ docker ps -a
  
$ echo "spring-bootのアプリをclone"
$ git clone https://github.com/liguofeng29/sample.git
$ cd sample
$ mvn clean package
  
$ echo "DockerfileからDokcerイメージ作成する"
$ sudo docker build -t spring-boot-docker-demo:first .
  
$ echo "イメージ一覧"
$ docker images

REPOSITORY                TAG                 IMAGE ID            CREATED              SIZE
spring-boot-docker-demo   first               9e6a5927b020        About a minute ago   656 MB
java                      8                   d23bdf5b1b1b        6 months ago         643 MB
  1. Dockerイメージからコンテナーを起動する
$ echo "ホスト9090をコンテナー8080へ転送で起動"
$ docker run -p 9090:8080 -t spring-boot-demo:first

$ echo "curlアプリ起動確認"
$ curl http://localhost:9090
  1. イメージをDockerHubへpushする
$ echo "DockerHubへログイン"
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: liguofeng29
Password:
Login Succeeded
  
$ echo "tagging"
$ docker tag 9e6a5927b020 liguofeng29/spring-boot-demo:first
$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
liguofeng29/spring-boot-demo   first               9e6a5927b020        16 minutes ago      656 MB
spring-boot-demo               first               9e6a5927b020        16 minutes ago      656 MB
java                           8                   d23bdf5b1b1b        6 months ago        643 MB

$ echo "push"
$ docker push liguofeng29/spring-boot-demo:first
first: digest: sha256:b7161bd07457c52efa7b92565482df73e3b8f9da52f24439498397eecca0f1a4 size: 2212
  1. コンテナーに新しいjarを配置する

vi src/main/java/org/lee/App.java

    @RequestMapping(value = "/now")
    String now() {
        return Calendar.getInstance().getTime().toString();
    }
$ echo "再ビルド"
$ mvn clean package
  
$ echo "コンテナー一覧"
$ docker ps -a
  
$ echo "コンテナーにjarをコピーする"
$ docker cp spring-boot-sample.jar コンテナーID:/opt/spring-boot-sample/
  
$ echo "コンテナー再起動"
$ docker restart コンテナーID
  
$ echon "検証"
$ curl http://localhost:9090

$ curl http://localhost:9090/now
→ 時刻が表示される
  1. コンテナーからイメージを作成&DockerHubへpush
$ echo "commit"
docker commit コンテナーID イメージ名:タグ名
例:docker commit 8eb5bba4cf8e liguofeng29/spring-boot-demo:second
  
$ echo "イメージ一覧"
docder images
    
$ echo "push"
$ docker push イメージ名:タグ名
例:docker push liguofeng29/spring-boot-demo:second

Dockerkコマンド一覧

コンテナ操作

  • attach コンテナにアタッチ
  • cp コンテナ・ホスト間でのファイルコピー
  • create コンテナ作成
  • diff コンテナのファイルシステム差分表示
  • exec 既存コンテナでコマンド実行
  • export コンテナをtarファイルで保存
  • history コンテナの履歴を表示
  • import tarファイルからコンテナ作成
  • inspect コンテナ・イメージの情報表示
  • kill コンテナの終了
  • logs コンテナのログ(出力)取得
  • pause コンテナの一時停止
  • port 公開ポートの表示
  • ps コンテナ一覧表示
  • rename コンテナ名の変更
  • restart コンテナの再起動
  • rm コンテナの削除
  • run コンテナの実行
  • start コンテナの実行
  • stats コンテナのリソース利用状況表示
  • stop コンテナの停止
  • top コンテナの実行状況表示
  • unpause コンテナの再開
  • update コンテナの設定を動的に変更
  • wait コンテナの終了を待つ

イメージ操作

  • build イメージのビルド
  • commit コンテナからイメージ作成
  • images イメージ一覧表示
  • inspect コンテナ・イメージの情報表示
  • load tarファイルからイメージ作成
  • rmi イメージの削除
  • save イメージをtar保存
  • tag イメージにタグ名を設定

Docker Hub(レジストリ)

  • login Docker Hub(レジストリ)にログイン
  • logout Docker Hub(レジストリ)からログアウト
  • pull Docker Hub(レジストリ)からコンテナ取得
  • push Docker Hub(レジストリ)にコンテナ保存
  • search Docker Hub(レジストリ)の検索

ネットワーク

  • network connect コンテナをネットワークに接続
  • network create ネットワーク作成
  • network disconnect コンテナのネットワークからの切断
  • network inspect ネットワークの状態表示
  • network ls ネットワーク一覧
  • network rm ネットワークの削除

ボリューム操作

  • volume create ボリュームの作成
  • volume inspect ボリュームの内容表示
  • volume ls ボリュームの一覧表示
  • volume rm ボリュームの削除

Swarmクラスタ

  • node accept Swarmノードをクラスタに追加
  • node demote Swarmノードをマネージャからワーカーに降格
  • node inspect Swarmノードの状態表示
  • node ls Swarmノードの一覧表示
  • node promote Swarmノードをワーカからマネージャに昇格
  • node rm Swarmノードをクラスタから削除
  • service create Swarmクラスタ上にサービス作成
  • service inspect Swarmクラスタ上にサービス状態表示
  • service ls Swarmクラスタ上のサービ一覧表示
  • service rm Swarmクラスタ上のサービス削除
  • service scale Swarmクラスタ上のサービスのコンテナ数(task)変更
  • service task Swarmクラスタ上のサービスのコンテナ(task)一覧表示
  • service update Swarmクラスタ上のサービスの設定変更
  • swarm init Swarmクラスタの作成
  • swarm join Swarmクラスタへのノード追加
  • swarm leave Swarmクラスタからのノード削除
  • swarm update Swarmクラスタの設定変更

プラグイン

  • plugin disable プラグインの無効化
  • plugin enable プラグインの有効化
  • plugin inspect プラグインの状態表示
  • plugin install プラグインのインストール
  • plugin ls プラグインの一覧表示
  • plugin rm プラグインの削除

その他

  • daemon サーバ起動
  • events イベントの監視
  • info Dockerの情報表示
  • system df ディスク利用状況の表示
  • system prune 不要なファイルの削除
  • version バージョン表示