20211022のdockerに関する記事は8件です。

docker-composeでコンテナにローカルのAWS認証情報を渡す

DockerコンテナからAWSにアクセスする時、AWSのcredentialsが必要になる。 AWS上でコンテナを動かす場合IAMロールを付与すればいいが、ローカルで動かす時はそうもいかない。 そこで、ここではローカルのAWS認証情報(~/.aws/)をコンテナに渡す方法をまとめた。 docker-compose.yaml AWS SDK for JavaScriptを使ったWebアプリケーションをDockerコンテナで動かす体で見て欲しい。 docker-compose.yaml から一部抜粋する。 docker-compose.yaml : app: environment: - AWS_SDK_LOAD_CONFIG - AWS_PROFILE - NODE_ENV=development volumes: - ~/.aws/:/root/.aws:ro : environment 環境変数は値を書かなければローカルの環境変数がパススルーされるので、必要に応じてお好みで設定する。だいたい .env に書いている。 ちなみに AWS_SDK_LOAD_CONFIG を true に設定すると、SDKが自動的に ~/.aws/config を読み込むようになる。不要であれば別途 AWS_REGION を設定する必要がある。 プロファイルを default から変更したい時も AWS_PROFILE を設定する必要がある。 environment: - AWS_SDK_LOAD_CONFIG - AWS_PROFILE volumes ローカルの ~/.aws を、Dockerコンテナの /root/.aws にマウントする(念の為、読み取り専用にしている)。これでDockerコンテナからAWSの認証情報を参照できるようになる。 ここでは root ユーザーを実行ユーザーにしているが、実際は専用ユーザーを作成したほうがいいと思う。 volumes: - ~/.aws/:/root/.aws:ro
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【合格体験記】CKAD(Certified Kubernetes Application Developer)

概要 CKADに合格したので、資格の更新時に復習できるよう勉強法の備忘録にしたい。 CKADは、コマンドやYAMLを使ってKubernetesの基本的な動作ができるかを試させるハンズオン試験だ。 試験はオンライン形式  試験時間は2時間  問題数は約19問  合格ラインは66%  選択式問題ではないので曖昧な理解では合格はできない。 しかし、1ヶ月弱で正しいステップを踏めば合格は可能である。 合格するためには、必要なステップは以下の3つだ。 Kubernetesの概要を学ぶ Kubectlを学ぶ ハンズオン試験に慣れる 1. Kubernetesの概要を学ぶ 仮想マシンとコンテナの違いは何なのか、DockerとKubernetesは何なのか、podとdeploymentは何なのか。 基本的なコンテナの知識とKubernetesの知識は、必須である。 Kubernetesの中でそれぞれのコンポーネント(podやdeployment)がどう動いているのか頭の中でイメージできるくらいを目安に概要を学ぶ。(Kuberntesを完全に理解しようとすると途方の暮れない時間と労力がかかるので理解のボーダーを決める必要がある) 以下の書籍は、基本的なコンテナの知識とKubernetesの知識を学ぶ上でちょうどいい難易度である。 イラストも分かりやすくイメージしやすい。 イラストでわかるDockerとKubernetes Software Design plus コンテナランタイムの章は、CKADでは必要ない知識なので、さらっと読む程度でOK 2. Kubectlのコマンドを学ぶ Kubernetesの中でそれぞれのコンポーネント(podやdeployment)がどう動いているのか頭の中でイメージできるようになったら、実際にKubectlコマンドを使ってKubernetesを動かす練習をする。 以下のGitHubのCKAD-exercisesのコマンドがスラスラと使えるようになるまで、ひたすら練習。 CKAD-exercises ところどころで分からない部分が出てくるはずなので、その時はKubernetesの公式ドキュメントを読んで理解の補完をする。 ◯公式ドキュメント ◯Kubectlの公式ドキュメント Minikube の使用 コマンドを実際に実行してみたい時は、ローカル環境で簡単にKubernetesを動かすことができるMinikubeがおすすめ。 3. ハンズオン試験に慣れる A Cloud Guru(7日間無料) Kubernetesの動かし方が大体分かったら、次は模擬試験に挑戦。 実際の要望に応じてKubernetesを動かしたり、ログを見てバグを修正するなどは、模擬試験でないとできない。 Udemyなどにも教材はありますが、僕は1週間無料で使える A Cloud Guru で模擬試験に取り組んだ。 実際の試験に近い形式でのハンズオン形式の問題なのでとても役に立った。 Linux Foundation のシュミレーションテスト 試験に申し込むと以下の画面からシュミレーションテストを実施できる。 難易度は少し高めだが、実際のテスト画面や採点の仕組み、自分では気づけなかったKubernetesの設定の間違った理解などが確認できる。 僕もdeploymentとserviceの紐付け方を間違った理解をしていたので、ここで確認できたのは大きかった。 (番外編) しれっと役立つテクニック 1.試験中は公式ドキュメントを参照してOK 試験中、ひとつのタブにて公式ドキュメントを参照することが許されている。 僕は、コンポーネントごとのドキュメントのページをChromeのブックマークに登録し、すぐに参照できるようにしていた。 2.補完機能を使う。 公式ドキュメントにチートシートというページがある。そこでは補完機能の設定方法が載っている。 他にも大まかなkubectlのコマンドが載っていたりするので便利。 3.英語の試験を受ける 日本語の試験も存在するが、英語の試験と何も変わらない。 試験監督のチャットのやりとりも英語だったし、試験自体も英語版でも日本語に切り替えることは可能。 なのに日本語試験の方が値段が高い。 今のところは英語試験を受ける一択だ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

有償化される Docker Desktop をやめて minikube を使う

はじめに 他の記事でも書かれていますが、 Docker Desktop が有償化されます Docker Engine や CLI は無償なのでサーバーでの利用上は問題ありませんが、 macOS は基本的に Docker Desktop でのインストールが推奨されているため、 私も使っていました Docker Desktop は GUI でコンテナの操作ができますが、 基本的にコマンド操作するので不要です Docker Desktop のためだけに費用を払うのはもったいないですね 有償化の対象外 従業員 250 人未満 かつ 年間売上 1000万ドル未満 個人利用 教育目的の利用 非商用利用 オープンソースプロジェクト 有償化の開始日: 2021年8月31日 猶予期限: 2022年1月31日 ということなので、今年のうちに Docker Desktop を使わずに済むようにします 以下のブログを参考にしました Docker Desktop のアンインストール Docker Desktop を起動し、右上の虫マークから Troubleshoot を開きます 一番下にある Uninstall をクリックするとアンインストールできる、はずですが なぜかうまくアンインストールできなかったため、結局 Applications から直接ゴミ箱へ送りました minikube インストール minikube と、仮想化のための hyperkit を Homebrew でインストールします brew install hyperkit brew install minikube hyperkit を入れるとき、先に Docker Desktop をアンインストールできていないと brew link でエラーになります Docker Desktop をゴミ箱に入れたあとに改めて brew link すれば問題ありません brew link hyperkit docker インストール 今までは Docker Desktop 内の docker CLI を使っていたので、 改めて Homebrew で CLI をインストールします brew install docker brew install docker-compose minikube 起動 今までは Docker Desktop を起動させてから docker コマンドを使っていましたが、 これからは minikube が動いている必要があります minikube start また、 docker コマンドに minikube を認識させる必要があるので、以下を実行します eval $(minikube docker-env) minikube の IPアドレス を hosts に書き込んでアクセスできるようにします echo "`minikube ip` docker.local" | sudo tee -a /etc/hosts > /dev/null docker を動かしたいだけなので、余計なものを止めておきます $ minikube pause ⏸️ Pausing node minikube ... ⏯️ 次のnamespaceに存在する 14 個のコンテナを停止しました: kube-system, kubernetes-dashboard, storage-gluster, istio-operator docker 実行 試しに Hello World を動かしてみます $ docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. ... エラーが出なければ、とりあえず docker は大丈夫です 認証ヘルパー変更 docker は動いたものの、 docker-compose 実行時にエラーが、、、 $ docker-compose up [+] Building 0.9s (3/3) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 31B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => ERROR [internal] load metadata for docker.io/zenika/kotlin:1.4.20 0.8s ------ > [internal] load metadata for docker.io/zenika/kotlin:1.4.20: ------ failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: rpc error: code = Unknown desc = error getting credentials - err: exec: "docker-credential-desktop": executable file not found in $PATH, out: `` 認証を行なっていた docker-credential-desktop もゴミ箱に入ったので、認証できなかったようです こちらのブログを参考に、認証できるようにしました 代わりのものをインストールし、設定を変更します brew install docker-credential-helper ~/.docker/config.json を以下のように変更 変更前 { "credsStore" : "desktop" } 変更後 { "credsStore" : "osxkeychain" } これで docker-compose も動くようになりました おわりに ひとまず、今まで通り macOS でも無償で docker を使うことができるようになりました あとは Windows を近々どうにかします
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker基礎 Docker-composeを使ってRails環境構築

Docker-composeを使って初めてRails+PostgreSQLの環境構築したときのメモです。 Dockerfile作成 ターミナル $ mkdir product-register && cd product-register $ touch Dockerfile Gemfile Gemfile.lock Dockerfile FROM ruby:2.5 RUN apt-get update && apt-get install -y \ build-essential \ libpq-dev \ nodejs \ postgresql-client \ yarn WORKDIR /product-register COPY Gemfile Gemfile.lock /product-register/ RUN bundle install Gemfile source 'https://rubygems.org' gem 'rails', '~>5.2' GemfileをDockerfileでCOPYすることでRailsをインストールします。 $ docker build . Docker-composeを使う どんな時に使うのか? $ docker runのコマンドが長くなる時 今回もしこのまま$ docker runをするならコマンドは、以下のように長くなるので使用。 $ docker run -it -v ~/Desktop/product-register:/product-register -p 3000:3000 <image> bash 複数のコンテナをまとめて起動する時。 今回はRailsのコンテナとPostgreのコンテナを使うので使用。 docker-compose.ymlの使い方と書き方 docker-compose.ymlというファイルを作りそこに$ docker run時のオプションコマンドなどを書いて設定しておく。 docker-compose.ymlの雰囲気 今からDocker compose書くよ宣言 service1: service1のパラメータ service1のパラメータ service2 service2のパラメータ service2のパラメータ kye:valueの組み合わせで書く。 value部分が複数ある場合は-を使ってリスト形式 docker-composeでのパスの指定は相対パスで書く。 docker-compose.yml docker-compose.yml version: "3" services: web: build: . ports: - "3000:3000" volumes: - ".:/product-register" tty: true stdin_open: true buildは$ docker build . portsは-pオプション volumesは-vオプション ttyとstdin_openは-itオプション Docker composeコマンド一覧 $ docker build <build context> $ docker-compose build $ docker run <image> $ docker-compose up $ docker-compose up --build upはimageが作られてない場合、buildも一緒にする。 Dockerfileを更新した場合は-- buildをつけることでbuildしてからrunしてくれるのでimageも更新される。 $ docker ps $ docker-compose ps $ docker exec <container> <command> $ docker-compose exec <service> <command> 便利コマンド $ docker-compose down コンテナをstopしてから消してくれる。 実際に起動してみる。 バックグラウンドで動かしたいので-dオプションをつける $ docker-compose up -d $ docker-compose ps NAME COMMAND SERVICE STATUS PORTS product-register-web-1 "irb" web running 0.0.0.0:3000->3000/tcp 起動が確認できたので実際にコンテナに入ってみる。 $ docker-compose exec web bash root@8d2ab4ae68c0:/product-register# 入れてたらOK Railsセットアップ コンテナ内で実行します。 $ rails new . --force --database=postgresql --skip-bundle --forceは全て上書き --databaseでデータベースの指定 --skipでbundle installをskipしています。 bundle installをskipしている理由は、Dockerfileの最後にRUNでbundle installを指定していて、Gemfileが更新されたらその都度コンテナを抜けて再度コンテナをbuildするのでbundle installをわざわざここでする必要はないからです。 コンテナを抜けコンテナを削除します。 $ exit $ docker-compose down 再度buildして確認します。 $ docker-compose up --build -d $ docker-compose ps NAME COMMAND SERVICE STATUS PORTS product-register-web-1 "irb" web running 0.0.0.0:3000->3000/tcp buildされていたらOKです。 docker-compose.ymlのDB部分を追記する DBはDB用のコンテナを作るのでDBの設定を記述していきます。 config/database.yml default: &default adapter: postgresql encoding: unicode host: db user: postgres port: 5432 password: <%= ENV.fetch("DATABASE_PASSWORD") %> pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> hostで指定した名前(今回はdb)がdocker-compose.ymlのservice部分になります。 docker-compose.yml version: "3" volumes: db-data: services: web: build: . ports: - "3000:3000" volumes: - ".:/product-register" environment: - "DATABASE_PASSWORD=postgres" tty: true stdin_open: true depends_on: - db links: - db db: image: postgres volumes: - "db-data:/var/lib/postgresql/data" environment: - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=postgres" volumesの部分はデータベースで保存したものをhost側で保管するための記述。 environmentは環境変数。 depends_onで指定したものができてから$ docker runするという記述。 linksはここで指定したものがwebからアクセスできるようにするための記述。 RailsとDBをセットアップ Docker composeでそれぞれのコンテナを立ち上げRailsのコンテナに入ります。 $ docker-compose up -d $ docker-compose exec web bash 入ったコンテナ内でDBを作成します。 $ rails db:create $ rails s -b 0.0.0.0 サーバーを立ち上げていつものRailsの最初の画面が出たら完成。 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでPHPとMySQLのシンプルすぎる環境構築を行う

執筆に至った経緯 Docker使えたらカッコよくね? ↓ ネットに転がってる環境構築は強すぎて理解できなくね? ↓ 最小構成の環境構築を知って、そこから自分が必要な部分を拡張していったら理解できるんじゃね? 想定読者 Dockerの基礎的なことは何となく分かったが、実際に使ってみたい方。 他人の作ったDocker環境は使ったことがあるが、自分では構築したことがない方。 今回のゴール DockerでPHPとMySQLの環境構築を行う。 具体的には以下3つが実行できたら完了とする。 PHPコンテナ内に入り、helloworldを出力する。 MySQLコンテナ内に入り、適当なSQL文を実行する。 PHPからMySQLに接続する。 実行環境と筆者のレベル感 実行環境 OS : Windows10 Pro プロセッサ : 11th Gen Intel(R) Core(TM) i7-11370H @ 3.30GHz 3.00 GHz 実装RAM : 16.0GB システムの種類 : 64 ビット オペレーティング システム、x64 ベース プロセッサ DockerDesktop : 4.11 筆者のレベル感 2021年10月から勤務開始した新米エンジニア。 ともに育ちましょう。 ファイル構成 . |-- docker | |-- mysql | | |-- Dockerfile | | |-- data | `-- php | `-- Dockerfile |-- docker-compose.yml |-- src `-- index.php ステップ1 PHPのDockerfileを作成 Dockerfile FROM php:7.2-apache RUN apt-get update \ && docker-php-ext-install pdo_mysql mysqli mbstring WORKDIR /var/www/html EXPOSE 80 1行目 FROM命令でPHPのDockerイメージを引っ張ってくる。 「:」はタグと呼ばれるものでバージョンやオマケを指定することができる。 今回の場合は「PHPのバージョン7.2が欲しい、ついでにapacheつけといて」という意味。 DockerHubに色々載っていて楽しいので一読をおススメ。 2~3行目 RUN命令で各種パッケージのインストール等を行う。 apt-get updateでインストール可能なパッケージ一覧を更新する。 実際にインストール等は行わない。 バックスラッシュで改行できる。&&でコマンドとコマンドを繋ぐ。 docker-php-ext-installで各種拡張機能をインストール。 docker-php-ext-installはPHP標準拡張機能のインストーラー。 pdo_mysqlはPHPからMySQLに接続するための拡張機能。 mysqliもPHPからMySQLに接続するための拡張機能。 PDOかmysqliの二択っぽくて、片方だけでOKそうだが、両方学習したいのでどちらも入れておく。 mbstringはmb_substrみたいなマルチバイト文字列に対応したメソッドを使うための拡張機能。 5行目 WORKDIR命令でこの命令以降に実行したコマンドの作業場所およびコンテナに入った際のディレクトリを指定する。 だいたいどの記事を見てもこのパスが書いてあるので、とりあえずあまり難しく考えない方が良いのかも。 7行目 EXPOSE命令でコンテナのポート(玄関)を指定。 玄関を開けているだけなので、ホストとはまだ繋がってません。玄関の鍵だけ開けたっていう感じ。 実際にポートを開けているわけではない様子。コメント的役割のようですね。 参考文献の『DockerfileのEXPOSEは実際に何かポートを開けているわけではない』参照。 Dockerhubを見るに、php-apacheのイメージ内でWORKDIRやEXPOSEの設定はされているっぽい。 ステップ2 MySQLのDockerfileを作成 Dockerfile FROM mysql:8.0 EXPOSE 3306 1~3行目 FROM命令でMySQLイメージを引っ張ってきて、EXPOSE命令で3306番がコンテナのポートだと記載。 前述のとおりコメント的意味合いの様子。 M1 Macを使用の場合はbuild時にエラーが出るかも知れません。 執筆時点ではMySQLコンテナはM1対応してないみたいです。 回避方法ありまして、参考文献の『M1 MacでDockerを使った開発環境構築にハマった』参照。 ステップ3 docker-compose.ymlの作成 docker-compose.yml version: '3' services: app: build: context: ./docker/php dockerfile: Dockerfile volumes: - ./src:/var/www/html ports: - "80:80" depends_on: - db db: build: context: ./docker/mysql dockerfile: Dockerfile volumes: - ./docker/mysql/data:/var/lib/mysql ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=pass 1行目 docker-composeのバージョンを設定。 バージョンによって微妙に書き方が異なるっぽい。 2行目 servicesに使用するコンテナを列挙する。 今回はappコンテナとdbコンテナを作成。 4~6行目 build内にdocker-compose buildをした際の挙動を記述。 contextとはbuildコマンドを実行する場所。 今回はDockerfileのある場所を指定すれば良さそう。 dockerfileはDockerfileの場所を指定。 上記で./docker/phpでbuildコマンドを実行するところまでは指定しているので、ファイル名だけ記述。 7~8行目 volumesでローカルファイルをDockerコンテナ内に結び付ける。 ローカルのsrc以下のファイルがDockerコンテナ内の/var/www/html内にマウント(≒コピー)される。 ローカルのsrcにファイルを置くと、Dockerコンテナ内の指定しているディレクトリにコピーされ、逆もまた然り。 9~10行目 コンテナのポート(玄関)とホストのポート(玄関)の間に道を作る。 これでホスト側でlocalhost:80にアクセスすると、コンテナの80にアクセスされる。 コンテナ側の80番は決まっている値なので、Dockerhubでポートが何番かを確認する。 11~12行目 このように設定すると、先にdbコンテナが立ち上がってから、appコンテナが立ち上がるようになる。 14~17行目 同様なので省略。 18~19行目 MySQLのデータをローカルにコピーしている。 そうしないとコンテナを消してしまうとデータが吹き飛ぶため。 20~21行目 同様なので省略。 22~23行目 MySQLの環境変数をここで定義。最低限ということでrootユーザーのパスワードのみ。 別にenvファイルを作成してマウントしてしまっても良いのかも。 動作検証 PHPコンテナ内に入り、helloworldを出力する。 何はともあれコンテナ起動 $ docker compose up -d index.phpにhelloworldを実装 index.php echo 'helloworld'; PHPコンテナ内に入って、実行して無事出力を確認 ちなみにコンテナからはexitで出られます。 $ docker compose exec app bash root@123456789123:/var/www/html# php index.php helloworld MySQLコンテナ内に入り、適当なSQLを実行する。 $ docker compose exec db bash root@987654321987:/# mysql -u root -p Enter password: #docker-compose.ymlで定義したパスワードを入力 mysql > SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) PHPからMySQLに接続する。 今回はmysqliを使ってデータベースへ接続。 new mysqliの第1引数にはデータベースのコンテナ名を記載。 第2引数と第3引数にログインするユーザーの名前とパスワードを渡す。 rootユーザーは初期状態で設定されていて、パスワードはdocker-compose.ymlで設定済。 index.php $mysqli = new mysqli('db', 'root', 'pass', 'mysql'); if($mysqli->connect_error) { echo '接続失敗'.PHP_EOL; exit(); } else { echo '接続成功'.PHP_EOL; } PHPコンテナ内に入って接続成功を確認。 MySQLコンテナ内で一部設定変更しないとエラーが出ます。 参考文献の『MySQL8.0 認証方式を変更する(Laravel5)』参照のこと。 $ docker compose exec app bash root@123456789123:/var/www/html# php index.php 接続成功 今後の課題 php.iniとmy.cnfを設定する。 PHPのデバッグが出来る環境を構築する。 実際にPHPからMySQLへデータの挿入および呼び出しを行う。 その他必要な拡張機能を追加していく。 参考文献 以下のサイトおよび記事を参考にさせていただきました。 ありがとうございます! ・Docker初心者のDockerfileを理解する ・docker-compose.ymlのbuild設定はとりあえずcontextもdockerfileも埋めとけって話 ・Docker Composeでphpでmysqlにアクセスする ・docker-composeでPHPとMySQLを連携させてみる ・【PHP】peclとは何か?pecl install と docker-php-ext-installの違い ・mysqli の忘備録 -PDOとmysqliの違い- ・[PHP] mysqli使い方まとめ(MySQL接続~SELECT実行まで) ・MySQL8.0 認証方式を変更する(Laravel5) ・【MySQL】PHPで接続できないとき ・M1 MacでDockerを使った開発環境構築にハマった ・DockerfileのEXPOSEは実際に何かポートを開けているわけではない
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【スクレイピングツール】scrape.doの使い方

はじめに 過去にスクレイピング(PythonでBeautifulSoup)で収集した情報をブログに投稿するツールを作成したことがあります。 現在はスクレイピングのwebサービスもあり、スクレイピング導入における敷居も低くなったのかな?、という疑問からその代表格?であるscrape.doを実際に触った結果をまとめていきます。 scrape.doのポイント 高度なカスタマイズを可能とするWebスクレイピングAPI SPAサイトもスクレイピング可能 リクエストごとにIPアドレスをローテーション JavaScriptをレンダリングし、CAPTCHAを処理可能 ターゲットWebサイトへの失敗したリクエストを自動的に再試行 リクエストごとに2MBの応答サイズ制限があります scrape.doの無料枠 サインアップすると、毎月1000のAPIリクエストを含む無料枠がありますので、安心して試すことができます。 ※無料枠利用において、クレジットカードの登録が不要なのはGood! アカウント登録 私はGoogleのアカウントで登録しました。 登録は簡単でGood! ※ログイン後の画面イメージ 利用していきます! 今回使用するツールなどのバージョン Windows 10 Pro:21H1 vscode:1.61.2 Docker:20.10.8 Python: 3.8.12 環境構築 詳細なソースはGitHub イメージの作成 docker build -t scrape_do:1.0 /mnt/c/wsl/docker/dev/scrape.do-python-sample/.devcontainer --no-cache コンテナの作成 docker run -v /mnt/c/wsl/docker/dev/scrape.do-python-sample:/opt/python/scrape_do --name scrape_do_01 -i -t scrape_do:1.0 /bin/bash スクレイピングAPIの実行 scrape.doのAPIレスポンスであるhtml情報を出力 scrape.doのAPIレスポンスのhtml情報からBeautifulSoupオブジェクトを作成して簡易的なスクレイピング結果を出力 httpのサイトはアクセスできない? ターゲットのURLが「http:XX」の場合、「502 Bad Gateway」となりました。 httpsのサイトのみが対象のようなので、httpのサイトにアクセスしないといけない要件の場合は残念ながら利用不可かなと。 ※回避策あればコメントいただきたいです! 利用した感想 利用しやすさ 細かい機能は有料オプションじゃないと利用できないものが多くて試せなかったのですが、APIの実行なので総じて利用は楽でした! 料金 スクレイピング処理の実行回数が少なく無料枠(1000回/月)内で利用可能あれば、scrape.doを利用したほうがIP自動変更もしてくれるのでオススメです。 逆に実行回数が多い場合は、bright dataを利用してIP自動変更をしつつリクエスト処理をしたほうが安くつくかなと。 しかし、Seleniumの代替となるJavascriptレンダリング機能は有料となるため、料金を意識するなら自前で作成したほうがよいかなと。 今後 bright dataとScrapyを利用して、スクレイピングをしていきたいです。 まずは10分で理解する Scrapyを見て進めてみます。 参考資料 参考とさせていただきました。ありがとうございます。 VSCodeでWSL2上のDockerコンテナ内コードをデバッグ 10分で理解する Beautiful Soup
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker基礎 $ docker runのオプション

Docker初心者がDockerについて勉強した時のメモです。 -v $ docker run -v <host>:<container> 例 $ docker run -it -v <hostのマウントしたいフォルダ> : <コンテナのマウントする場所のフォルダ> <image> bash ホストのファイルシステムをコンテナにマウントする。 マウントすることでホストのファイルシステムが実際にはないがコンテナにあるかのように振る舞える。 コードを実行する実行環境として使う。 -v で指定したコンテナのフォルダはコンテナにない場合自動で作成される -u $ docker run -u <user id><group id> 例 $ docker run -it -u $(id -u):$(id -g) $id -uユーザーID確認、$id -g グループID確認 - ユーザーIDとグループIDを指定してコンテナをrunする。 - アクセス権限を制限できる。 - 共有サーバー利用時に使うらしい。 -p $ docker run -p <host_port>:<container_port> 例 $ docker run -it -p 8888:8888 ホストのポートをコンテナのポートにつなげる 割り当てたポート番号でlocalhostにつながる。例で言うとlocalhost:8888にアクセスできる。 コンテナにwebサービスを立てる時に使用。 リソースの上限 - -cpus<of cpus> コンテナがアクセスできる上限のCPUを設定 - -memory<byte> コンテナがアクセスできる上限のメモリを設定 例 $ docker run -it --cpus4 --memory2g 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【構築】Oracle Data Guard (12.2)

【構築】Oracle Data Guard (12.2) Oracle Databaseのdockerコンテナを使用して、Oracle Data Guardの構築手順、操作を調べる。 環境 Ubuntu上でsnapモジュールのdockerを使用しています。 $ grep VERSION= /etc/os-release VERSION="20.04.3 LTS (Focal Fossa)" $ uname -a Linux bionic 5.4.0-89-generic #100-Ubuntu SMP Fri Sep 24 14:50:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux $ snap list docker Name Version Rev Tracking Publisher Notes docker 20.10.8 1125 latest/stable canonical✓ - 準備 Oracle Databaseのdockerイメージ作成 # Oracle dockerイメージ作成用のgitリポジトリをクローン $ git clone https://github.com/oracle/docker-images.git # Oracle Databaseのイメージ作成用ディレクトリに移動 $ cd ./oracle-docker-images/OracleDatabase/SingleInstance/dockerfiles # Oracleインストールイメージを配置 mv linuxx64_12201_database.zip ./12.2.0.1 # dockerイメージ作成 ./buildContainerImage.sh -v 12.2.0.1 -t oracle/database:12.2.0.1-ee -e dockerコンテナ作成 以下の2つのOracle Databaseコンテナを作成する。 ホスト名 SID 説明 db1 ORACDB1 プライマリデータベース db2 ORACDB2 スタンバイデータベース コンテナ作成はdocker composeを使用する。 docker-compose.yml version: '3.5' services: db1: image: oracle/database:12.2.0.1-ee hostname: db1 ports: - "11521:1521" - "15500:5500" - "18080:8080" volumes: - "./db1/opt/oracle/oradata/:/opt/oracle/oradata/:rw" - "./db1/opt/oracle/fast_recovery_area/:/opt/oracle/fast_recovery_area/:rw" environment: - ORACLE_SID=ORACDB1 - ORACLE_PDB=ORAPDB - ORACLE_PWD=P%ssw0rd - ORACLE_CHARACTERSET=AL32UTF8 - ENABLE_ARCHIVELOG=true db2: image: oracle/database:12.2.0.1-ee hostname: db2 ports: - "21521:1521" - "25500:5500" - "28080:8080" volumes: - "./db2/opt/oracle/oradata/:/opt/oracle/oradata/:rw" - "./db2/opt/oracle/fast_recovery_area/:/opt/oracle/fast_recovery_area/:rw" environment: - ORACLE_SID=ORACDB2 - ORACLE_PDB=ORAPDB - ORACLE_PWD=P%ssw0rd - ORACLE_CHARACTERSET=AL32UTF8 - ENABLE_ARCHIVELOG=true コンテナのoracleユーザが永続化用のデータ格納ディレクトリにアクセスできるように、事前にディレクトリを作成してパーミッションを設定する。 $ mkdir -p ./db{1,2}/opt/oracle/{fast_recovery_area,oradata} $ chmod a+w ./db{1,2}/opt/oracle/{fast_recovery_area,oradata} dockerコンテナ作成 ※使用環境ではdocker-composeは docker.compose コマンドで使用する。 # コンテナ作成(初回実行時にデータベース構築するため時間がかかる) $ docker.compose up -d # コンテナ確認 $ docker.compose ps 結果 Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------------------------ study-oracle12c_db1_1 /bin/sh -c exec $ORACLE_BA ... Up (healthy) 0.0.0.0:11521->1521/tcp,:::11521->1521/tcp, 0.0.0.0:15500->5500/tcp,:::15500->5500/tcp, 0.0.0.0:18080->8080/tcp,:::18080->8080/tcp study-oracle12c_db2_1 /bin/sh -c exec $ORACLE_BA ... Up (healthy) 0.0.0.0:21521->1521/tcp,:::21521->1521/tcp, 0.0.0.0:25500->5500/tcp,:::25500->5500/tcp, 0.0.0.0:28080->8080/tcp,:::28080->8080/tcp Oracleネットワーク設定 リスナー設定 コンテナ内でではエディタが使用できないため、ホスト側でlistener.oraファイルを以下の通り編集する。 db1/opt/oracle/oradata/dbconfig/ORACDB1/listener.ora LISTENER = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = ORACDB1) (ORACLE_HOME = /opt/oracle/product/12.2.0.1/dbhome_1) ) ) DEDICATED_THROUGH_BROKER_LISTENER=ON DIAG_ADR_ENABLED = off db2/opt/oracle/oradata/dbconfig/ORACDB2/listener.ora LISTENER = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = ORACDB2) (ORACLE_HOME = /opt/oracle/product/12.2.0.1/dbhome_1) ) ) DEDICATED_THROUGH_BROKER_LISTENER=ON DIAG_ADR_ENABLED = off 設定変更をコンテナのリスナーに反映する。 ※以下の操作はdb1のみ。db2についても同様に操作する。 # コンテナに接続 $ docker.compose exec db1 /bin/bash # リスナー再起動 $ lsnrctl stop $ lsnrctl start # 確認 $ lsnrctl status 結果 LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 21-OCT-2021 12:47:24 Copyright (c) 1991, 2016, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production Start Date 21-OCT-2021 12:34:34 Uptime 0 days 0 hr. 12 min. 49 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora Listener Log File /opt/oracle/diag/tnslsnr/db1/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=db1)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/ORACDB1/xdb_wallet))(Presentation=HTTP)(Session=RAW)) Services Summary... Service "ORACDB1" has 2 instance(s). Instance "ORACDB1", status UNKNOWN, has 1 handler(s) for this service... Instance "ORACDB1", status READY, has 1 handler(s) for this service... Service "ORACDB1XDB" has 1 instance(s). Instance "ORACDB1", status READY, has 1 handler(s) for this service... Service "ced9b8a51ed10967e053030019ac921f" has 1 instance(s). Instance "ORACDB1", status READY, has 1 handler(s) for this service... Service "orapdb" has 1 instance(s). Instance "ORACDB1", status READY, has 1 handler(s) for this service... The command completed successfully ネットサービス名設定 db1、db2ともにファイル内容は同じ。 db1/opt/oracle/oradata/dbconfig/ORACDB1/tnsnames.ora ORACDB1= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORACDB1) (UR = A) ) ) ORACDB2= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORACDB2) (UR = A) ) ) db2/opt/oracle/oradata/dbconfig/ORACDB2/tnsnames.ora ORACDB1= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORACDB1) (UR = A) ) ) ORACDB2= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORACDB2) (UR = A) ) ) フィジカル・スタンバイ・データベースの作成 スタンバイ・データベースを作成するためのプライマリ・データベースの準備 データベースに接続 $ docker.compose exec db1 /bin/bash $ sqlplus / as sysdba 強制ロギングの有効化 ALTER DATABASE FORCE LOGGING; アーカイブの有効化 SHUTDOWN IMMEDIATE STARTUP MOUNT ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; 確認 set lines 140 set pages 999 SELECT database_role,open_mode,log_mode,force_logging FROM v$database; 結果 DATABASE_ROLE OPEN_MODE LOG_MODE FORCE_LOGGING ---------------- -------------------- ------------ --------------------------------------- PRIMARY READ WRITE ARCHIVELOG YES REDOデータを受信するためのプライマリ・データベースの構成 REDOログファイル確認 set lines 140 set pages 999 col member format A60 col IS_RECOVERY_DEST_FILE format A22 col CON_ID format 99 SELECT * FROM gv$logfile ORDER BY GROUP#; INST_ID GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE CON_ID ---------- ---------- ------- ------- ------------------------------------------------------------ ---------------------- ------ 1 1 ONLINE /opt/oracle/oradata/ORACDB1/redo01.log NO 0 1 2 ONLINE /opt/oracle/oradata/ORACDB1/redo02.log NO 0 1 3 ONLINE /opt/oracle/oradata/ORACDB1/redo03.log NO 0 REDOログファイル確認(サイズ) SELECT group#,bytes/1048576 "SIZE(MB)" FROM v$log; GROUP# SIZE(MB) ---------- ---------- 1 200 2 200 3 200 スタンバイREDOログファイルの作成 ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 4 ('/opt/oracle/oradata/ORACDB1/redo01_standby.log') SIZE 200M, GROUP 5 ('/opt/oracle/oradata/ORACDB1/redo02_standby.log') SIZE 200M, GROUP 6 ('/opt/oracle/oradata/ORACDB1/redo03_standby.log') SIZE 200M, GROUP 7 ('/opt/oracle/oradata/ORACDB1/redo04_standby.log') SIZE 200M; 結果確認 SELECT * FROM gv$logfile ORDER BY GROUP#; INST_ID GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE CON_ID ---------- ---------- ------- ------- ------------------------------------------------------------ ---------------------- ------ 1 1 ONLINE /opt/oracle/oradata/ORACDB1/redo01.log NO 0 1 2 ONLINE /opt/oracle/oradata/ORACDB1/redo02.log NO 0 1 3 ONLINE /opt/oracle/oradata/ORACDB1/redo03.log NO 0 1 4 STANDBY /opt/oracle/oradata/ORACDB1/redo01_standby.log NO 0 1 5 STANDBY /opt/oracle/oradata/ORACDB1/redo02_standby.log NO 0 1 6 STANDBY /opt/oracle/oradata/ORACDB1/redo03_standby.log NO 0 1 7 STANDBY /opt/oracle/oradata/ORACDB1/redo04_standby.log NO 0 プライマリ・データベースの初期化パラメータの設定 初期化パラメータ設定 ALTER SYSTEM SET ALTER SYSTEM SET db_recovery_file_dest='/opt/oracle/fast_recovery_area' SCOPE=SPFILE; ALTER SYSTEM SET db_recovery_file_dest_size=2G SCOPE=SPFILE; ALTER SYSTEM SET log_archive_config='DG_CONFIG=(ORACDB1,ORACDB2)' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORACDB1' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_2='SERVICE=ORACDB2 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORACDB2' SCOPE=SPFILE; ALTER SYSTEM SET fal_server='ORACDB2' SCOPE=SPFILE; 初期化パラメータファイル作成 CREATE PFILE='/opt/oracle/oradata/dbconfig/ORACDB1/initORACDB1.ora' FROM SPFILE; スタンバイ・データベース用のインスタンス設定 初期化パラメータファイルをコピー $ cp db1/opt/oracle/oradata/dbconfig/ORACDB1/initORACDB1.ora \ db2/opt/oracle/oradata/dbconfig/ORACDB2/initORACDB2.ora 初期化パラメータをORACDB2用に編集 --- db1/opt/oracle/oradata/dbconfig/ORACDB1/initORACDB1.ora 2021-10-21 22:53:12.657628758 +0900 +++ db2/opt/oracle/oradata/dbconfig/ORACDB2/initORACDB2.ora 2021-10-21 22:54:23.909219368 +0900 @@ -1,32 +1,32 @@ -ORACDB1.__data_transfer_cache_size=0 -ORACDB1.__db_cache_size=1124073472 -ORACDB1.__inmemory_ext_roarea=0 -ORACDB1.__inmemory_ext_rwarea=0 -ORACDB1.__java_pool_size=16777216 -ORACDB1.__large_pool_size=33554432 -ORACDB1.__oracle_base='/opt/oracle'#ORACLE_BASE set from environment -ORACDB1.__pga_aggregate_target=536870912 -ORACDB1.__sga_target=1610612736 -ORACDB1.__shared_io_pool_size=83886080 -ORACDB1.__shared_pool_size=335544320 -ORACDB1.__streams_pool_size=0 -*.audit_file_dest='/opt/oracle/admin/ORACDB1/adump' +ORACDB2.__data_transfer_cache_size=0 +ORACDB2.__db_cache_size=1124073472 +ORACDB2.__inmemory_ext_roarea=0 +ORACDB2.__inmemory_ext_rwarea=0 +ORACDB2.__java_pool_size=16777216 +ORACDB2.__large_pool_size=33554432 +ORACDB2.__oracle_base='/opt/oracle'#ORACLE_BASE set from environment +ORACDB2.__pga_aggregate_target=536870912 +ORACDB2.__sga_target=1610612736 +ORACDB2.__shared_io_pool_size=83886080 +ORACDB2.__shared_pool_size=335544320 +ORACDB2.__streams_pool_size=0 +*.audit_file_dest='/opt/oracle/admin/ORACDB2/adump' *.audit_sys_operations=false *.audit_trail='none' *.compatible='12.2.0' -*.control_files='/opt/oracle/oradata/ORACDB1/control01.ctl' +*.control_files='/opt/oracle/oradata/ORACDB2/control01.ctl' *.db_block_size=8192 -*.db_name='ORACDB1' +*.db_name='ORACDB2' *.db_recovery_file_dest='/opt/oracle/fast_recovery_area' *.db_recovery_file_dest_size=2147483648 -*.db_unique_name='ORACDB1' +*.db_unique_name='ORACDB2' *.diagnostic_dest='/opt/oracle' -*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORACDB1XDB)' +*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORACDB2XDB)' *.enable_pluggable_database=true -*.fal_server='ORACDB2' -*.log_archive_config='DG_CONFIG=(ORACDB1,ORACDB2)' -*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORACDB1' -*.log_archive_dest_2='SERVICE=ORACDB2 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORACDB2' +*.fal_server='ORACDB1' +*.log_archive_config='DG_CONFIG=(ORACDB2,ORACDB1)' +*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORACDB2' +*.log_archive_dest_2='SERVICE=ORACDB1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORACDB1' *.nls_language='AMERICAN' *.nls_territory='AMERICA' *.open_cursors=300 データベースに接続 $ docker.compose exec db2 /bin/bash $ sqlplus / as sysdba スタンバイ・データベース用にインスタンスを再起動 shutdown immediate startup nomount pfile='/opt/oracle/oradata/dbconfig/ORACDB2/initORACDB2.ora' フィジカル・スタンバイ・データベース作成 RMAN接続 $ rman target sys/P%ssw0rd@ORACDB1 auxiliary sys/P%ssw0rd@ORACDB2 Recovery Manager: Release 12.2.0.1.0 - Production on Thu Oct 21 14:16:10 2021 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. connected to target database: ORACDB1 (DBID=1164041823) connected to auxiliary database: ORACDB2 (not mounted) スタンバイ・データベース複製 RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER SPFILE SET DB_UNIQUE_NAME='ORACDB2' SET AUDIT_FILE_DEST='/opt/oracle/admin/ORACDB2/adump' SET CONTROL_FILES='/opt/oracle/oradata/ORACDB2/control01.ctl' SET DB_FILE_NAME_CONVERT='/ORACDB1/','/ORACDB2/' SET LOG_FILE_NAME_CONVERT='/ORACDB1/','/ORACDB2/' SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORACDB2' SET LOG_ARCHIVE_DEST_2='SERVICE=ORACDB1 ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORACDB1' SET FAL_SERVER='ORACDB1'; 結果 Starting Duplicate Db at 21-OCT-21 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=261 device type=DISK current log archived contents of Memory Script: { backup as copy reuse targetfile '/opt/oracle/product/12.2.0.1/dbhome_1/dbs/orapwORACDB1' auxiliary format '/opt/oracle/product/12.2.0.1/dbhome_1/dbs/orapwORACDB2' ; restore clone from service 'ORACDB1' spfile to '/opt/oracle/product/12.2.0.1/dbhome_1/dbs/spfileORACDB2.ora'; sql clone "alter system set spfile= ''/opt/oracle/product/12.2.0.1/dbhome_1/dbs/spfileORACDB2.ora''"; } executing Memory Script Starting backup at 21-OCT-21 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=392 device type=DISK Finished backup at 21-OCT-21 〜省略〜 Starting recover at 21-OCT-21 using channel ORA_AUX_DISK_1 starting media recovery archived log for thread 1 with sequence 3 is already on disk as file /opt/oracle/fast_recovery_area/ORACDB2/archivelog/2021_10_21/o1_mf_1_3_jq2xqd0l_.arc archived log for thread 1 with sequence 4 is already on disk as file /opt/oracle/fast_recovery_area/ORACDB2/archivelog/2021_10_21/o1_mf_1_4_jq2xqf12_.arc archived log file name=/opt/oracle/fast_recovery_area/ORACDB2/archivelog/2021_10_21/o1_mf_1_3_jq2xqd0l_.arc thread=1 sequence=3 archived log file name=/opt/oracle/fast_recovery_area/ORACDB2/archivelog/2021_10_21/o1_mf_1_4_jq2xqf12_.arc thread=1 sequence=4 media recovery complete, elapsed time: 00:00:01 Finished recover at 21-OCT-21 Finished Duplicate Db at 21-OCT-21 データベース複製により、スタンバイ・データベースのspfileがコンテナ内のディレクトリに作成されるため、永続化ディレクトリに移動してシンボリックリンクを作り直す。 $ cd $ORACLE_HOME/dbs $ mv spfileORACDB2.ora /opt/oracle/oradata/dbconfig/ORACDB2/spfileORACDB2.ora $ ln -s /opt/oracle/oradata/dbconfig/ORACDB2/spfileORACDB2.ora . スタンバイ・データベースの状態確認 データベースに接続 $ docker.compose exec db2 /bin/bash $ sqlplus / as sysdba モード確認 set lines 140 set pages 999 SELECT database_role,open_mode,log_mode,force_logging FROM v$database; 結果 DATABASE_ROLE OPEN_MODE LOG_MODE FORCE_LOGGING ---------------- -------------------- ------------ --------------------------------------- PHYSICAL STANDBY MOUNTED ARCHIVELOG YES プライマリ・データベース再起動 データベースに接続 $ docker.compose exec db1 /bin/bash $ sqlplus / as sysdba インスタンス再起動 SHUTDOWN IMMEDIATE STARTUP モード確認 set lines 140 set pages 999 SELECT database_role,open_mode,log_mode,force_logging FROM v$database; 結果 DATABASE_ROLE OPEN_MODE LOG_MODE FORCE_LOGGING ---------------- -------------------- ------------ --------------------------------------- PRIMARY READ WRITE ARCHIVELOG YES Data Guard Broker設定 Data Guard Broker起動 ORACDB1 $ docker.compose exec db1 /bin/bash $ sqlplus -S / as sysdba <<'SQL' ALTER SYSTEM SET DG_BROKER_START=TRUE; SQL ORACDB2 $ docker.compose exec db2 /bin/bash $ sqlplus -S / as sysdba <<'SQL' ALTER SYSTEM SET DG_BROKER_START=TRUE; SQL Data Guard Broker構成 DGMGRL接続 $ docker.compose exec db1 /bin/bash $ dgmgrl / DGMGRL for Linux: Release 12.2.0.1.0 - Production on Thu Oct 21 14:47:08 2021 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected to "ORACDB1" Connected as SYSDG. プライマリDBを登録 DGMGRL> CREATE CONFIGURATION DGCONFIG AS PRIMARY DATABASE IS ORACDB1 CONNECT IDENTIFIER IS ORACDB1; Configuration "dgconfig" created with primary database "oracdb1" スタンバイDBを登録 DGMGRL> ADD DATABASE ORACDB2 AS CONNECT IDENTIFIER IS ORACDB2 MAINTAINED AS PHYSICAL; Database "oracdb2" added ブローカ構成を有効化 DGMGRL> enable configuration Enabled. ブローカ構成の状態確認 DGMGRL> show configuration Configuration - dgconfig Protection Mode: MaxPerformance Members: oracdb1 - Primary database oracdb2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS (status updated 25 seconds ago) プライマリDB状態確認 DGMGRL> show database ORACDB1 Database - oracdb1 Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): ORACDB1 Database Status: SUCCESS スタンバイDB状態確認 DGMGRL> show database ORACDB2 Database - oracdb2 Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 1 second ago) Apply Lag: 0 seconds (computed 1 second ago) Average Apply Rate: 8.00 KByte/s Real Time Query: OFF Instance(s): ORACDB2 Database Status: SUCCESS 参考 Oracle Data Guard概要および管理, 12cリリース2 (12.2) Oracle Data Guard Broker, 12cリリース2 (12.2) Oracle DataGuard - Qiita
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む