深くは理解していなかったので復習がてら
立ち上げ時に打ち込んだもの
docker run -d --name 〇〇 \
--platform linux/arm64/v8 \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_PASSWORD=⭕️⭕️ \
-e APP_USER=〇〇 \
-e APP_USER_PASSWORD=〇〇 \
-v [ホスト側の場所]:[コンテナ側の場所] \
<リポジトリ>/<イメージ名>:<タグ>
各行の意味
docker run -d --name 〇〇
docker run
ドッカーを動かすという意味
runと聞くと走るイメージがあるが英単語としては動く・起動するという意味なのでそう考えると特に違和感はない
例:
- The engine is running.(エンジンが動いている)
- She runs a restaurant.(彼女はレストランを経営している)
-d
-(ハイフン)はオプションをつけるという意味
これはdockerに限らずUNIX系コマンド全般の基本概念らしい
ターミナルでも ls -a みたいにして使うよね
ちなみに-をつけないとただの引数として扱われるようだ
d デタッチモードにするって意味らしい
何もしないとアタッチモードになりターミナルにログが出続けで操作できなくなる
--name 〇〇
コンテナに名前をつけましょうという意味
これをしないと適当な名前がつけられるようだ
あとで訳がわからなくならないようにちゃんと名前をつけてあげよう
--platform linux/arm64/v8
プラットフォームの指定をしますよという意味
プラットフォームとはOS+アーキテクチャのこと
今回はlinuxがOSでarm64/v8がアーキテクチャ
- OSはiOSとかWindowsとか
- アーキテクチャとはCPUの言語=命令セット(ISA)のことらしい
詳しくは正直わからん
要は起動するパソコンのCPUに合わせて選べって話のようだ
ここは都度調べて入れましょう
-p 1521:1521 -p 5500:5500
-p ポートフォワードの設定 大文字で書くと意味が変わるので注意
ざっくりいうと扉の鍵穴を作るような作業
これがないと部屋番号(ポート)をみて来たのに鍵がないドアが目の前にあって入れないみたいになる
1521:1521
左がホストで右がコンテナのポートを書き込む
リクエスト(ホスト)自体にポートが入っているのでそれに対応して移動する場所(コンテナ)を決める
-e ORACLE_PASSWORD=⭕️⭕️
-e 環境変数を渡すためのオプション UNIX系全般で使うやつ
ORACLE_PASSWORD
オラクルの管理者アカウント(SYS/SYSTEM)のパスワード設定
オラクルのdockerイメージがもしORACLE_PASSWORDがあればそれを管理者のパスワードに使うと決めているもの
つまりオラクルを使うならこの変数名は固定で自由に変えれない
これを設定しないとオラクルの方のルールで弾かれて起動できない
-e APP_USER=〇〇
これはアプリ用ユーザーを作る際の名前を作るためのオプション
〇〇に任意の名前を入れる
例によって変数名APP_USERは固定
-e APP_USER_PASSWORD=〇〇
こちらは任意のパスワードを入れる
例によってこの変数名も固定
この2つは入れなくても起動できるがその場合毎回SYSを使うことになるので作っておいた方がいい
またどちらか片方しかないとエラーになる
-v [新たに保存する場所]:[本来保存される場所]
これは保存場所を変える際に使用するオプション
保存場所を変えておくことでコンテナを破壊してもデータが残るようにできる
無論保存場所を削除したらデータは消える
処理の流れとしては
- まずデータは本来の場所に保存される
- そしてこのオプションがあるとdockerが本来の保存場所にアクセスがあったら
- そのデータを新たに保存する場所に指定した場所に移動(リダイレクト)する
という流れ
イメージとしては今までは作業が終わったものはA置き場(本来保存される場所)におくルールだけど、これからはあのB置き場(新たに保存される場所)に置きたいから、新たに人を雇ってAに来たものをBに持っていく作業をしてもらっているイメージ
余談であるがこれはあくまでdockerの機能でありオラクルのプログラム自体は自分の決めた場所に保存しているつもりであり、保存場所が変わっていることは知らない
<リポジトリ>/<イメージ名>:<タグ>
イメージの指定をする
イメージとは作りたいものを実際に作るために必要な部品(コード・OS・ライブラリ等)が全てまとまっているパッケージのこと
IT界隈のイメージと日常のイメージという言葉は少しずれていて連想しずらいが、抽象的に見ればイメージとは頭の中やパソコンの中でなんらかを再現することなので、そう考えればなんとなく理解できるかも?
処理の流れとしては
- リポジトリを見て飛ぶ(省略した場合はlibraryに飛ぶ)
- その中からイメージ名を検索する
- ヒットしたものからタグを見てバージョンを選ぶ(省略したらlatestを探す)
つまりイメージ名以外は任意指定であるが、予期せぬエラーやバージョン違いの問題に繋がるので、ちゃんと指定しておくほうが無難
またタグを指定しなければlatest(一番新しい)が選ばれると言ったが、これはあくまでも作成元がlatestと名付けているものを見つけてくるので、タグも毎回つけておいた方が無難