- 投稿日:2020-06-30T21:23:33+09:00
Dockerの不要コンテナを一括削除する
最近AWSのEC2(AmazonLinux2)上でDockerを入れて色々と
遊んで勉強しているのですが、
centosのコンテナを作成する → ごにょごにょする → 終わる、mysqlのコンテナを作る → ごにょごにょする → 終わるなどを繰り返し行い、たまにdocker ps
コマンドでコンテナの稼働状況を確認してたんですが、ある時docker ps -a
を実行したところなんじゃこりゃぁ!!となりました。
そこで「Dockerコンテナは終わっても、Dockerの事は嫌いにならないでください!」と
◯田敦子さんが言ったかどうかは定かではないですが、少なくともDockerコンテナは終わってもDockerコンテナは残っているという事を学んだわけです。無駄な前置きが長くなりましたが、この溜まりに溜まったゴミDockerコンテナを削除するための
コマンドの覚書です。awkを利用した不要コンテナの削除
削除前の状態
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ec50bb2ac79 mysql "docker-entrypoint.s…" 4 days ago Up 2 days 3306/tcp, 33060/tcp MYSQL 20cabc9db638 centos "/bin/bash" 4 days ago Up 2 days 0.0.0.0:9989->8080/tcp centos_container 149e47fc7182 mysql "docker-entrypoint.s…" 4 days ago Exited (0) 4 days ago silly_haibt 6d0b42666db1 mysql "docker-entrypoint.s…" 4 days ago Exited (0) 4 days ago stoic_panini cc75432e283b mysql "docker-entrypoint.s…" 4 days ago Exited (127) 4 days ago serene_merkle e75ea014088a mysql "docker-entrypoint.s…" 4 days ago Exited (0) 4 days ago laughing_allen 7f6d0144717d centos "/bin/bash" 4 days ago Exited (0) 4 days ago zealous_haibt b78d2f0c9b93 centos "/bin/bash" 4 days ago Exited (0) 4 days ago centos_1 a1adb31a4719 mysql "docker-entrypoint.s…" 4 days ago Exited (0) 4 days ago mysql_container b977c75c9dd7 mysql "docker-entrypoint.s…" 4 days ago Exited (1) 4 days ago bold_nobel 6c590752cab8 mysql "docker-entrypoint.s…" 4 days ago Exited (1) 4 days ago gifted_nightingale上記のうち、稼働中の上2つ以外を削除する。
※今回はdocker ps -f status=<ステータス>
で"Exited"のコンテナのみを削除docker ps -f status=exited | awk '{print $1}' | xargs docker rm実行結果
149e47fc7182 6d0b42666db1 cc75432e283b e75ea014088a 7f6d0144717d b78d2f0c9b93 a1adb31a4719 b977c75c9dd7 6c590752cab8 Error: No such container: CONTAINER[ ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ec50bb2ac79 mysql "docker-entrypoint.s…" 4 days ago Up 2 days 3306/tcp, 33060/tcp MYSQL 20cabc9db638 centos "/bin/bash" 4 days ago Up 2 days 0.0.0.0:9989->8080/tcp centos_container無事不要なコンテナは消えましたが、ヘッダー行の"CONTAINER"で
docker rm
をしようとしてエラーとなってますね。。(ま、いっか)Docker公式ドキュメント方式(-_-) ※こちらおすすめしております!
上記コマンド作成後、Docker公式マニュアルに稼働していないコンテナ削除方法が載ってました。。
上のしょーもないawk方式なんかより先に載せろよと言われるかもしれませんが...実行前状態(もう一度不要なコンテナを増産しました)
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 109839ada027 centos "/bin/bash" 35 seconds ago Exited (0) 34 seconds ago vibrant_bohr cf2e8c41b2ee centos "/bin/bash" 36 seconds ago Exited (0) 36 seconds ago brave_mestorf fcfdaf35235d centos "/bin/bash" 37 seconds ago Exited (0) 37 seconds ago gallant_faraday bf7b9fa96291 centos "/bin/bash" 38 seconds ago Exited (0) 38 seconds ago zealous_morse 9ec50bb2ac79 mysql "docker-entrypoint.s…" 4 days ago Up 2 days 3306/tcp, 33060/tcp MYSQL 20cabc9db638 centos "/bin/bash" 4 days ago Up 2 days 0.0.0.0:9989->8080/tcp centos_container削除コマンド
コマンド説明(公式マニュアルより)
このコマンドは停止しているコンテナを全て削除します。コマンド docker ps -a -q は終了した全てのコンテナ ID を rm コマンドに渡し、全て削除するものです。実行中のコンテナは削除されません。
docker rm $(docker ps -a -q)実行結果
109839ada027 cf2e8c41b2ee fcfdaf35235d bf7b9fa96291 Error response from daemon: You cannot remove a running container 9ec50bb2ac797f3cfdbe827aa2793ba135f6f29e9fd2c1b179afa09d6be4b5ba. Stop the container before attempting removal or force remove Error response from daemon: You cannot remove a running container 20cabc9db6380304c3c0c3b8a14f04e0bd60fd58c810ee4c02d6539fd5b4f3f3. Stop the container before attempting removal or force remove実行中のコンテナは削除しようとしてエラーとなります。
試してはいませんが、docker rm -f $(docker ps -a -q)
とするとコンテナ皆殺しの刑に処す!
となるはずですし、ここまで読んだ殆どの方はお気づきかと思いますが、上記awk方式で実施した
内容も下記コマンドで実現できます...docker rm $(docker ps -f status=exited -q)それでは、お後がよろしいようで。。。テケテン
- 投稿日:2020-06-30T15:29:06+09:00
サーバの時間を日本の時間にする方法
サーバの時間が世界の標準時間だった、ときのこと
何も設定していなければこうなるはず、だけど日本人で東京在住なので東京時間がいい。
$ date Fri Jun 12 04:32:25 UTC 2020CentOS7の場合
- 環境 : CentOS Linux release 7.8.2003 (Core)
# localtimeはUTCにリンクされている $ ls -la /etc/localtime lrwxrwxrwx. 1 root root 25 Feb 29 12:11 /etc/localtime -> ../usr/share/zoneinfo/UTC # ちょっと日本を探してみたら「Asia」「Japan」があった $ ls -la /usr/share/zoneinfo/ | grep -e Asia -e Japan drwxr-xr-x. 2 root root 4096 Feb 29 12:06 Asia -rw-r--r--. 2 root root 292 Sep 26 2019 Japan # `Asia/Tokyo`が`Japan`にリンクされているわけではないらしい $ ls -la /usr/share/zoneinfo/Asia/ | grep Tokyo -rw-r--r--. 2 root root 292 Sep 26 2019 Tokyo今だけ日本の時間にする方法
参考 : 【Linux】タイムゾーン(Timezone)の変更 - Qiita
# Tokyoにシンボリックリンクを上書きではる $ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime $ ls -la /etc/localtime lrwxrwxrwx. 1 root root 30 Jun 15 10:45 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo $ date Mon Jun 15 10:45:55 JST 2020ずっと日本の時間にする方法
参考 : 【 timedatectl 】コマンド――時刻を表示/設定する:Linux基本コマンドTips(312) - @IT
$ timedatectl Local time: Tue 2020-06-30 06:20:07 UTC Universal time: Tue 2020-06-30 06:20:07 UTC RTC time: Tue 2020-06-30 06:20:07 Time zone: UTC (UTC, +0000) ...省略... # 日本っぽいのを探すと「Asia/Tokyo」があった $ timedatectl list-timezones | grep -i -e japan -e tokyo Asia/Tokyo # タイムゾーンを「Asia/Tokyo」に設定する $ sudo timedatectl set-timezone Asia/Tokyo $ timedatectl Local time: Tue 2020-06-30 15:21:18 JST Universal time: Tue 2020-06-30 06:21:18 UTC RTC time: Tue 2020-06-30 06:21:18 Time zone: Asia/Tokyo (JST, +0900) ...省略... $ date Tue Jun 30 15:21:31 JST 2020
- 投稿日:2020-06-30T15:29:06+09:00
サーバの時間を日本の時間に設定する方法
サーバの時間が世界の標準時間だった、ときのこと
何も設定していなければこうなるはず、だけど日本人で東京在住なので東京時間がいい。
$ date Fri Jun 12 04:32:25 UTC 2020CentOS7の場合
- 環境 : CentOS Linux release 7.8.2003 (Core)
# localtimeはUTCにリンクされている $ ls -la /etc/localtime lrwxrwxrwx. 1 root root 25 Feb 29 12:11 /etc/localtime -> ../usr/share/zoneinfo/UTC # ちょっと日本を探してみたら「Asia」「Japan」があった $ ls -la /usr/share/zoneinfo/ | grep -e Asia -e Japan drwxr-xr-x. 2 root root 4096 Feb 29 12:06 Asia -rw-r--r--. 2 root root 292 Sep 26 2019 Japan # `Asia/Tokyo`が`Japan`にリンクされているわけではないらしい $ ls -la /usr/share/zoneinfo/Asia/ | grep Tokyo -rw-r--r--. 2 root root 292 Sep 26 2019 Tokyo今だけ日本の時間にする方法
参考 : 【Linux】タイムゾーン(Timezone)の変更 - Qiita
# Tokyoにシンボリックリンクを上書きではる $ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime $ ls -la /etc/localtime lrwxrwxrwx. 1 root root 30 Jun 15 10:45 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo $ date Mon Jun 15 10:45:55 JST 2020ずっと日本の時間にする方法
参考 : 【 timedatectl 】コマンド――時刻を表示/設定する:Linux基本コマンドTips(312) - @IT
$ timedatectl Local time: Tue 2020-06-30 06:20:07 UTC Universal time: Tue 2020-06-30 06:20:07 UTC RTC time: Tue 2020-06-30 06:20:07 Time zone: UTC (UTC, +0000) ...省略... # 日本っぽいのを探すと「Asia/Tokyo」があった $ timedatectl list-timezones | grep -i -e japan -e tokyo Asia/Tokyo # タイムゾーンを「Asia/Tokyo」に設定する $ sudo timedatectl set-timezone Asia/Tokyo $ timedatectl Local time: Tue 2020-06-30 15:21:18 JST Universal time: Tue 2020-06-30 06:21:18 UTC RTC time: Tue 2020-06-30 06:21:18 Time zone: Asia/Tokyo (JST, +0900) ...省略... $ date Tue Jun 30 15:21:31 JST 2020
- 投稿日:2020-06-30T14:43:26+09:00
Linuxのリダイレクト vol.3
リダイレクトの3つ目、まとめ。
今までのをテーブルに。
演算子(記号) 意味 > 標準出力の出力先を指定 >> 標準出力の出力先を指定し標準入力出力先に追記 << (終了文字) 後に文字を入力すると、自動に入力が終わる >& dev/null 呼び出せない これ全部左寄りに統一できないのかな、見栄え悪すぎ
- 投稿日:2020-06-30T13:19:44+09:00
Raspberry PI シリーズで分散環境構築(その9: Webクラスタ構築のケース(後半))
序 (連載一覧)
- Raspberry PI シリーズで分散環境構築(その1:モデル別、ディスクレスクライアント化の可否まとめ)
- Raspberry PI シリーズで分散環境構築(その2: PiServer の解析と代替システムの設計まで)
- Raspberry PI シリーズで分散環境構築(その3: dnsmasq のインストールと設定)
- Raspberry PI シリーズで分散環境構築(その4: NFSサーバの構築とクライアント用OSのインポート)
- Raspberry PI シリーズで分散環境構築(その5: クラスタノード向け Raspberry PI OS のカスタマイズ(1))
- Raspberry PI シリーズで分散環境構築(その6: クラスタノード向け Raspberry PI OS のカスタマイズ(2))
- Raspberry PI シリーズで分散環境構築(その7: 各ラズパイ向けの tftp ルート設定と起動試験)
- Raspberry PI シリーズで分散環境構築(その8: Webクラスタ構築のケース(前半))
- Raspberry PI シリーズで分散環境構築(その9: Webクラスタ構築のケース(後半))
概要
本稿は連載のその9となります。
前回までに、ディスクレスラズパイ側の設定は終了していますので、今回は上図の「分散環境コントローラ」または「PXEサーバ」にApache 2.4 をインストールし、ディスクレスラズパイをWebクラスタとして利用する部分を記載していきます。このような内容なので、タイトルに「Raspberry PI」の文字が含まれているにもかかわらず、ラズパイ自体の設定とは一切関係ない記事になっております(苦笑)
本稿の前提条件
- 上図 「PXEサーバ」にインストールしてもい良いのですが、本稿では上図の「分散環境コントローラ」に相当するマシン上に Apache2.4 をインストールすることにし(ルータ構成でなくても構いません)、以後、このホストを「コントローラ」と呼びます。
- Apache2.4 がインストール可能であれば、コントローラのディストリビューション1は何でも構いません。
- Apache 2.4 自身はコンテンツを提供せず、リバースプロキシ機能のみを実行します。
- ただし、認証、SSL化、セッション管理の一部は担うものとします
- ディストリビューションによって、Apache の設定ファイルである httpd.conf ファイルの記載方法は多様なので2、個別ディストリビューションに依存する方法では記述しません。設定するべきことは大して多くないので、本稿では全て1つの /etc/httpd.conf にまとめた形で、デフォルト状態から変更するべき箇所のみを記載します。
- コントローラホストの IP アドレス(対ユーザーアクセス)
- 172.16.0.80/20
- コントローラホストのIP(対ラズパイ)
- 192.168.172.18/24
- ディスクレスラズパイ群のIP
- 192.168.172.32〜35/24
- コントローラホストで開く TCP ポート
- 80/TCP, 443/TCP
- ディスクレスラズパイ群で開く TCP ポート
- 8000/TCP
- コントローラのホスト名(対ユーザーアクセス)
- raspicluster.localdomain
実際の作業
1. Apache 2.4 のインストールとサービスの無効化
1.1. インストール作業
コントローラのOSに依存しますので、ここでは個別のインストール方法は記載しません。
apt-get/dnf/pacman/emerge といったお使いの Linux ディストリビューション固有のパッケージコマンドなり、Apache サイトからダウンロードした msi ファイルをWindows 上で実行するなりして、Apache 自体をインストールしてください。1.2. (オプション)サービスの無効化
インストール直後の状況下ですと、電源投入時に Aapche が自動起動するような設定になってしまう環境が多くあります。ですが、設定が完了するまで起動しないほうが無難なので、各OS個別の方法で、自動起動サービスから除外しておいたほうがいいでしょう。(systemctl disable httpd 等)
2. httpd.conf の設定
以下、httpd.conf の内容を設定していきたいと思いますが、Apache の基本設定、SSL化、認証などの詳細は記載しません。Qiita の他のページや 本家をご覧ください。
2.1. mod_proxy(リバースプロキシ) + mod_proxy_balancer 向けのロードモジュール設定
全てが必要なわけではありませんが、以下のモジュールの追加読み込みが必要となります。
なお、OS/ディストリビューションによって、Apache 2.4 のモジュールが格納されている場所は異なりますが、本稿では Debian/Ubuntu のデフォルトである /usr/lib/apache2/modules にインストールされているものとします。
# mod_proxy_loadbalance が依存しているので、コメントアウトされていたら外す。 LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so # proxy モジュール本体(リバース/フォワード両対応。下記 proxy_http モジュール等が必要) LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so # http proxy モジュール LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so # (後ろにあるFTPサーバからファイルを提供するなら) # ftp proxy モジュール LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so # (ラズパイで Tomcat は無謀ですが、後ろで Tomcat を動かすなら。) # ajp proxy モジュール LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so # (トンネリングさせたいなら必要) LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so # mod_proxy_loadbalance が依存しているので必須 LoadModule slotmem_shm_module /usr/lib/apache2/modules/mod_slotmem_shm.so # proxy_loadbalance モジュール本体 (これだけでは動かない。下記の分散タイプモジュールを最低でも1つロードする必要がある) LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so # proxy_balancer 分散タイプモジュール(暇なホストに優先的に要求) LoadModule lbmethod_bybusyness_module /usr/lib/apache2/modules/mod_lbmethod_bybusyness.so # proxy_balancer 分散タイプモジュール(アクセス要求に大して単純なラウンドロビン) LoadModule lbmethod_byrequests_module /usr/lib/apache2/modules/mod_lbmethod_byrequests.so # proxy_balancer 分散タイプモジュール(通信量が少ないホストに要求) LoadModule lbmethod_bytraffic_module /usr/lib/apache2/modules/mod_lbmethod_bytraffic.so # proxy_balancer 分散タイプモジュール(クラスタ管理ソフトの HeartBeat を使用。本稿では利用しないので無視) #LoadModule lbmethod_heartbeat_module /usr/lib/apache2/modules/mod_lbmethod_heartbeat.so # 負荷分散マネージャを実行させたい場合は、mod_status を有効化する必要がある LoadModule status_module /usr/lib/apache2/modules/mod_status.so2.2. mod_proxy + mod_proxy_balancer を利用したリバースプロキシ専用バーチャルホスト設定
<VirtualHost *:80> # (ホスト名,ログ設定など省略。) # 全部クラスタノードに丸投げするので、ドキュメントルートは設定しなくて良い # <VirtualHost *:443> の場合は SSL/TLS の証明書関連設定がここに入る <IfModule proxy.c> # リバースプロキシの場合は off 必須 ProxyRequests off <IfModule proxy_balancer.c> # balanser://任意の名前(ラズパイ群を 'raspicluster' と名付けているがここ以外でこの名前は使わない) # lbmethod=負荷分散方式(byrequest/bybusyness/bytraffic) # timeout=秒数(ノードがダウンしていると判断するまでの時間) # maxattempts=回数(ノードがダウンしているときの再挑戦の上限回数) ProxyPass / balancer://raspicluster lbmethod=byrequest timeout=1 maxattempts=1 # なお、ノード側でサーバサイドプログラムを動かす場合等でセッション管理が必要な場合は以下の設定を利用すること。 # stickysession に指定する値は、サーバサイド側のプログラムに依存。この例は PHP の例 #ProxyPass / balancer://raspicluster lbmethod=bytraffic timeout=1 maxattempts=1 nofailover=On stickysession=PHPSESSIONID <Proxy balancer://raspicluster> # ここに認証関連設定が入る # ラズパイ 4B を優先 BalancerMember http://192.168.172.35:8000 loadfactor=6 # ラズパイ 3B+ BalancerMember http://192.168.172.34:8000 loadfactor=5 # ラズパイ 3B BalancerMember http://192.168.172.33:8000 loadfactor=4 # ラズパイ 2B BalancerMember http://192.168.172.32:8000 loadfactor=1 </Proxy> </IfModule> # 負荷分散マネージャページを実行したい場合の設定 # ここで分散タイプやノードの切り離しなどを行うことができるが、 # 設定ファイルに反映されることはないので、Apache を再起動すると設定は初期状態に戻るので注意 <IfModule mod_status.c> <Location /balancer-manager> SetHandler balancer-manager Order Deny,Allow Deny from all Allow from 127.0.0.1 172.16.0. </Location> </IfModule> </IfModule> </VirtualHost>とりあえず、負荷分散コントローラの設定は終了となります。
ここから、コントローラとディスクレスノード間の試験となるわけですが、スタティックコンテンツのみを返す設定なものですから、
どのノードが返事をしたのか不明ですよね。ノードの nginx が吐き出すログを見るしかありません。(暫定的に公開。書き足す予定)
- 投稿日:2020-06-30T01:23:47+09:00
[備忘録]Let's Encrypt でSSL化してからDocumentRootを変更する方法
問題定義
VPSサーバー(conohaのcentos7)をLet's EncryptでSSL化したもののDocumentRootをvar/www/htmlから変更できない。色々な記事を試したみたが、Apacheの仕組み理解度が薄く本質が読めなく難航したので書き記します。
環境
centos7
Apache/2.4.6解決方法
SSLのポート番号が443になるので、そちらをVirtualHostで設定してあげましょう。
etc/httpd/conf/httpd.confListen 80 -------下記に追加------ <VirtualHost *:443> ServerAdmin root@example.com ServerName example.com DocumentRoot /お好みのDocumentRoot/ SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem <Directory /お好みのDocumentRoot/ AllowOverride all Require all granted Options -MultiViews </Directory> </VirtualHost> ---------------------- # # Dynamic Shared Object (DSO) Supporthttpd.confに上記のコードを追加しましょう。