20201023のdockerに関する記事は11件です。

docker エラー 削除コマンド

docker system prune

停止コンテナ、タグ無しイメージ、未使用ボリューム、未使用ネットワークを一括削除できます。

docker container prune

停止コンテナを一括削除できます。

docker image prune

未使用イメージを一括削除できます。

docker volume prune

未使用ボリュームを一括削除できます

docker network prune

未使用ネットワークを一括削除できます

エラー

docker-compose up -d workspace php-fpm nginx postgres
で下記のエラーが出てしましたが、既存のコンテナとイメージを消す事で解消できました。
上記のコマンドでdocker内の物を削除できます。
スクリーンショット 2020-10-23 22.21.49.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

仮想化方案についてまとめた上でDockerを業務で利用するところまで考えてみる

経緯

  • 社内のお仕事ではホスト型仮想化についてはしばしば利用されていますが,社内におけるコンテナ型の仮想化についての理解が浅いと危機感感じたので,メリットデメリットについてまとめて勉強会でもしてみようと思いました.
  • コンテナ型仮想化,というかDockerに触れることでその強みと弱みを認識してもらいつつ,これまでのレガシーな方式と比較してみるきっかけしてもらえればと思って作りました.
  • 自社の仕事のやり方が古かったり良くなかったりして「未だにそんなことやってるの」というご指摘があるかもしれませんが,それにすら気がつけていない可能性があるので,世の中の流れから取り残されることがないよう,そのような批判やご指摘を受けることも織り込んだ上,敢えて外に資料用意しました.
  • 諸々間違いがありそうな場合はご指摘ください
  • Apache + PHP + Postgres(MySQL)のような構成の業務Webアプリを作る仕事が多い前提

読んでほしい人

  • 開発環境を構築する機会が多い人
  • これからどのようなアプリケーションが組み上がるのかの情報無しでとりあえずインフラ構築を投げられた人
    • サーバやインフラ用意するにあたりOSやCPUやメモリ,ネットワーク帯域など色々検討しなければならないが,その答えがもらえない中で仕事をしなければならない状況のかわいそうな人
  • 開発環境と本番環境の差異でハマったことがある人
  • 開発環境と本番環境の差異に辟易している人
  • インフラ面倒なのでアプリケーションの開発に注力したい人
    • アプリケーションを作りたいけどマシンのセットアップとかやりたくない・嫌いな人
  • 仕事を早く終わらせたい人
    • ソフトウェア資産などを再利用したい人
  • コードのデプロイでファイル編集したりファイルをコピーしたりしている人
    • CI/CDとまで言わないでももう少しかっこよくしたい人
  • これからDocker使ってみようかなと思っている人

仮想化とは

仮想化とは、ソフトウェアによって複数のハードウェアを統合し、自由なスペックでハードウェアを再現する技術で、限られた数量の物理リソース(CPU、メモリ、ハードディスク、ネットワーク等)を、実際の数量以上のリソース(論理リソース)が稼働しているかのように見せかけることです。
仮想化とは
https://www.fsi.co.jp/solution/vmware/knowledge/virtualization.html

これによって仕事が楽になったり,余剰計算機リソースを有効に活用できるようになったり,システムの可用性が上がったり様々な良いことがあります


仮想化の種類

  • ホスト型
  • ハイパバイザ型
  • コンテナ型

大きく3つの仮想化方案を例として挙げて,一般的なサーバとの比較とともにメリットデメリットをまとめる


仮想化しないという選択肢(一般的なサーバ)

ハードウェアに直接インストールされたOS上でアプリケーションが動作するもの

image.png

  • 利点

    • 単純明快アプリが動く
    • アプリケーションの稼働に際したオーバーヘッドが少ない
  • 欠点

    • アプリケーション同士でシステムの設定を共有する場合などに悪影響が生じる場合もある
    • 計算機リソースが有効に活用できない(例えば1日に1回,1時間しか稼働しないアプリケーションでは,のこりの23時間は待機状態でサーバが起動することになる )

ホスト型仮想化

ハードウェアに直接インストールされたOSを上で動作する仮想環境上でゲストOSを稼働させる方式

image.png

  • 利点

    • 仮想化を利用していなかったサーバでも導入が容易
  • 欠点

    • ゲストOS上のアプリケーションが稼働する際,ハードウェアを利用する場合などに,ゲストOSとホストOSを経由するため比較的オーバヘッドが大きい
  • 製品やアプリケーション

    • VMware Workstation/Player/Fusion
    • VirtualBox
    • Hyper-V
    • Windows7以降のXPモードとか

ハイパバイザ型仮想化

ハードウェアにハイパバイザと呼ばれる仮想環境管理ソフトウェアを稼働させる方式

image.png

  • 利点

    • ホストOSを利用しないため,ハードウェアを直接ゲストOSにアタッチすることが可能
    • ゲストOS上のアプリケーションが稼働する際のオーバーヘッドがホスト型に比べて少ない
    • ハイパバイザでは,割と容易に仮想環境を管理できる機能が備えられていることが多い
  • 欠点

    • サーバ上では既存のホストOSが利用できないため,ハイパバイザをインストールしたサーバを新たに構築する必要がある
  • 製品やアプリケーション

    • Vmware ESXi
    • Xen
    • VMware vSphere
    • Hyper-V

コンテナ型仮想化

ホストOS上にプロセスとして実行されるコンテナエンジンが稼働し,アプリケーションとしてコンテナを実行する
仮想マシンでなくプロセスを仮想化する

image.png

  • 利点

    • 仮想環境をコンテナとして用意すれば良いので軽量
    • ゲストOSを介さないので起動が早い
  • 欠点

    • 異なるホストOS向けのコンテナは利用できない(LinuxOS上でWindowsOS用のコンテナは動かない)
    • ハードウェアを利用する場合,ホストOSとの兼ね合いがあるので少しめんどくさい
    • OSをホストと共有する点で,仮想マシンを用いる方式よりも自由度は低くなる
    • アプリケーションのレイヤでプロセスとして稼働してくれるが,後述するDockerイメージが割と大きいのでホスト側のストレージが小さいと運用に苦心する.
    • 保存すべきファイルやデータはきちんと「永続化」しておかないとコンテナ削除した時にまとめて消える.
  • 製品やアプリケーション

    • Docker
    • Kubernetes(K8s)?

Dockerを使ってみる

このように様々な仮想化の方式がありますが,今回はコンテナ型仮想化を用いているDockerを利用してWebアプリケーションの開発環境の構築などに活用する方法を紹介します

  • コンテナ仮想化はプロセスとして仮想化する方式
    • 「Dockerイメージ」と呼ばれるコンテナのテンプレートのを利用する
    • DockerHubのリポジトリから取得して利用できるほか,既存イメージをベースとして自身でイメージを作成することも可能です
    • その場合Dockerfileを利用してイメージ作成手順を記述します.これによってセットアップ手順をレシピ化することが可能です

イメージやDockerファイルを利用したコンテナ仮想化を志向することにより,

  • 誰が起動しても(概ね)同じ結果になる
  • 開発環境と本番環境をはじめからDockerを前提に構築しておけば差異が少ないためリリースの手間も少なくなる
  • 必要なときに開発環境のコンテナ起動すれば良い
    • 大きなインスタンスに開発環境を備えて待機しておくのではなく,リポジトリなどに保管しておいて所定の手順で都度起動・デプロイするようにすればインスタンスの運用費用も減る.

といった利点が生まれてくることになります.
DockerイメージはOSレベルからアプリレベルまで様々な粒度で用意されており,利用者のニーズに合わせて構築が可能です.


  • Webサーバを利用したい場合:
    • Apacheのイメージのみ利用する
    • OSのイメージを利用してDockerfileにApacheのインストール・セットアップ手順を記述する  
  • Webサーバに加えてPHPを利用したい場合:
    • Apache+PHPのイメージを利用する
    • OSのイメージを利用してDockerfileにApacheとPHPのインストール・セットアップ手順を記述する

Dockerの活用

  • 開発環境も本番環境もはじめからDockerを用いて構築する前提としていれば全く同じ環境を構築しやすい
  • Dockerfileにレシピ化してあれば,個別に環境構築する際などにサーバ設定の取りこぼしたりするのを防げる

Dockerのインストールとサービスの起動

サーバ上(手元のサーバやVPSなど)にDockerをインストールする手順について紹介します

下記で詳しく解説されていますので抜粋して紹介します.

Docker入門(第二回)~Dockerセットアップ、コンテナ起動~
https://knowledge.sakura.ad.jp/13795/

インストール

CentOSを前提にした場合,下記のコマンドによりインストールが可能です.

# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce

サービスの起動

起動後,ステータスの確認と再起動時のサービス自動起動設定を併せて行っています

# systemctl start docker
# systemctl status docker
# systemctl enable docker

※ちなみにDockerにはCE(コミュニティエディション)とEE(エンタープライズエディション)がある

DockerとDocker-CEの違いについて
https://qiita.com/s-suefusa/items/cb3c4044da3b3657dbd0


イメージを取得してコンテナを起動する

Webサーバのイメージを取得して,イメージの起動を行ってみます.

イメージの取得

NginxというWebサーバのイメージを取得してきて,イメージが追加されたことを下記の通り確認します.

# docker pull nginx
# docker images

イメージの起動

取得したNginxイメージを使用してコンテナを起動します.
起動する際に,ホストとコンテナ側のポートの関連付けを行っており,下記の例ではホスト側8181番をコンテナ側80番に関連付けしています.

# docker run -d --name nginx-container -p 8181:80 nginx

Webサーバを見てみる

http://(サーバのIPアドレス):8181

にアクセスするとWebサーバが起動していることが確認できます.

ホストOSとコンテナ間のファイル共有方法

ここまでイメージの取得や起動方法について述べましたが,Web開発においてはサーバを構築した後に表示するファイルやデータを配置する必要がありますが,その際にコンテナとホストでファイルの交換を行う方法について下記にまとめます.

ホストOSのディレクトリをコンテナ側にマウントする方法

コンテナ起動時に「-v」オプションを指定することで,ホスト側のディレクトリをコンテナ側にマウントすることが可能です.

# docker run -v /host_path:/container_path -d --name nginx-container -p 8181:80 nginx

SSH/SCPによる方法

ホストOSからはコンテナ名で名前解決ができるので,SSHによるログインを行うこともできます.

サーバ建てる方法

sambaだとかFTPサーバなどをコンテナ内にセットアップすることファイル交換ができるようになる方案もあるような気がします.

色々ありますが,Webサーバの場合だとコンテナ構築時(あるいは構築後)にリポジトリからソース持ってきて配置するようなかたちでファイルの配置を人手で行うことなく,リリースのスクリプトも用意しておくと美しい気がします.


複数のコンテナを利用したい場合

複数のコンテナを利用する場合,個別にコンテナを起動するのは面倒なのでdocker-composeなどを利用することによりこの手間を省けます

Docker Compose 概要
Compose とは、複数のコンテナを定義し実行する Docker アプリケーションのためのツールです。Compose においては YAML ファイルを使ってアプリケーションサービスの設定を行います。コマンドを1つ実行するだけで、設定内容に基づいたアプリケーションサービスの生成、起動を行います。
https://docs.docker.jp/compose/overview.html


docker-composeのインストールと使い方

以下のコマンドでインストールできます.

※注意

ダウンロードコマンド内での Compose 最新リリース番号の利用は上に示したコマンドは一つの例ですから、すでに古いリリース番号になっているかもしれません。 最新版であるかどうかは GitHub 上にある Compose リポジトリのリリースページ を確認してください。

Releases ・ docker/compose
https://github.com/docker/compose/releases

# sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# sudo chmod +x /usr/local/bin/docker-compose
# docker-compose --version
docker-compose version 1.16.1, build 1719ceb

docker-compose.ymlの記述例

docker-composeを利用すると複数のコンテナを用いる場合の構築作業や起動処理の手間が省けます.

Webアプリケーション向けのApache+PHP+MySQLを用いる環境について,下記にdocker-compose.ymlの記述例を示します.(phpmyadmin付き)

docker-compose.ymlにはコンテナの種類やDockerfileのパス,コンテナ起動時の設定やオプションを記述することができますが,docker-compose.yml内で参照する場所にそれぞれのファイルを配置する必要があります.dockerfileなどのディレクトリ構成については下記リポジトリを参照してください.

docker-apache-php-mariadb
https://github.com/nc30mtd/docker-apache-php-mariadb

docker-compose.yml
version: "3"
services:
  #Web 
  template-web:
    container_name: template-web
    build: ./setup
    privileged: true
    volumes:
      - ./html:/var/www/html
    ports:
      - 80:80
    depends_on:
      - template-db
    tty: true
    stdin_open: true

  # MySQL
  template-db:
    image: mariadb:latest
    restart: always
    container_name: template-db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: templatedb(ここ気をつけて)
      MYSQL_USER: templatedbuser(ここ気をつけて)
      MYSQL_PASSWORD: templatedbpass(ここ気をつけて)
      MYSQL_START_TIMEOUT: 1200000
      TZ: 'Asia/Tokyo'
    volumes:
      - ./database/data:/var/lib/mysql
      - ./database/sql:/docker-entrypoint-initdb.d
      - ./database/log/mysql:/var/log/mysql
    ports:
      - 3306:3306

  # phpmyadmin
  template-phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_ARBITRARY: 1
      PMA_HOST: template-db(ここ気をつけて)
      PMA_USER: templatedbuser(ここ気をつけて)
      PMA_PASSWORD: templatedbpass(ここ気をつけて)
      PMA_PORT: 3306
    links:
      - template-db
    ports:
      - 8080:80
    volumes:
      - ./phpMyAdmin/sessions:/sessions
    depends_on:
      - template-db

docker-composeを利用する場合のコンテナ起動・停止処置

起動

起動したいコンテナ群のdocker-compose.ymlファイルが有るディレクトリで下記のコマンドを実行する

# docker-compose up

バックグラウンドで起動する場合は「-d」オプションを付与します.

# docker-compose up -d

停止

# docker-compose down

docker-composeを利用する場合のベストプラクティス

Webサーバ+PHP+DBのよくあるWebアプリケーションを構成する場合

  • 一つのコンテナに何でもかんでも全部詰めない

    • おそらくなんでも詰め始めるとDockerfileが複雑になるはず
    • あとから見ても良くわからない.再利用しにくい.
  • 全部自分で作らない

    • 世の中には自分よりすごい人達が,より良いイメージやコンテナを作ってくれている
    • 巨人の方に乗れ
  • せめてWeb(+PHP)とDBくらいに分けてコンテナ作る

    • DBアプリのバージョンアップに際した検証などを行う場合,DBコンテナだけ新しいバージョンのDBアプリを稼働させてアプリ側だけメンテすれば良い
    • うまくプリミティブな処理の組み合わせで疎結合にシステムを構成することができると,開発が大変だが改修時などの手間が少ない.(デグレも少ないはず)
    • 戦場は多くても収束した後に戦線が広がりにくい(補給線が伸び切らない)

など,イメージやコンテナの組み合わせを考えるだけで比較的仕事がサクサク進む環境を組み上げることができる


出典・参考

https://www.fsi.co.jp/solution/vmware/knowledge/virtualization.html
https://qiita.com/r-tominaga/items/8ac588d603802572185f
https://qiita.com/Qiita/items/4ff5873776992f0511d6
https://docs.docker.jp/compose/overview.html
https://qiita.com/s-suefusa/items/cb3c4044da3b3657dbd0

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでMariaDBが起動しない【 InnoDB: Failed to set O_DIRECT on file ./ibdata1: OPEN: Invalid argument, continuing anyway. O_DIRECT is known to result in 'Invalid argument' on Linux on tmpfs】

Dockerにて、下記のエラーによりMariaDBが起動しない時の対処した方法です。

[Warning] InnoDB: Failed to set O_DIRECT on file ./ibdata1: OPEN: Invalid argument, continuing anyway. O_DIRECT is known to result in 'Invalid argument' on Linux on tmpfs
[ERROR] Plugin 'InnoDB' init function returned error.
mariadb_1 
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
mariadb_1  
[Note] Plugin 'FEEDBACK' is disabled.
mariadb_1  
[ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
mariadb_1 
[ERROR] Unknown/unsupported storage engine: InnoDB
mariadb_1   
[ERROR] Aborting

docker-compose.ymlを修正することで解決

docker-compose.yml
mariadb:
    build: ./mariadb
    volumes:
      - ./mariadb/data:/var/lib/mysql
    ports:
      - 3306:3306

↓↓↓↓↓↓↓

docker-compose.yml
mariadb:
    build: ./mariadb
    volumes:
      - ./mariadb/data:/var/lib/mariadb #変更
    ports:
      - 3306:3306

/var/lib/mysql/var/lib/mariadbに変更することでMariaDBを起動することができました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Jitsi Meetをdocker-composeでAzure上に構築するメモ

jitsi meetのセルフホスティングを試してみてます。 (WIP)

書きかけだけど一旦公開

freenomで取得したドメインとの紐付けまでやってみます。

Jitsi Meet

フリーで使えるビデオチャットツールです。
セルフホスティングが可能です。

1. 下準備

ドメインとサーバーの下準備です。

AzureのVMインスタンスを作成

AzureでUbuntuサーバー(v18系)を作成します。

立ち上げ時にSSH,HTTP,HTTPSのポートを許可しておきます。

作成したらパブリックIPアドレスが発行されるのでアドレスを控えておきます。

freenomで無料ドメイン取得

freenomで無料でドメインを取得します。

https://hogehoge-meet.cfを取得しました。

DNSの設定で先程のAzureのVMのIPアドレスを指定します。

2. ubuntuにJitsiをインストールしていく

ubuntuにdocker-compose経由でJitsiをインストールします。

2-1. docker-composeを利用できるようにする

今回はdocker-composeでインストールします。その辺の準備から

dockerのインストール

curl -fsSL https://get.docker.com -o get-docker.sh

sh get-docker.sh

docker composeのインストール

sudo apt install docker-compose -y

2-2. Jitsiのダウンロードと設定

docker-jitsi-meetをcloneする

cloneしたフォルダ内に入ります。

git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet

.env設定

docker-jitsi-meetフォルダ内での作業です。

cp env.example .env
sudo vim .env

編集

2-3. Jitsiのインストール

イメージを落としてきます。

sudo docker-compose pull

以下で立ち上げましょう。

sudo docker-compose up -d

一見、処理が終わったように見えますが、プロセスが完了するまで少し時間がかかります。

以下で

sudo docker-compose logs -f web

3 動作

起動してアドレスにアクセスすると無事にスタート画面が表示されました。

4. 失敗した場合

URLにアクセスしてもうまくいかない場合は.envを再度編集などして、シャットダウンして再起動してみましょう

sudo docker-compose down

だいたいが.envの設定か、ファイヤーウォールの設定が原因だと思います。

ちなみに--rmi allでイメージごと削除できます。

sudo docker-compose down --rmi all
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dockerをEC2インスタンスにインストールしてみた

経緯

dockerを知らないとヤバイみたいなことが言われているが、
初学者の自分にはそもそもdockerが何か、何の役に立つのか良くわからない。参考書を買ったが何書いてあるか良くわからない。
取りあえず実際にいじくってみたら何かわかるかと思ってやってみた。

インストール

AWSでのサーバー構築を学習していたので、このとき作ったインスタンスにインストールして
やってみる。もし途中でわからなくなっても、インスタンスを終了すればリセットできると
思ったので、このようにしました。

まず、インスタンスにログイン

% ssh -i キーペア ec2-user@ドメイン名

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

次にdockerをインストール

$ sudo amazon-linux-extras install docker

一度止まるのでyを入力して進めると、インストール完了。
dockerを起動してみる。

$ sudo service docker start
Redirecting to /bin/systemctl start docker.service

dockerの権限をec2-userにして、操作時にsudoをつけなくてもいいようにする。

$ sudo usermod -a -G docker ec2-user

設定を反映する為に一度インスタンスからログアウト

$ exit

もう一度インスタンスにログインして、確認してみる

$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 金 2020-10-23 05:16:20 UTC; 5min ago
     Docs: https://docs.docker.com

active (running)って書いてるから動いてそう。

次に

とりあえずインストールができたので、これからいじくってみようと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

5.Docker

コマンド

docker create

コンテナを作る

docker start

コンテナを実行する

※run = create + start

docker run [image] [command]

デフォルトのコマンド上書き
「docker run」の後ろに追加でコマンドを打てば、そのデフォルトのコマンドが上書きされて、この[command]が実行される

-it とは

-i と -t の二つのオプションが連なっている。

-i

inputのチャネルを開くオプション。
inputのチャネルとは、stdinというチャネル
stdinというチャネルを開くとキーボードから打った内容がlinuxに届いたりする。
ホストからコンテナのstdinのチャネルを開くというチャネル。
「-i」を省いてdocker run(bashを起動)すると、コンテナに打ったコマンドの情報が伝わらない。

-t

出力した結果をきれいにする。(prettyにする)。
prettyな出力結果を表示するためのコマンド。

docker rm

コンテナの削除
コンテナが動いていたら削除できない。(docker stopで止める)

docker system prune

exitedのコンテナを全て削除。
使っていないダングリングイメージ(まだ何も使っていないイメージ)や、キャッシュも消せる。

docker run --name [container_name] [image]

コンテナ名の指定
コンテナに名前を付けて起動できる。
バックグラウンドでコンテナを動かしておきたい時や、共有サーバーを使っていて色々な人がそこにコンテナを立てる。という時に名前が必要になる。
他のプログラムからコンテナにアクセスする時やコンテナを使ったりする場合も、名前を付けておくことですぐ呼び出せる。

コンテナの独立性

同じdocker imageから二つのコンテナを立てても、それぞれコンテナのファイルシステムは独立している。
コンテナの中で作業をしても、他のコンテナやホストに影響がない。

コンテナの二つの使い方

・コンテナをバックグラウンドで常に動かしておくケース
・コンテナを立てて使い切りで捨ててしまうケース

docker run -d [image]

コンテナをバックグラウンドで常に動かしておくケースは「-d」。
開発環境で使う時などは裏でコンテナを常に起動しておく必要があるので、「-d」コマンドを使いdetachedモードにする。
-d ・・・ detached

detachedモード

コンテナを起動してすぐdetachしてホストに戻る。裏でコンテナは動いている。

detachedモード ⇆ foregroundモード

foregroundモード

「-d」を付けないで起動するコンテナ
直接コンテナに入ったり、一度コンテナを立てて何かプログラムを起動して、すぐにコンテナを消すケース

docker run --rm [image]
コンテナからexitするとすぐにそのコンテナを削除する。

最後に

この記事は、かめさん( https://twitter.com/usdatascientist?s=21 )のudemyのdocker講座の( https://www.udemy.com/share/103aTRAEMfeVhaTXoB/ )書き起こしです。

※あくまで、自分のための書き残しとして投稿しているので、講座と異なる部分を含んでいる可能性があります。

かめさんのブログ( https://datawokagaku.com/docker_lecture/ )

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初学者によるDocker理解まとめ④ 〜EC2インスタンスを起動してdockerをインストールするまで〜

はじめに

ようやくDockerを学び始めたので自分の理解をまとめておく。
とはいえ、今回はほぼdocker関係ないです。

やったこと

  • VPCにパブリックサブネットを設置
  • 上記VPCにEC2インスタンスを設置
  • EC2インスタンスにdockerとdocker-composeをインストール

これだけです。
図にして(無駄にめんどくさく)表すとこんな感じ。
スクリーンショット 2020-10-23 14.01.16.png

VPCにパブリックサブネットを設置

まずはVPCコンソールにアクセス

自分はus-east-2リージョンをいつも選択しています。特に意味はないです。
スクリーンショット 2020-10-23 14.12.47.png

とりあえずVPCを作成

CIDRブロックは開発シーンではしっかりと考える必要があるが、ここでは適当に10.0.0.0/24を指定。キリがいい/16とか/24がおすすめ。
テナンシーは、リソースを占有するかどうかだが、個人開発で気にする必要はないと思われる。
スクリーンショット 2020-10-23 14.15.20.png

IGWを作成してVPCにアタッチ

作成。
スクリーンショット 2020-10-23 14.25.03.png

そして先ほど作成したVPCにアタッチ。
スクリーンショット 2020-10-23 14.27.29.png

まだこれだけ。
スクリーンショット 2020-10-23 14.38.36.png

サブネットを作成

先ほど作ったVPCの中にサブネットを作成。
CIDRブロックは/28に設定。これでサブネットの中に2^(32-28)−5=11個のIPアドレスを持つことができる。
また、AZはus-east-2aに設定。
スクリーンショット 2020-10-23 14.44.22.png

また、サブネットのパブリックIPv4アドレスの自動割り当てを有効化しておく。
スクリーンショット 2020-10-23 14.47.36.png

ここまで来た。
スクリーンショット 2020-10-23 14.50.44.png

ルートテーブルを作成

先ほど作ったVPCの中にルートテーブルを作成。
スクリーンショット 2020-10-23 14.55.12.png

作成したルートテーブルを先ほど作ったサブネットに関連づける。
スクリーンショット 2020-10-23 14.57.38.png

IGWへのルートを設定してインターネットに接続できるようにする。
スクリーンショット 2020-10-23 14.59.02.png

ちょっと進んだ。
スクリーンショット 2020-10-23 15.04.17.png

上記VPCにEC2インスタンスを設置

EC2コンソールにアクセス

スクリーンショット 2020-10-23 15.16.04.png

インスタンスの設定

AMIは無料枠のAmazon Linux2を選択。
インスタンスタイプも無料枠のt2.microを選択。

インスタンスの詳細設定では、先ほど作ったVPCとサブネットを選択する。
また、自動割り当てパブリックIPを有効化しておく。
その他のオプションは今回設定しない。
スクリーンショット 2020-10-23 15.20.55.png

ストレージはデフォルトのEBS設定でOK。
スクリーンショット 2020-10-23 15.23.28.png

タグは適当に設定
スクリーンショット 2020-10-23 15.24.10.png

セキュリティグループを設定する。
SSHとHTTPのインバウンド通信を全て許可し、アウトバウンドは全ての通信を許可する。
スクリーンショット 2020-10-23 15.32.43.png

キーペアがなければ新しく作る。
スクリーンショット 2020-10-23 15.35.53.png

ようやくここまで来た。
スクリーンショット 2020-10-23 15.37.47.png

EC2インスタンスにdockerとdocker-composeをインストール

ローカルPCからEC2インスタンスに接続

EC2のコンソールで対象インスタンスを選んで「接続」ボタンを押すと下記画面になる。
基本的にはこれに従うだけ。
スクリーンショット 2020-10-23 15.41.47.png

キーペアが~/Downloadsに保存してあるとすると、下記コマンドで接続できる。

cd ~
mv Downloads/ec2-key.pem .ssh/
cd .ssh/
chmod 400 ec2-key.pem
ssh -i "ec2-key.pem" ec2-user@<your-ec2-public-ip>

chmodの意味についてこちらの記事がとても参考になりました。ありがとうございました。

ほぼほぼゴールまで来た。(いや、スタートかも)
スクリーンショット 2020-10-23 15.50.47.png

dockerをEC2にインストール

sudo yum -y update
sudo yum install -y docker
sudo gpasswd -a $USER docker
sudo service docker start

再度ログインしなおすと、dockerが使えるようになっている。
参考

docker-composeをEC2にインストール

docker-composeもインストールする必要があるので、公式ドキュメントにしたがってインストールする。

sudo -i
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
exit

これでインストールできた。一応ゴール。
スクリーンショット 2020-10-23 16.03.47.png

せっかくなので、AMIを保存しておく

dockerをインストール済みの全ての設定を含むイメージをAMIとして保存することができる。
これを使えば、次回にEC2インスタンスを起動するとき、dockerをインストールする必要はない。
インスタンスの設定画面からアクションでAMIを作成できる。
スクリーンショット 2020-10-23 16.02.38.png

最後に

やっぱりdocker関係なかったです。
ほぼEC2の基礎の記事となってしまいました。
ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dockerでdocker-compose up -dができない

困りごと

macos 2020 にて、
どこかしらのディレクトリでサーバーに接続したいとき、
dockerは起動しているのに、ターミナルで、

docker-compose up -d

としても、エラーが出てしまいます↓

ERROR:
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml
E41F52C2-788C-4ED3-B6C5-019E45F957C2_4_5005_c.jpeg

解決

どこかしら別のディレクトリでdocker-compose up -dを起動したままだった為でした。
そのディレクトリにて停止させます。ターミナルで、

docker-compose stop

これで一旦落着!

おわり。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初学者によるDocker理解まとめ③ 〜nginxを使ってAPIをproxyするまで〜

はじめに

ようやくDockerを学び始めたので自分の理解をまとめておく。

今日の学びをメモ

ローカルPC上でnode.jsでexpressを実行するコンテナとnginxを実行するコンテナを立ち上げる。そしてnginxを経由してexpressのAPIを叩く。たったこれだけをdocker-composeを使ってやってみた。

前回までと今回の違い

前回ではexpressのコンテナにアクセスするためにportをしているする必要があった。

curl http://localhost:3000
Hello

スクリーンショット 2020-10-22 22.22.35.png

今回はnginxのproxy機能を用いて、portを指定せずexpressのコンテナにアクセスできるようにした。

curl http://:localhost
Hello

スクリーンショット 2020-10-23 8.32.39.png

開発の全体像

cd ~
mkdir sample

sampleディレクトリの中で開発する。ディレクトリの中身はこんな感じになる。
appディレクトリとwebディレクトリがそれぞれexpressとnginxのコンテナとなる。
スクリーンショット 2020-10-23 8.24.02.png

index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hello').status(200);
});

app.listen(3000, () => {
  console.log('Listening on port 3000');
});

expressバックエンドのDockerfileの準備

FROM node:alpine

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .
# package.jsonをコピー後にnpm installするという作業をビルドの度に毎回やりたくない。
# そのため、上記を終わらせてから COPY. .をやる。
# そうすればコードを変えた部分だけビルドが実行される。

EXPOSE 3000
CMD [ "node", "index.js" ]

nginx.confの準備

nginxコンテナの中の、localhostの80port(つまりhttpのデフォルトport)の全てのエンドポイント(/)に来たリクエストをhttp://app:3000にproxyする。
Dockerの管理下において、appコンテナのドメインがappになっていることに注目。
ちなみに、この設定ファイル名はnginx.confで固定とのこと。配置場所はwebディレクトリ以下であれば特に気にしない。

nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 1024;
}

http {
    # Weather Report Reverse Proxy
         server {
            listen 80;
            server_name localhost 127.0.0.1;

            location / {
                proxy_pass          http://app:3000;
                proxy_set_header    X-Forwarded-For $remote_addr;
            }

        }
}

docker-compose.ymlの準備

docker-compose.yml
version: '3'
# 何も考えず3を指定
services:
  app:
    build:
      context: ./app
      # docker-compose.ymlから見て./appにあるDockerfileにしたがってビルドする
    container_name: express-app
    # 一応コンテナ名をつける
    ports:
      - '3000:3000'
      # docker run -p 3000:3000 app と一緒
    volumes:
      - './app:/usr/src/app'
      # ローカルPCの./appフォルダと、コンテナ内の ~/usr/src/appフォルダを同期させる。
      # docker exec -it express-app sh で確認できる

  web:
    image: nginx:latest 
    #nginx:alpilneだとエラーが起きるので、一応最新版で対応。
    container_name: nginx-web
    ports:
      - '80:80'
    volumes:
      - './web/reverse_proxy/nginx.conf:/etc/nginx/nginx.conf'
      # ローカルPCの./web/reverse_proxy/nginx.confと、コンテナ内の ~/etc/nginx/nginx.confを同期させる。
      # ~/etc/nginx/nginx.confは場所指定。
    links:
      - app
    depends_on:
      - app
      # appコンテナが起動しないと機能しない、という依存関係を明記。

docker-compose up して終わり

docker-compose upすればコンテナが立ち上がります。
ローカルPCからcurlコマンドを打てばappコンテナから返事が帰ってきます。最初の図の通りです。

curl http://localhost
Hello

ちなみに直接appコンテナにもアクセスできます。当然ですが。

curl http://localhost:3000
Hello

最後に

初歩中の初歩をまとめました。
ちなみに、自分は何度やってもnginxがうまく起動せず絶望しかけましたが、docker psをするとk8s_controller_ingress-nginx-controllerという謎のコンテナ(というかkubernetesのingressだと思われる)がdocker stopしても止まらないことに気付きました。kubernetesを再起動すると直ったので、仮にそんな状況があれば試すのもいいかと思います。

スクリーンショット 2020-10-23 9.33.31.png

ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

spring × docker

背景

現在springとdockerの勉強をしている。

どうせやるならdockerを使ってspringの開発環境の構築をしたい。

公式tutorialや他の記事を色々調べてみたがいまいち規則性がわからず困っている。

原因はそもそも自分のdockerに対する知識不足の面もある

勉強しつつ自分の判断軸を作りたい。

Dockerを学習する目的

  • 開発環境構築を楽にしたい
  • 新しくジョインする方の環境セットアップを楽にしたい
  • 開発環境に問題が起きると修復だけでかなり時間がかかることがある、その時間を減らしたい

参考記事

Dockerで開発環境構築を10倍楽にしたはなし

Running Spring Tool Suite and other GUI applications from Docker containers

Running Spring Tool Suite and other GUI applications from a Docker container

MySQL環境を構築する場合

Java11+Spring Boot+Dockerで作るWebアプリケーション

docker-compose でMySQL環境簡単構築

APIを作る場合

Docker上でSpring Bootを動かしてみる

SpringBoot+DockerでAPIを作る方法を0から書いてみる

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Minishiftで遊んでみよう!手軽にkubernetesを体験するの巻

はじめに

無料でOpenshiftを試せるminishiftで遊んでみました。という内容です。

環境

macOS Catalina (10.15.4)
Minishift (1.34.3)
Minishift 最新versionを確認

Minishiftでは、OpenShiftクラスターがプロビジョニングされている仮想マシンを起動するためにハイパーバイザーが必要なので、ハイパーバイザーがシステムにインストールされ、有効になっている必要があります

インストール方法

プラットフォームごとにインストール手順がいつくかあります
・ macOS → hyperkit
・ Linux → KVM
・ Windows → Hyper-V
・ All Platforms → VirtualBox

今回は、VirtualBoxを利用していこうと思います。
理由としては、この手順でのインストール方法で検証されている方が多く、過去にも試したことがある為です

VirtualBoxのインストール

こちらのコマンドを実施します

brew cask install minishift

minishiftのインストール

こちらのコマンドを実施します

brew cask install minishift

VirtualBoxを利用して、minishiftを起動します

引数で--vm-driver=virtualboxを指定することで、virtualboxでの起動が可能になります

minishift start --vm-driver=virtualbox

実行ログ

-- Starting profile 'minishift'
-- Check if deprecated options are used ... OK
-- Checking if https://github.com is reachable ... OK
-- Checking if requested OpenShift version 'v3.11.0' is valid ... OK
-- Checking if requested OpenShift version 'v3.11.0' is supported ... OK
-- Checking if requested hypervisor 'virtualbox' is supported on this platform ... OK
-- Checking if VirtualBox is installed ... OK
-- Checking the ISO URL ... OK
-- Downloading OpenShift binary 'oc' version 'v3.11.0'
 53.27 MiB / 53.27 MiB [============================================] 100.00% 0s-- Downloading OpenShift v3.11.0 checksums ... OK
-- Checking if provided oc flags are supported ... OK
-- Starting the OpenShift cluster using 'virtualbox' hypervisor ...
-- Minishift VM will be configured with ...
   Memory:    4 GB
   vCPUs :    2
   Disk size: 20 GB

   Downloading ISO 'https://github.com/minishift/minishift-centos-iso/releases/download/v1.16.0/minishift-centos7.iso'
 370.00 MiB / 370.00 MiB [==========================================] 100.00% 0s
-- Starting Minishift VM .................................. OK
-- Checking for IP address ... OK
-- Checking for nameservers ... OK
-- Checking if external host is reachable from the Minishift VM ...
   Pinging 8.8.8.8 ... OK
-- Checking HTTP connectivity from the VM ...
   Retrieving http://minishift.io/index.html ... OK
-- Checking if persistent storage volume is mounted ... OK
-- Checking available disk space ... 1% used OK
-- Writing current configuration for static assignment of IP address ... OK
   Importing 'openshift/origin-control-plane:v3.11.0' . CACHE MISS
   Importing 'openshift/origin-docker-registry:v3.11.0' . CACHE MISS
   Importing 'openshift/origin-haproxy-router:v3.11.0' . CACHE MISS
-- OpenShift cluster will be configured with ...
   Version: v3.11.0
-- Pulling the OpenShift Container Image ............. OK
-- Copying oc binary from the OpenShift container image to VM ... OK
-- Starting OpenShift cluster ............................................................
Getting a Docker client ...
Checking if image openshift/origin-control-plane:v3.11.0 is available ...
Pulling image openshift/origin-cli:v3.11.0
E1022 15:53:08.320557    2643 helper.go:173] Reading docker config from /home/docker/.docker/config.json failed: open /home/docker/.docker/config.json: no such file or directory, will attempt to pull image docker.io/openshift/origin-cli:v3.11.0 anonymously
Image pull complete
Pulling image openshift/origin-node:v3.11.0
E1022 15:53:13.117920    2643 helper.go:173] Reading docker config from /home/docker/.docker/config.json failed: open /home/docker/.docker/config.json: no such file or directory, will attempt to pull image docker.io/openshift/origin-node:v3.11.0 anonymously
Pulled 5/6 layers, 88% complete
Pulled 6/6 layers, 100% complete
Extracting
Image pull complete
Checking type of volume mount ...
Determining server IP ...
Using public hostname IP 192.168.99.100 as the host IP
Checking if OpenShift is already running ...
Checking for supported Docker version (=>1.22) ...
Checking if insecured registry is configured properly in Docker ...
Checking if required ports are available ...
Checking if OpenShift client is configured properly ...
Checking if image openshift/origin-control-plane:v3.11.0 is available ...
Starting OpenShift using openshift/origin-control-plane:v3.11.0 ...
I1022 15:53:26.585128    2643 config.go:40] Running "create-master-config"
I1022 15:53:28.548205    2643 config.go:46] Running "create-node-config"
I1022 15:53:29.414864    2643 flags.go:30] Running "create-kubelet-flags"
I1022 15:53:29.756520    2643 run_kubelet.go:49] Running "start-kubelet"
I1022 15:53:29.943541    2643 run_self_hosted.go:181] Waiting for the kube-apiserver to be ready ...
I1022 15:54:13.959145    2643 interface.go:26] Installing "kube-proxy" ...
I1022 15:54:13.959163    2643 interface.go:26] Installing "kube-dns" ...
I1022 15:54:13.959169    2643 interface.go:26] Installing "openshift-service-cert-signer-operator" ...
I1022 15:54:13.959185    2643 interface.go:26] Installing "openshift-apiserver" ...
I1022 15:54:13.959211    2643 apply_template.go:81] Installing "openshift-apiserver"
I1022 15:54:13.960047    2643 apply_template.go:81] Installing "kube-proxy"
I1022 15:54:13.961077    2643 apply_template.go:81] Installing "kube-dns"
I1022 15:54:13.961225    2643 apply_template.go:81] Installing "openshift-service-cert-signer-operator"
I1022 15:54:17.965245    2643 interface.go:41] Finished installing "kube-proxy" "kube-dns" "openshift-service-cert-signer-operator" "openshift-apiserver"
I1022 15:56:45.986497    2643 run_self_hosted.go:242] openshift-apiserver available
I1022 15:56:45.987410    2643 interface.go:26] Installing "openshift-controller-manager" ...
I1022 15:56:45.987432    2643 apply_template.go:81] Installing "openshift-controller-manager"
I1022 15:56:49.025267    2643 interface.go:41] Finished installing "openshift-controller-manager"
Adding default OAuthClient redirect URIs ...
Adding registry ...
Adding persistent-volumes ...
Adding web-console ...
Adding centos-imagestreams ...
Adding router ...
Adding sample-templates ...
I1022 15:56:49.051658    2643 interface.go:26] Installing "openshift-image-registry" ...
I1022 15:56:49.051668    2643 interface.go:26] Installing "persistent-volumes" ...
I1022 15:56:49.051675    2643 interface.go:26] Installing "openshift-web-console-operator" ...
I1022 15:56:49.051681    2643 interface.go:26] Installing "centos-imagestreams" ...
I1022 15:56:49.051685    2643 interface.go:26] Installing "openshift-router" ...
I1022 15:56:49.051689    2643 interface.go:26] Installing "sample-templates" ...
I1022 15:56:49.051733    2643 interface.go:26] Installing "sample-templates/jenkins pipeline ephemeral" ...
I1022 15:56:49.051739    2643 interface.go:26] Installing "sample-templates/mongodb" ...
I1022 15:56:49.051743    2643 interface.go:26] Installing "sample-templates/mysql" ...
I1022 15:56:49.051746    2643 interface.go:26] Installing "sample-templates/postgresql" ...
I1022 15:56:49.051751    2643 interface.go:26] Installing "sample-templates/cakephp quickstart" ...
I1022 15:56:49.051755    2643 interface.go:26] Installing "sample-templates/rails quickstart" ...
I1022 15:56:49.051759    2643 interface.go:26] Installing "sample-templates/sample pipeline" ...
I1022 15:56:49.051763    2643 interface.go:26] Installing "sample-templates/mariadb" ...
I1022 15:56:49.051767    2643 interface.go:26] Installing "sample-templates/dancer quickstart" ...
I1022 15:56:49.051771    2643 interface.go:26] Installing "sample-templates/django quickstart" ...
I1022 15:56:49.051775    2643 interface.go:26] Installing "sample-templates/nodejs quickstart" ...
I1022 15:56:49.051814    2643 apply_list.go:67] Installing "sample-templates/nodejs quickstart"
I1022 15:56:49.052594    2643 apply_template.go:81] Installing "openshift-web-console-operator"
I1022 15:56:49.052748    2643 apply_list.go:67] Installing "centos-imagestreams"
I1022 15:56:49.053126    2643 apply_list.go:67] Installing "sample-templates/jenkins pipeline ephemeral"
I1022 15:56:49.053216    2643 apply_list.go:67] Installing "sample-templates/mongodb"
I1022 15:56:49.053280    2643 apply_list.go:67] Installing "sample-templates/mysql"
I1022 15:56:49.053344    2643 apply_list.go:67] Installing "sample-templates/postgresql"
I1022 15:56:49.053467    2643 apply_list.go:67] Installing "sample-templates/cakephp quickstart"
I1022 15:56:49.053545    2643 apply_list.go:67] Installing "sample-templates/rails quickstart"
I1022 15:56:49.053610    2643 apply_list.go:67] Installing "sample-templates/sample pipeline"
I1022 15:56:49.053671    2643 apply_list.go:67] Installing "sample-templates/mariadb"
I1022 15:56:49.053731    2643 apply_list.go:67] Installing "sample-templates/dancer quickstart"
I1022 15:56:49.053791    2643 apply_list.go:67] Installing "sample-templates/django quickstart"
I1022 15:57:02.946920    2643 interface.go:41] Finished installing "sample-templates/jenkins pipeline ephemeral" "sample-templates/mongodb" "sample-templates/mysql" "sample-templates/postgresql" "sample-templates/cakephp quickstart" "sample-templates/rails quickstart" "sample-templates/sample pipeline" "sample-templates/mariadb" "sample-templates/dancer quickstart" "sample-templates/django quickstart" "sample-templates/nodejs quickstart"
I1022 15:57:32.386272    2643 interface.go:41] Finished installing "openshift-image-registry" "persistent-volumes" "openshift-web-console-operator" "centos-imagestreams" "openshift-router" "sample-templates"
Login to server ...
Creating initial project "myproject" ...
Server Information ...
OpenShift server started.

The server is accessible via web console at:
    https://192.168.99.100:8443/console

You are logged in as:
    User:     developer
    Password: <any value>

To login as administrator:
    oc login -u system:admin

これでminishiftが起動しました

ログインしてみる

まず、注目していただきたいのが先ほどのログです
最後の方を見てみますと、下記のように書いてあります

The server is accessible via web console at:
    https://192.168.99.100:8443/console

You are logged in as:
    User:     developer
    Password: <any value>

To login as administrator:
    oc login -u system:admin

では、早速ブラウザより確認してみます。
[Username][Password]の入力を求められるので、まずはdeveloperでログインしてみます。
スクリーンショット 2020-10-23 1.03.48.png
いい感じですね。ブラウザ画面からプロジェクトの作成もできるのですが、せっかくなので、cliから(ocコマンドにより)操作してみたいと思います。

ocコマンドでのログイン

参考基: minishift Quickstart

まずは、ocコマンドにパスを通します。

eval $(minishift oc-env)

admin userでログインを行なっておきます

❯ oc login -u system:admin
Logged into "https://192.168.99.100:8443" as "system:admin" using existing credentials.

You have access to the following projects and can switch between them with 'oc project <projectname>':

    default
    kube-dns
    kube-proxy
    kube-public
    kube-system
  * myproject
    openshift
    openshift-apiserver
    openshift-controller-manager
    openshift-core-operators
    openshift-infra
    openshift-node
    openshift-service-cert-signer
    openshift-web-console

Using project "myproject".

ocコマンドからサンプルのNode.jsアプリケーションをデプロイする

1.Node.jsサンプルアプリを作成する

❯ oc new-app https://github.com/sclorg/nodejs-ex -l name=myapp
--> Found image 93de123 (2 years old) in image stream "openshift/nodejs" under tag "10" for "nodejs"

    Node.js 10.12.0
    ---------------
    Node.js  available as docker container is a base platform for building and running various Node.js  applications and frameworks. Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

    Tags: builder, nodejs, nodejs-10.12.0

    * The source repository appears to match: nodejs
    * A source build using source code from https://github.com/sclorg/nodejs-ex will be created
      * The resulting image will be pushed to image stream tag "nodejs-ex:latest"
      * Use 'start-build' to trigger a new build
    * This image will be deployed in deployment config "nodejs-ex"
    * Port 8080/tcp will be load balanced by service "nodejs-ex"
      * Other containers can access this service through the hostname "nodejs-ex"

--> Creating resources with label name=myapp ...
    imagestream.image.openshift.io "nodejs-ex" created
    buildconfig.build.openshift.io "nodejs-ex" created
    deploymentconfig.apps.openshift.io "nodejs-ex" created
    service "nodejs-ex" created
--> Success
    Build scheduled, use 'oc logs -f bc/nodejs-ex' to track its progress.
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/nodejs-ex'
    Run 'oc status' to view your app.

2.アプリがビルド、デプロイされるまで、ビルドログを追跡する

❯ oc logs -f bc/nodejs-ex
Cloning "https://github.com/sclorg/nodejs-ex" ...
    Commit: 7b9f57949786059a3fab03b8493279c945770fb0 (Merge pull request #249 from multi-arch/master)
    Author: Honza Horak <hhorak@redhat.com>
    Date:   Wed Sep 23 10:52:52 2020 +0200
Using 172.30.1.1:5000/openshift/nodejs@sha256:3cc041334eef8d5853078a0190e46a2998a70ad98320db512968f1de0561705e as the s2i builder image
---> Installing application source
---> Building your Node application from source
Current git config
url.https://github.com.insteadof=git@github.com:
url.https://.insteadof=ssh://
url.https://github.com.insteadof=ssh://git@github.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/sclorg/nodejs-ex
remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master
branch.master.remote=origin
branch.master.merge=refs/heads/master
---> Installing dependencies
---> Using 'npm install -s --only=production'
added 121 packages from 342 contributors and audited 121 packages in 4.254s
found 10 vulnerabilities (3 low, 2 moderate, 4 high, 1 critical)
run `npm audit fix` to fix them, or `npm audit` for details
---> Pruning the development dependencies
npm info it worked if it ends with ok
npm info using npm@6.4.1
npm info using node@v10.12.0
npm timing stage:loadCurrentTree Completed in 238ms
npm timing stage:loadIdealTree:cloneCurrentTree Completed in 2ms
npm timing stage:loadIdealTree:loadShrinkwrap Completed in 110ms
npm timing stage:loadIdealTree:loadAllDepsIntoIdealTree Completed in 55ms
npm timing stage:loadIdealTree Completed in 198ms
npm timing stage:generateActionsToTake Completed in 14ms
npm timing audit compress Completed in 11ms
npm info audit Submitting payload of 7102bytes
npm timing stage:executeActions Completed in 200ms
npm timing stage:rollbackFailedOptional Completed in 1ms
npm timing stage:runTopLevelLifecycles Completed in 694ms
npm timing audit submit Completed in 509ms
npm http fetch POST 200 https://registry.npmjs.org/-/npm/v1/security/audits/quick 374ms
npm timing audit body Completed in 3ms
audited 121 packages in 1.023s
found 10 vulnerabilities (3 low, 2 moderate, 4 high, 1 critical)
run `npm audit fix` to fix them, or `npm audit` for details
npm timing npm Completed in 1337ms
npm info ok
---> Cleaning up npm cache
---> Fix permissions on app-root
Pushing image 172.30.1.1:5000/myproject/nodejs-ex:latest ...
Pushed 0/7 layers, 10% complete
Pushed 1/7 layers, 14% complete
Push successful

3.作成されたリソースを確認してみる

❯ oc status
In project My Project (myproject) on server https://192.168.99.100:8443

svc/nodejs-ex - 172.30.239.166:8080
  dc/nodejs-ex deploys istag/nodejs-ex:latest <-
    bc/nodejs-ex source builds https://github.com/sclorg/nodejs-ex on openshift/nodejs:10
    deployment #1 deployed about a minute ago - 1 pod


2 infos identified, use 'oc status --suggest' to see details.

4.サービスを公開する

❯ oc expose svc/nodejs-ex
route.route.openshift.io/nodejs-ex exposed

5.アプリケーションにアクセスする

❯ minishift openshift service nodejs-ex --in-browser
Opening the route/NodePort http://nodejs-ex-myproject.192.168.99.100.nip.io in the default browser...

表示されました
スクリーンショット 2020-10-23 1.19.23.png

6.port等を確認

❯ oc get route
NAME        HOST/PORT                                   PATH      SERVICES    PORT       TERMINATION   WILDCARD
nodejs-ex   nodejs-ex-myproject.192.168.99.100.nip.io             nodejs-ex   8080-tcp                 None

7.minishiftを停止します

❯ minishift stop
Stopping the OpenShift cluster...
Cluster stopped.

おわり

openShift楽しいですね!
良いkubernetes lifeを!

参考

公式ドキュメント

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む