DockerでjavaのWeb環境構築
前回DockerとRailsでWeb環境を作って開発しようとしたが上手くいかず挫折・・・
社内の新人研修や業務でも使用経験のあるjavaで環境構築することにした。
この記事の目標
①DockerImageのAlpinelinux内で環境構築
②Dockerfileで、Docker + javaのWeb環境を構築
③Dockerfileをローカルにコピってローカルでも同じ環境を構築
環境
①②
cloud9
・Ubuntu 18.04.3 LTS
・Docker version 19.03.5
③
自宅PC
・Ubuntu 16.04.6 LTS
・Docker version 18.09.7
今回こそ環境構築を終わらせたい!終わらせないとポートフォリオ作成が進まないし。
①DockerImageのAlpinelinux内で環境構築
DockerでAlpinelinuxを起動
以下はjava8とtomcat9をダウンロードして、tomcatを実行
tomcatの実行確認
htmlが表示されたのでOK
tomcatとAlpinelinuxを終了。
なぜかAlpinelinuxが終了しないので、docker stopで終了。
次は今まで実行したコマンドを並べたDockerfileを作成する。
Dockerfile
sample_javaフォルダにDockerfileを配置して実行。
お!javaイメージが出来上がっているので、実行。
というわけで今回はjavaのWeb環境構築でした〜
次はSpringBoot使って実際にWebアプリを作ろうと思います!
DockerでRailsの開発環境を作ってみる(その①)
cloud9でrailsの開発をしていたが、自分が普段使っているエディターで開発したいこともあり、ローカルにDockerとrailsの環境を作ることにしました。
環境情報
自宅PC
・Ubuntu 16.04.6 LTS
・Docker version 18.09.7
cloud9
・Ubuntu 18.04.3 LTS
・Docker version 19.03.5
Docker基礎知識
少し前にDockerをインストールして放置だったので、まずはDockerの再勉強から始めた。
下記のサイトを参考。
Docker入門(第一回)~Dockerとは何か、何が良いのか~ | さくらのナレッジ
自分なりにまとめてみる。
Dockerの良さ
・仮想マシンはゲストOSを用意して動かすが、DockerはホストOSは共有して、プロセスとユーザーを隔離してマシンが複数あるかのように動かすため軽量。
・環境設定をコード化したファイルを作成できるので、どこでも同じ環境が作れる。
・CIツールと組み合わせて、自動ビルド&デプロイ&テストができる。
Dockerインストール
下記を参考にインストールした。
Ubuntuにdockerをインストールする - Qiita
Rails環境構築
こっからは、実際にcloud9内で環境を作っていきます!
下記を参考に進めていきます。
DockerでRuby on Railsの開発をしよう - Qiita
以下の作業フォルダを作る。
Dockerfile(コピペしてrubyのバージョンを変更)
※rm -rf /var/lib/apt/lists/*の意味
ubuntuをdocker buildするときaptのキャッシュを削除し容量を小さくする - Qiita
ということらしい
docker-compose.yml(コピペして、コメントの削除とbuildとmysqlのバージョンを変更)
Gemfile(コピペしてrailsのバージョンを変更)
docker-composeでコンテナ起動
docker-composeのインストールがされてなかったのでインストール後に再度起動
結果エラー・・・
ERROR: for sampleruby_db_1 Cannot start service db: driver failed programming
external connectivity on endpoint sampleruby_db_1 (ea47a718d7390b13f4638e7b34
a7d2c9090e070cc0cff06b04fe94169c0a8f15): Error starting userland proxy:
listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: for db Cannot start service db: driver failed programming external
connectivity on endpoint sampleruby_db_1 (ea47a718d7390b13f4638e7b34a7d2c9090
e070cc0cff06b04fe94169c0a8f15): Error starting userland proxy: listen
tcp 0.0.0.0:3306: bind: address already in use
ポート3306が使われてるからかなーと思い、調べたらmysqldがあるので削除。
またしてもTraceback (most recent call last):から始まる長いエラー・・・が出たので、バージョンを記事と合わせた。
ruby:2.6.3 → 2.3.1
mysql:8.0 → 5.7
'rails', '6.0.1' → 5.1.4
しかし、またTraceback〜以下略が出たので、いろいろ調べた。
docker-composeのバグを踏んだのでアップグレードした話 - mimikunの技術メモ
上記の記事を参考にしてアップグレートをしたが、それでも直らない・・・。
というわけで公式(Quickstart: Compose and Rails | Docker Documentation)を見ることにした。(最初にそれすべきだった)
続きはその②で成功したら報告します・・・
Ubuntuで/var/lib/apt/lists/lockでエラーが出た時
/var/lib/apt/lists/lockのエラーでapt-getが使えなくなる
下記のコマンドで大抵戻る
sudo rm /var/lib/apt/lists/lock
sudo rm /var/lib/dpkg/lock
何度もググるのでメモ
参考URL
Visual Studio CodeでPlantUMLメモ
1、PlantUMLでエクスポート方法
1,Ctrl + Shift + Pでコマンドパレットを開く
2,plantuml: export current diagram
を入力
Amazon Downloadsという不明な請求
クレジットカード明細にAmazon Downloads 980円
先日AWSでデータベースを停止し忘れて、無料枠が吹っ飛びました(*_*)
他にも無料枠超えをして料金が発生していたので、クレジットカードの明細を確かめた(^^;
そしたら、
Amazon Downloads 980円
え!何も注文してないけど・・・
でまあ調べたら、Kindle Unlimitedが請求されてました ^^;
右上の「アカウント&リスト」→ポップアップ「お客様のKindle Unlimited」から請求をキャンセルしました!
Amazon DownloadsはKindleのことなので、忘れないように気をつけて^0^/
Oracle Java SE8 Silverでつまずいたこと
Java SE8 Silverってここまで聞かれるの?!
最近になって仕事で資格を取るように言われた。.NETやJavaなどのオブジェクト指向言語の経験が一番多かったから、Java SE8 Silverぐらい楽勝でしょwww的なノリで勉強したら、かなり詰んだ^^;
というわけで、こんなような知識が問われるよってのを心に残ったものをちょくちょく更新してこうと思います!
1、整数型で2進数、8進数、16進数のリテラル
出力結果
先頭に0xが16進数、0が8進数、0bが2進数のリテラル。全然知らなかった・・・業務で100%見ないし・・
2、負の数
出力結果
こんな感じで負の数の計算ができる。これは自分の勉強不足かも。
マイナス演算子で負の数を表現できたのは知らんかった^^
3,インクリメント
出力結果
b=a++と変数の方が前にあるときはプラスされる前のaが適用されるらしい。いや〜難しい!
4、配列の宣言方法
出力結果
printで配列を表示するとハッシュコードが返される。まあ、それはよくって、配列の宣言方法!
変数cの宣言方法がありなのは驚いた!大カッコは変数の後、型の後、右と次元さえ合ってればどっちでも良いってこと^^;
上記は同じ意味。
ちなみに要素数は一次元目さえ入れとけば、宣言時に他は空でも大丈夫^^
getoptsでハマったこと
オプション解析getoptsではまったこと
1,オプションの引数が受け取れない・$OPTARGに値が入らない
while getopts a:b:c OPT do case $OPT in "a" ) echo "$OPTARG"
;; "b" ) echo "$OPTARG"
;;
"c" ) echo "$OPTARG"
;; esac done
上記の場合、a,bには$OPTARGの値が入るがcには入らない。
× while getopts a:b:c OPT → ○ while getopts a:b:c: OPT
:コロンを横に付けることによって引数が必須になるっぽい。
2,getoptsを二回使う時
while getopts a:b: OPT do case $OPT in "a" ) continue;; "b" ) echo "$OPTARG";; esac done
while getopts a:b: OPT do case $OPT in "a" ) echo "$OPTARG";; "b" ) echo "$OPTARG";; esac done
上記のように二回使うとgetoptsが実行されない。
while getopts a:b: OPT do case $OPT in "a" ) continue;; "b" ) echo "$OPTARG";; esac done
OPTIND=1
while getopts a:b: OPT do case $OPT in "a" ) echo "$OPTARG";; "b" ) echo "$OPTARG";; esac done
間にOPTIND=1をつけて、ループを戻す必要がある。
OPTINDはループ開始位置を指定できる。
同じことで二回ハマったからメモった^^;