- 投稿日:2020-02-21T23:06:12+09:00
Macでkubectlの入力補完をできるようにする
Macでkubectlの入力補完をできるようにする方法について記載
(bash completionを導入する)1.まず、bashのバージョン確認
$ bash --version2.bashのバージョンが3.2系の場合
$ brew install bash-completion $ echo '[ -f $(brew --prefix)/etc/bash_completion ] && . $(brew --prefix)/etc/bash_completion' >> ~/.bashrc2.bashのバージョンが4.1以上の場合
$ brew install bash-completion@2 $ echo '[ -f $(brew --prefix)/share/bash-completion/bash_completion ] && . $(brew --prefix)/share/bash-completion/bash_completion' >> ~/.bashrc以上
参考
- 投稿日:2020-02-21T21:35:05+09:00
Debian だって日本語入力したい
問題
環境
- ruby の docker image:
2.7-slim-buster
(DockerHub の公式のもの)docker-compose
使ってる事象
ruby 環境を docker で立ち上げて
irb, pry から 日本語入力しようとしたらできない。(日本語を受け付けない)最初に結果
docker-compose.ymlweb: image: ruby: environment: ... LANG: C.UTF-8 # これを追加する ...これで日本語入力ができるようになりました。
詳細
0. ググる
こちら にたどり着く。
なるほど、OSによって対処が異なるのか。1. 使用しているOSの確認
こちら を参考に使っている docker image のOSを確認した。
どうやら起動している ruby コンテナのOSはDebian
らしい。では、
Debian
の locale (ロケール) の設定の方法が簡単には見つからず…。2. locale とは
言語_国.文字コード
3. locale コマンド
Linux には
locale
コマンドがあるとのこと。
fyi: https://www.atmarkit.co.jp/ait/articles/1812/06/news038.html# コンテナのコンソール開く $ docker-compose exec web bash # 利用可能なロケール名を表示する root@hogehoge# locale -a C C.UTF-8 POSIX4. コンテナのENVに言語を設定
先程のサイトによると
C,POSIX システム標準な英語
utf8(ja_JP.UTF-8) 日本語UTF-8とのことなので、日本語入力が使えそうなのは
C.UTF-8
!これを
docker-compose.yml
でENVに設定してみる。↓docker-compose.yml# 上部のコードの再掲 services: web: image: hoge environment: ... LANG: C.UTF-8 # これを追加する ...5. いざ
日本語を入力してみる。↓
# コンテナのコンソール開く $ docker-compose exec web bash # ENVが設定されているか一応確認しておく root@hogehoge# echo $LANG C.UTF-8 # irb 開いて日本語入力してみる root@hogehoge# irb irb(main):001:0> あああ Traceback (most recent call last): 4: from /usr/local/bin/irb:23:in `<main>' 3: from /usr/local/bin/irb:23:in `load' 2: from /usr/local/lib/ruby/gems/2.7.0/gems/irb-1.2.1/exe/irb:11:in `<top (required)>' 1: from (irb):1 NameError (undefined local variable or method `あああ' for main:Object)入力できるようになりました。
最後に
いろいろと間違っているかもしれません。
その際はご指摘いただけますと幸いです。
- 投稿日:2020-02-21T19:51:08+09:00
【備えあれば憂い無し】ROSインストール済みのLiveUSBイメージをビルドするスクリプトを作った
大会、商談など大事な時に限って、PCの調子が悪かったりバッテリーが切れたりして、ROSのデバッグが出来なかった。。。そんなことありませんか?
そんなとき、誰かのPCを使ってせめてrvizだけでも起動できれば、、、ということで、
Dockerとchrootを使用してROS LiveUSBを作成するスクリプトを作ってみました。
rdbox/utils/live-ros-builder at master · rdbox-intec/rdboxイメージの作成はとても簡単です。
特に作業環境を汚染しないことを意識しています。 (dockerとchrootを使用)備えあれば憂い無し
Get started
- Requirement
- Linux
- Docker
sudo
無しでdocker
コマンドが実行できるユーザ$ sudo gpasswd -a $USER docker $ sudo systemctl restart docker $ exit
- リポジトリを取ってくる
$ git clone https://github.com/rdbox-intec/rdbox $ cd rdbox/utils/live-ros-builder
- ISOを作る
- ROS1 (Melodic Morenia)
$ make iso-ros1
- USBに書き込む
dd
コマンドを使います。
は、USBメモリのドライブパスです(例:/dev/sdc) デバイス名は「sudo fdisk -l」で確認できます。$ sudo dd if=live-ros.iso of=<device> status=progress oflag=syncカスタマイズ
もしも、他のパッケージを追加でインストールする場合は
ListOfPackagesToInstall.txt
にパッケージ名を追加して下さい。$ vi ListOfPackagesToInstall.txt packageA packageB packageC : :
今後
ROS2とか需要があれば作ります。
参考文献
- 投稿日:2020-02-21T19:34:19+09:00
Dockerのコンテナを起動させる方法について
はじめに
最近Dockerを勉強しているので、Dockerの起動方法についてアウトプットがてら共有していきます。
まずはコンテナを確認しにいきましょう。
$ docker ps -aするとコンテナを確認することができると思うので、コンテナを起動させていきます。
$ docker start 起動させたいコンテナのIDこうすることでコンテナを起動することに成功しました!!
僕の場合nginxの起動に成功。
そして、コンテナを停止させたい場合は以下のコマンドを打てばOKです。
$ docker stop コンテナの IDサーバー言語の勉強も楽しいですが、インフラ系も面白いですね。Dockerに関してはまだまだ勉強中なので、これからも頑張っていきます。
- 投稿日:2020-02-21T17:45:31+09:00
日本人にやさしそうなMIRACLE ZBXをdocker-composeでまとめた
やり方だけまとめると
- 構成ファイルをとってくる(←中身は 構成ファイルの中身 参照)
- ビルド&起動する
- firewall設定する(←すでにやってあれば不要)
# git clone https://github.com/bashaway/miraclezbx # cd miraclezbx ; docker-compose up -d # firewall-cmd --add-masquerade --zone=public --permanent ; firewall-cmd --reloadで、環境がつくれる。
あとは、初回ログインとセットアップ を参照
はじめに
cactiのバージョンアップに伴い、自作プラグインの動作が怪しくなってきた。
ので、zabbixに乗り換えようかと思い、公式dockerとか他の方の記事とかで、どれがいいのか調べてみました。
なんか公式dockerは日本人にやさしくないようだったので、日本人にやさしそうな MIRACLE ZBX をつかってみました。MIRACLE ZBX
https://www.miraclelinux.com/product-service/zabbix/oss/downloadサイバートラストのZabbix互換パッケージは、OSSコミュニティで公開されているソースコードにサイバートラスト独自の機能追加、バグ修正を行い、各OS用にパッケージング、テストをしています。
だそうです。日本語Remix的に利用させていただきます。
インストールマニュアルも日本語になっていて、これに沿って進めれば何も考えずに日本語環境でタイムゾーンも日本になってました。
なので、再利用可能なように手順をまとめて自分用にdocker-compose化しました。対象機器および環境
検証環境
- CentOS8(8.1.1911)
- Docker(19.03.5)
- MIRACLE ZBX (4.0)
- MariaDB(10.4.12) <- 公式のlatestイメージ利用
今回はzabbixサーバのみです。エージェントはありません。
事前準備
CentOS と Docker と Docker Compose が無ければ、以下の記事のとおりに準備しておく。
ESXi6.7にCentOS8を最小構成で構築
CentOS8にDockerをインストール。名前解決できなかったのが解消した。作業内容
firewall のポリシー追加
firewall-cmd --add-masquerade --zone=public --permanent firewall-cmd --reload構成ファイルの準備
docker-compose.yml はじめファイル一式は GitHub にあるものを使います。
# git clone https://github.com/bashaway/miraclezbxデフォルトの設定から変更する場合は、docker-compose.ymlを直接修正します。
修正なしでよければ、次の手順 コンテナをつくる までスキップしてOKです。構成ファイルの中身
膨大な量でもないので、
git clone
で引っ張ってくる各ファイルを説明します。各ファイルは以下の配置です。
# tree miraclezbx --charset=C miraclezbx |-- README.md |-- docker-compose.yml |-- zbx_db | |-- Dockerfile | `-- zabbix.cnf `-- zbx_sv |-- Dockerfile `-- docker-entrypoint.shdocker-compose.yml で DBのアカウント、データベースなどの初期設定や、各コンテナのポートバインド、タイムゾーン設定などします。
必要であれば修正してください。miraclezbx/docker-compose.ymlversion: '3' services: zbx_db: build: ./zbx_db container_name: zbx_db hostname: zbx_db environment: MARIADB_DATABASE: zabbix MARIADB_USER: zabbix MARIADB_PASSWORD: zbxpwd MARIADB_ROOT_PASSWORD: rootpwd TZ: 'Asia/Tokyo' networks: zbx_nw: ports: - "3306:3306" zbx_sv: build: ./zbx_sv container_name: zbx_sv hostname: zbxa_sv restart: always networks: zbx_nw: ports: - 80:80 - 10051:10051 - 161:161/udp - 162:162/udp links: - zbx_db cap_add: - SYS_ADMIN security_opt: - seccomp:unconfined volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro environment: TZ: 'Asia/Tokyo' depends_on: - zbx_db networks: zbx_nw: driver: bridge driver_opts: com.docker.network.bridge.enable_ip_masquerade: "true" com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" com.docker.network.bridge.name: "br_zbx_nw"データベースサーバ(のコンテナ)
データベースには MariaDB の公式イメージを利用します。
インストールマニュアルでデータベースのパラメータが指定されているので、それを入れています。miraclezbx/zbx_db/DockerfileFROM mariadb/server:latest COPY zabbix.cnf /etc/mysql/mysql.conf.dインストールマニュアルのまんまの設定ファイルを準備
miraclezbx/zbx_db/zabbix.cnf[mysqld] character-set-server=utf8 skip-character-set-client-handshake innodb_file_per_table innodb_log_buffer_size=16M innodb_buffer_pool_size=1024M innodb_log_file_size=256M innodb_log_files_in_group=2 key_buffer_size=200M max_allowed_packet=16MBzabbixサーバ 兼 webサーバ(のコンテナ)
zabbixをインストールすると、docディレクトリに .sql が置かれ、それを流し込んでデータベースの初期化をします。
初回起動時のみ、流し込みを行うため、以下の記事のようにヘルパースクリプトを利用しています。
dockerで初回起動時のみ特定の処理を行うヘルパースクリプト(docker-entrypoint.sh)docker-compose.yml でデータベースのアカウント情報やホスト名などを修正した場合には、以下の2ファイルも修正が必要です。
miraclezbx/zbx_sv/DockerfileFROM centos:centos8 RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ; \ dnf -y update ; dnf -y install epel-release rsyslog logrotate cronie ; \ dnf -y install http://ftp.miraclelinux.com/zbx/4.0/miracle-zbx-release-4.0-2.noarch.rpm ;\ rpm --import http://ftp.miraclelinux.com/zbx/RPM-GPG-KEY-MIRACLE ; \ dnf -y install miracle-zbx-server-mysql miracle-zbx-web miracle-zbx-web-mysql miracle-zbx-web-japanese php-ldap ;\ sed -i 's/^#//' /etc/httpd/conf.d/zabbix.conf ; \ echo 'DBPassword=zbxpwd' >> /etc/zabbix/zabbix_server.conf ;\ echo 'DBHost=zbx_db' >> /etc/zabbix/zabbix_server.conf ;\ systemctl enable httpd ;\ systemctl enable zabbix-server COPY docker-entrypoint.sh /usr/local/bin/ RUN ln -s usr/local/bin/docker-entrypoint.sh / ENTRYPOINT ["docker-entrypoint.sh"] CMD [ "/usr/sbin/init" ]ヘルパースクリプトが以下
docker-compose.ymlでデータベースを先に起動するけど、起動完了までまたないと流し込みでエラーになってしまう。
なので、応答があるまでsleep 1
で待ちます。
その後、データベースはあっても、テーブルが無ければ、初期化の .sql を流し込む。ということをしています。miraclezbx/zbx_sv/docker-entrypoint.sh#!/bin/sh until mysqladmin -uzabbix -pzbxpwd -h zbx_db ping ; do sleep 1 done if [ "`mysql -uzabbix -pzbxpwd -h zbx_db zabbix -e 'show tables'`" = "" ] ; then zcat /usr/share/doc/miracle-zbx-server-mysql/create.sql.gz | mysql -uzabbix -pzbxpwd zabbix -h zbx_db fi exec "$@"コンテナをつくる
構成ファイルが準備できたらビルドして起動させる。
# docker-compose build (~省略~) # docker-compose up -d Creating network "miraclezbx_zbx_nw" with driver "bridge" Creating zbx_db ... done Creating zbx_sv ... done初回ログインとセットアップ
初回起動してすぐは sql 流し込みが走るので、10秒くらいまってから http でアクセスします。
アクセス先は http://アドレス or ホスト名/zabbix です。データベース情報はパラメータ変更していなければ、これ。(Passwordは
zbxpwd
)
初期アカウントは以下のもの
Username:Admin
Password:zabbix
さいごに
さて、プラグインの作り方を勉強しなきゃ。
出典
https://www.miraclelinux.com/support/docs/zbx/c3b23g/view
http://docs.docker.jp/compose/startup-order.html
https://github.com/docker-library/mariadb/blob/master/docker-entrypoint.sh
- 投稿日:2020-02-21T17:18:20+09:00
接続がVPC内部に限定されたリソース ( RDS, ElastiCache等) に、Docker Compose 内のコンテナからアクセス
接続がVPC内部に限定されたリソース ( RDS, ElastiCache, 他... ) に、Docker Compose 内のコンテナからのアクセス
(ちょっといじればWindowsとかでも利用できるとおもいますが、主にMacなりLinux向けです)
私が担当しているサービスのWebアプリケーションは、
docker-compose
を利用して開発し、運用環境はECRで稼働させています。
開発時、サンプルデータを作成するのが面倒なので、RDSは開発環境と検証環境は、同一のデータベースを利用しています。
つい最近まで、パブリックアクセシビリティをONにしていたのですが、セキュリティ的によろしくないので、非許容(OFF)にする事にしました。
RDSは、パブリックアクセシビリティをOFFにすると、VPC外からの接続ができなくなります。
会社などのネットワークから接続できなくなるわけですから、開発時にはRDSに直接接続できなくなりますが、SSH Tunnelingで接続できます。
つまり、RDSと同じVPC内にEC2インスタンスを立てておき、このEC2インスタンスを踏み台にしてアクセスするということです。開発端末からRDSに、開発端末のmysqlクライアントで接続したい場合、多くの情報が見つかります。
以下がその例になります。しかし今回の場合、開発にはDocker Composeを利用しているので、ローカルでトンネルを開通しても、ブリッジなど噛ますなどしなければ、
Docker Composeのネットワークから、ローカルに貼られたトンネルを利用できません。
そこらへんの手順は結構ややこしいので、なるべく少ない手順でSSH Tunnel を開通し、接続できないかと考えました。理想は、普段どおり
docker-compose up
だけでアプリケーションがRDSに接続できるようになることです。
新規に開発メンバーがジョインしたときなどに、なるべく開発開始までに時間がかからないようにしたいからです。
また、アプリケーションそのものに影響を与えないような設計が望ましいと考えました。デザイン
今回はPublic AccessibilityのないRDSへのアクセスを例に採ります。
以下の記事を大変参考にさせていただきました。
コンテナからSSHトンネルパターン (1)
コンテナからSSHトンネルパターン (2)開発端末、(Dockerを起動するホスト)側でSSHトンネルを開通して通信するのではなく、
Docker ComposeでSSHトンネリング専用のコンテナ(アンバサダーコンテナ)を立ち上げて、アプリケーションからのMySQLの向き先をアンバサダーコンテナに向ける方法です。このやり方なら、SSHトンネリング開通コマンドをアンバサダーコンテナのエントリーポイントに指定しておけば、docer-compose実行時に自動でトンネリングが開始されますし、同じDockerComposeネットワーク内の通信なので、ブリッジ等かませる必用はありません。
なお、証明書をボリュームマウントで利用しているのは、言わずもがなそちらのほうがセキュアだからです。
セキュリティ向上のためにVPC外のアクセスを断っているわけですから、DockerfileのADDなどでコンテナ内部に複製してしまうのは望ましくないと考えました。手順
セキュリティグループとかの設定は、省略します。
各自で開発端末からEC2インスタンスにSSHで接続して、
EC2インスタンスにmysqlクライアントをインストールしてRDSに接続できる所くらいまでは確認しておいてください。ディレクトリ構成
以下の様なディレクトリ構成を例に採り、説明します
web-app/ .env # 環境変数ファイル(きっとバージョン管理外, ECRでもタスク定義とかで設定するマスタ) .env.local # 環境変数ファイルその2 開発端末以外は利用しない環境変数はこちらに分けておく事にする docker-compose.yml dockerfiles/ app/ # アプリケーションコンテナ関連 (今回はさわらない) Dockerfile ... # アプリケーションコンテナ起動時に利用するファイルなど vpc-ssh-tunnel/ # 今回作成するアンバサダーコンテナ関連 Dockerfile run-ssh.sh # コンテナでCMDとして渡されるファイル ....他、アプリケーションのソースコードなどdocker-compose.yml
docker-compose.ymlversion: '3' services: webapp: # アプリケーション build: context: ./ dockerfile: dockerfiles/app/Dockerfile # まあ、各自そのままでおk env_file: - .env # ~~~~~~~~~~~ # 略 # ~~~~~~~~~~~ depends_on: - vpc-ssh-tunnel # runするときなども、vpc-ssh-tunnelコンテナを先に起動させる vpc-ssh-tunnel: # アンバサダーコンテナ build: context: ./ dockerfile: dockerfiles/vpc-ssh-tunnel/Dockerfile env_file: - .env # アプリケーションで利用している環境変数 - .env.local # SSH Tunnelingで利用する環境変数 volumes: - ~/.ssh:/cred:ro # Read Onlyで、Macの秘密鍵ディレクトリをマウントDockerfile
OpenSSHクライアントのインストール、起動時に実行するスクリプトをコピーして、エントリーポイントに指定
vpc-ssh-tunnel/DockerfileFROM alpine:latest RUN apk add --no-cache openssh-client WORKDIR /app ADD dockerfiles/vpc-ssh-tunnel/run-ssh.sh /app ENTRYPOINT ["/bin/sh", "/app/run-ssh.sh"]環境変数
.env
この環境変数は、アプリケーションが利用する環境変数を想定しています。
現在、何らかのアプリケーションを動かしている場合、すでにDB接続先を環境変数などで指定していると思います。
それに合わせる感じでいいのですが、とにかくDockerComposeを実行する際の、接続先ホストとポートを変更します.env. . . MYSQL_HOST=vpc-ssh-tunnel MYSQL_PORT=33062 # 影響ないポートを任意で指定 . . . 略.env.local
トンネリング用の環境変数です。
AWS上で稼働する運用環境では利用しないので、一応ファイルを分けました。
(現状、.env
は、ECRに環境変数を登録する際のマスタ的にも利用しているのです。。。).env.localSSH_USER={EC2インスタンスのSSH接続ユーザ名} SSH_HOST={EC2のGlobal IPアドレス} SSH_KEY_NAME={秘密鍵のファイル名} MYSQL_OUTBOUND_HOST={RDSのエンドポイント} MYSQL_OUTBOUND_PORT=3306 # RDS接続ポート。基本3306だと思うけど変えてるならここも変更エントリーポイント
ENTRYPOINTで指定しているシェルスクリプトです。
上述の2つの環境変数を利用して、SSHのトンネルを開通しますvpc-ssh-tunnel/run-ssh.sh#!/bin/sh ssh ${SSH_USER}@${SSH_HOST} -p 22 -i /cred/${SSH_KEY_NAME} -o "StrictHostKeyChecking no" -4 -fNL 0.0.0.0:${MYSQL_PORT}:${MYSQL_OUTBOUND_HOST}:${MYSQL_OUTBOUND_PORT} while true; do sleep 30; done;おしまい
あとは、
docker-compsoe up --build
などで、アンバサダーコンテナをビルドしつつオーケストレーションしましょう。
あ、docker-compose.yml
で、トンネル入口のポート番号(例だと33062)とかを空けておくなりすれば、開発端末のmysqlクライアントから接続もできるのではないかなと思います。課題として、SSH接続が数十分で切れる問題が起きているので、それも解決できたら追記しようと思います。
- 投稿日:2020-02-21T16:43:14+09:00
Docker on CentOS8
RHEL8からDockerコンテナーエンジン、Dockerコマンド等は無くなり、サポート対象外になっています。そのクローンOSであるCentOS8も同等であります。
デフォルト状態では、yum、dnfでインストールしようとしてもリポジトリにDockerが無いことも確認できます。RedHatとしては今後はpodmanを推奨のようです。
そんな中、CentOS8でDockerを稼働させる必要に迫られたので、その手順をまとめておくことにします。(自己責任の範囲)
CentOS8でDockerを稼働させる参考サイトは結構ありましたが、以下サイトを参考にさせてもらいました。感謝致します。
CentOS8にDockerをインストール。名前解決できなかったのが解消した。
検証環境は以下となります。
- VirtualBox Version6.1.2 r135662
- CentOS Linux release 8.1.1911 (Core)
- kernel 4.18.0-147.5.1.el8_1.x86_64
podmanアンインストール
本環境ではデフォルト状態でpodmanがインストールされていたのでアンインストールします。
コマンド# dnf -y remove podman モジュラーの依存に関する問題: 問題 1: conflicting requests - nothing provides module(perl:5.26) needed by module perl-DBD-SQLite:1.58:8010020191114033549:073fa5fe-0.x86_64 問題 2: conflicting requests - nothing provides module(perl:5.26) needed by module perl-DBI:1.641:8010020191113222731:16b3ab4d-0.x86_64 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= 削除中: podman x86_64 1.6.4-2.module_el8.1.0+272+3e64ee36 @AppStream 57 M 依存関係パッケージの削除: cockpit-podman noarch 11-1.module_el8.1.0+272+3e64ee36 @AppStream 4.0 M 未使用の依存関係の削除: conmon x86_64 2:2.0.6-1.module_el8.1.0+272+3e64ee36 @AppStream 83 k libvarlink x86_64 18-3.el8 @anaconda 129 k podman-manpages noarch 1.6.4-2.module_el8.1.0+272+3e64ee36 @AppStream 137 k トランザクションの概要 ============================================================================================================================================================= 削除 5 パッケージ 解放された容量: 62 M トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptletの実行中: cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/1 削除 : cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/5 削除 : podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 2/5 scriptletの実行中: podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 2/5 削除 : podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 3/5 削除 : conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 4/5 削除 : libvarlink-18-3.el8.x86_64 5/5 scriptletの実行中: libvarlink-18-3.el8.x86_64 5/5 検証 : cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/5 検証 : conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 2/5 検証 : libvarlink-18-3.el8.x86_64 3/5 検証 : podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 4/5 検証 : podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 5/5 削除しました: podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 libvarlink-18-3.el8.x86_64 podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 完了しました!Dockerインストール
リポジトリ追加
dnfコマンドでDockerをインストールしてもパッケージが無いと表示されるので、まずはリポジトリを追加します。
コマンド# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo repo の追加: https://download.docker.com/linux/centos/docker-ce.repoDockerインストール
dnfコマンドで普通にインストールしようとすると依存関係の問題でインストールできません。一旦ここでは「--nobest」オプションを指定して強制的にインストールを行います。
コマンド# dnf -y install --nobest docker-ce docker-ce-cli CentOS-8 - AppStream 11 kB/s | 4.3 kB 00:00 CentOS-8 - Base 8.0 kB/s | 3.8 kB 00:00 CentOS-8 - Extras 2.4 kB/s | 1.5 kB 00:00 Docker CE Stable - x86_64 53 kB/s | 21 kB 00:00 依存関係が解決しました。 問題: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed - cannot install the best candidate for the job - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded - package containerd.io-1.2.2-3.el7.x86_64 is excluded - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= インストール: docker-ce x86_64 3:18.09.1-3.el7 docker-ce-stable 19 M docker-ce-cli x86_64 1:19.03.6-3.el7 docker-ce-stable 40 M 依存関係のインストール: libcgroup x86_64 0.41-19.el8 BaseOS 70 k containerd.io x86_64 1.2.0-3.el7 docker-ce-stable 22 M 壊れた dependencies のパッケージをスキップします: docker-ce x86_64 3:19.03.6-3.el7 docker-ce-stable 24 M トランザクションの概要 ============================================================================================================================================================= インストール 4 パッケージ スキップ 1 パッケージ ダウンロードサイズの合計: 80 M インストール済みのサイズ: 338 M パッケージのダウンロード: (1/4): libcgroup-0.41-19.el8.x86_64.rpm 353 kB/s | 70 kB 00:00 (2/4): containerd.io-1.2.0-3.el7.x86_64.rpm 6.2 MB/s | 22 MB 00:03 (3/4): docker-ce-cli-19.03.6-3.el7.x86_64.rpm 9.4 MB/s | 40 MB 00:04 (4/4): docker-ce-18.09.1-3.el7.x86_64.rpm 3.6 MB/s | 19 MB 00:05 ------------------------------------------------------------------------------------------------------------------------------------------------------------- 合計 14 MB/s | 80 MB 00:05 警告: /var/cache/dnf/docker-ce-stable-091d8a9c23201250/packages/containerd.io-1.2.0-3.el7.x86_64.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID 621e9f35: NOKEY Docker CE Stable - x86_64 13 kB/s | 1.6 kB 00:00 GPG 鍵 0x621E9F35 をインポート中: Userid : "Docker Release (CE rpm) <docker@docker.com>" Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 From : https://download.docker.com/linux/centos/gpg 鍵のインポートに成功しました トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : docker-ce-cli-1:19.03.6-3.el7.x86_64 1/4 scriptletの実行中: docker-ce-cli-1:19.03.6-3.el7.x86_64 1/4 インストール中 : containerd.io-1.2.0-3.el7.x86_64 2/4 scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/4 scriptletの実行中: libcgroup-0.41-19.el8.x86_64 3/4 インストール中 : libcgroup-0.41-19.el8.x86_64 3/4 scriptletの実行中: libcgroup-0.41-19.el8.x86_64 3/4 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 4/4 インストール中 : docker-ce-3:18.09.1-3.el7.x86_64 4/4 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 4/4 検証 : libcgroup-0.41-19.el8.x86_64 1/4 検証 : containerd.io-1.2.0-3.el7.x86_64 2/4 検証 : docker-ce-3:18.09.1-3.el7.x86_64 3/4 検証 : docker-ce-cli-1:19.03.6-3.el7.x86_64 4/4 インストール済み: docker-ce-3:18.09.1-3.el7.x86_64 docker-ce-cli-1:19.03.6-3.el7.x86_64 libcgroup-0.41-19.el8.x86_64 containerd.io-1.2.0-3.el7.x86_64 スキップしました: docker-ce-3:19.03.6-3.el7.x86_64 完了しました!リポジトリ上、docker-ceの最新バージョン(2020年2月)は19.03.6ですが、18.09がインストールされます。そして、containerd.ioについては、最新バージョン(2020年2月)は1.2.10となりますが、1.2.0-3がインストールされます。
「docker-ce-3:19.03.6-3.el7.x86_64」をインストールするには、「containerd.io-1.2.2-3.el7.x86_64」以上が必要となるが、それが無いため依存関係を考慮し、18.09のdocker-ceと1.2.0-3のcontainerd.ioの組み合わせとなるようです。
この状態のままだと、「dnf upgrade」コマンドを実行すると以下のエラーとなります。
コマンド# dnf upgrade メタデータの期限切れの最終確認: 0:28:08 時間前の 2020年02月21日 01時28分55秒 に実施しました。 エラー: 問題: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed - cannot install the best update candidate for package docker-ce-3:18.09.1-3.el7.x86_64 - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded - package containerd.io-1.2.2-3.el7.x86_64 is excluded - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded (インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)CentOS7のリポジトリを利用して、containerd.ioをアップデートします。
コマンド# dnf -y update https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm メタデータの期限切れの最終確認: 0:30:47 時間前の 2020年02月21日 01時28分55秒 に実施しました。 containerd.io-1.2.10-3.2.el7.x86_64.rpm 8.8 MB/s | 23 MB 00:02 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= アップグレード: containerd.io x86_64 1.2.10-3.2.el7 @commandline 23 M 置き換え runc.x86_64 1.0.0-64.rc9.module_el8.1.0+272+3e64ee36 トランザクションの概要 ============================================================================================================================================================= アップグレード 1 パッケージ 合計サイズ: 23 M パッケージのダウンロード: トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64 1/1 アップグレード中 : containerd.io-1.2.10-3.2.el7.x86_64 1/3 scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64 1/3 scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/3 整理 : containerd.io-1.2.0-3.el7.x86_64 2/3 scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/3 廃止 : runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3 scriptletの実行中: runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3 検証 : containerd.io-1.2.10-3.2.el7.x86_64 1/3 検証 : containerd.io-1.2.0-3.el7.x86_64 2/3 検証 : runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3 アップグレード済み: containerd.io-1.2.10-3.2.el7.x86_64 完了しました!docker-ceのアップデートを行います。
コマンド# dnf -y update docker-ce メタデータの期限切れの最終確認: 0:35:03 時間前の 2020年02月21日 01時28分55秒 に実施しました。 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= アップグレード: docker-ce x86_64 3:19.03.6-3.el7 docker-ce-stable 24 M トランザクションの概要 ============================================================================================================================================================= アップグレード 1 パッケージ ダウンロードサイズの合計: 24 M パッケージのダウンロード: docker-ce-19.03.6-3.el7.x86_64.rpm 9.5 MB/s | 24 MB 00:02 ------------------------------------------------------------------------------------------------------------------------------------------------------------- 合計 9.5 MB/s | 24 MB 00:02 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptletの実行中: docker-ce-3:19.03.6-3.el7.x86_64 1/1 アップグレード中 : docker-ce-3:19.03.6-3.el7.x86_64 1/2 scriptletの実行中: docker-ce-3:19.03.6-3.el7.x86_64 1/2 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 2/2 /usr/bin/dockerd は dockerd の為の互換用として設定されていません。 整理 : docker-ce-3:18.09.1-3.el7.x86_64 2/2 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 2/2 検証 : docker-ce-3:19.03.6-3.el7.x86_64 1/2 検証 : docker-ce-3:18.09.1-3.el7.x86_64 2/2 アップグレード済み: docker-ce-3:19.03.6-3.el7.x86_64 完了しました!Dockerの自動起動を有効化します。
コマンド# systemctl enable docker Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.Dockerを起動します。
コマンド# systemctl start docker「docker version」コマンドを実行してみます。
コマンド# docker version Client: Docker Engine - Community Version: 19.03.6 API version: 1.40 Go version: go1.12.16 Git commit: 369ce74a3c Built: Thu Feb 13 01:29:29 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.6 API version: 1.40 (minimum version 1.12) Go version: go1.12.16 Git commit: 369ce74a3c Built: Thu Feb 13 01:28:07 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683「docker info」コマンドを実行してみます。
コマンド# docker info Client: Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 19.03.6 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339 runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 4.18.0-147.5.1.el8_1.x86_64 Operating System: CentOS Linux 8 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 3.692GiB Name: localhost.localdomain ID: 73MA:7GEH:Z4TQ:V4QU:O5JB:4DNI:R4LO:HMXO:GO2E:BSPN:NAKZ:2XFP Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: falseアップグレードコマンドを実行してもエラーが出なくなりました。
コマンド# dnf upgrade メタデータの期限切れの最終確認: 0:38:50 時間前の 2020年02月21日 01時28分55秒 に実施しました。 依存関係が解決しました。 行うべきことはありません。 完了しました!firewalldの変更
CentOS8の場合、デフォルトの状態ではDockerビルド中のdnfやyum等で名前解決ができません。
一つの回避方法としては、「docker container build」で「--network host」を指定して実行します。もう一つの回避方法は、以下firewalldでNAPTします。
コマンド# firewall-cmd --add-masquerade --permanent successコマンド# firewall-cmd --reload success依存関係を無視して強制インストールした状態で、Docker Composeを利用してWordPress環境を構築した際に、WordPressのコンテナーからMySQLのコンテナーへの接続における内部の名前解決ができないなど不具合がありましたが、上記手順で解決できました。
今後のdocker-ceのアップデート運用も検討が必要となりそうな感じですね。。
RHEL8からpodman推奨となるとDocker利用はUbuntuで利用するケースが多くなるかもしれませんが、それに代わるpodmanについても色々と追っていきたいと思いました。
- 投稿日:2020-02-21T16:43:14+09:00
Docker & Docker Compose on CentOS8
RHEL8からDockerコンテナーエンジン、Dockerコマンド等は無くなり、サポート対象外になっています。そのクローンOSであるCentOS8も同等であります。
デフォルト状態では、yum、dnfでインストールしようとしてもリポジトリにDockerが無いことも確認できます。RedHatとしては今後はpodmanを推奨のようです。
そんな中、CentOS8でDockerを稼働させる必要に迫られたので、その手順をまとめておくことにします。(自己責任の範囲)
CentOS8でDockerを稼働させる参考サイトは結構ありましたが、以下サイトを参考にさせてもらいました。感謝致します。
CentOS8にDockerをインストール。名前解決できなかったのが解消した。
検証環境は以下となります。
- VirtualBox Version6.1.2 r135662
- CentOS Linux release 8.1.1911 (Core)
- kernel 4.18.0-147.5.1.el8_1.x86_64
podmanアンインストール
本環境ではデフォルト状態でpodmanがインストールされていたのでアンインストールします。
コマンド# dnf -y remove podman モジュラーの依存に関する問題: 問題 1: conflicting requests - nothing provides module(perl:5.26) needed by module perl-DBD-SQLite:1.58:8010020191114033549:073fa5fe-0.x86_64 問題 2: conflicting requests - nothing provides module(perl:5.26) needed by module perl-DBI:1.641:8010020191113222731:16b3ab4d-0.x86_64 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= 削除中: podman x86_64 1.6.4-2.module_el8.1.0+272+3e64ee36 @AppStream 57 M 依存関係パッケージの削除: cockpit-podman noarch 11-1.module_el8.1.0+272+3e64ee36 @AppStream 4.0 M 未使用の依存関係の削除: conmon x86_64 2:2.0.6-1.module_el8.1.0+272+3e64ee36 @AppStream 83 k libvarlink x86_64 18-3.el8 @anaconda 129 k podman-manpages noarch 1.6.4-2.module_el8.1.0+272+3e64ee36 @AppStream 137 k トランザクションの概要 ============================================================================================================================================================= 削除 5 パッケージ 解放された容量: 62 M トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptletの実行中: cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/1 削除 : cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/5 削除 : podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 2/5 scriptletの実行中: podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 2/5 削除 : podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 3/5 削除 : conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 4/5 削除 : libvarlink-18-3.el8.x86_64 5/5 scriptletの実行中: libvarlink-18-3.el8.x86_64 5/5 検証 : cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch 1/5 検証 : conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 2/5 検証 : libvarlink-18-3.el8.x86_64 3/5 検証 : podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 4/5 検証 : podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 5/5 削除しました: podman-1.6.4-2.module_el8.1.0+272+3e64ee36.x86_64 cockpit-podman-11-1.module_el8.1.0+272+3e64ee36.noarch conmon-2:2.0.6-1.module_el8.1.0+272+3e64ee36.x86_64 libvarlink-18-3.el8.x86_64 podman-manpages-1.6.4-2.module_el8.1.0+272+3e64ee36.noarch 完了しました!Dockerインストール
リポジトリ追加
dnfコマンドでDockerをインストールしてもパッケージが無いと表示されるので、まずはリポジトリを追加します。
コマンド# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo repo の追加: https://download.docker.com/linux/centos/docker-ce.repoDockerインストール
dnfコマンドで普通にインストールしようとすると依存関係の問題でインストールできません。一旦ここでは「--nobest」オプションを指定して強制的にインストールを行います。
コマンド# dnf -y install --nobest docker-ce docker-ce-cli CentOS-8 - AppStream 11 kB/s | 4.3 kB 00:00 CentOS-8 - Base 8.0 kB/s | 3.8 kB 00:00 CentOS-8 - Extras 2.4 kB/s | 1.5 kB 00:00 Docker CE Stable - x86_64 53 kB/s | 21 kB 00:00 依存関係が解決しました。 問題: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed - cannot install the best candidate for the job - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded - package containerd.io-1.2.2-3.el7.x86_64 is excluded - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= インストール: docker-ce x86_64 3:18.09.1-3.el7 docker-ce-stable 19 M docker-ce-cli x86_64 1:19.03.6-3.el7 docker-ce-stable 40 M 依存関係のインストール: libcgroup x86_64 0.41-19.el8 BaseOS 70 k containerd.io x86_64 1.2.0-3.el7 docker-ce-stable 22 M 壊れた dependencies のパッケージをスキップします: docker-ce x86_64 3:19.03.6-3.el7 docker-ce-stable 24 M トランザクションの概要 ============================================================================================================================================================= インストール 4 パッケージ スキップ 1 パッケージ ダウンロードサイズの合計: 80 M インストール済みのサイズ: 338 M パッケージのダウンロード: (1/4): libcgroup-0.41-19.el8.x86_64.rpm 353 kB/s | 70 kB 00:00 (2/4): containerd.io-1.2.0-3.el7.x86_64.rpm 6.2 MB/s | 22 MB 00:03 (3/4): docker-ce-cli-19.03.6-3.el7.x86_64.rpm 9.4 MB/s | 40 MB 00:04 (4/4): docker-ce-18.09.1-3.el7.x86_64.rpm 3.6 MB/s | 19 MB 00:05 ------------------------------------------------------------------------------------------------------------------------------------------------------------- 合計 14 MB/s | 80 MB 00:05 警告: /var/cache/dnf/docker-ce-stable-091d8a9c23201250/packages/containerd.io-1.2.0-3.el7.x86_64.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID 621e9f35: NOKEY Docker CE Stable - x86_64 13 kB/s | 1.6 kB 00:00 GPG 鍵 0x621E9F35 をインポート中: Userid : "Docker Release (CE rpm) <docker@docker.com>" Fingerprint: 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 From : https://download.docker.com/linux/centos/gpg 鍵のインポートに成功しました トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : docker-ce-cli-1:19.03.6-3.el7.x86_64 1/4 scriptletの実行中: docker-ce-cli-1:19.03.6-3.el7.x86_64 1/4 インストール中 : containerd.io-1.2.0-3.el7.x86_64 2/4 scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/4 scriptletの実行中: libcgroup-0.41-19.el8.x86_64 3/4 インストール中 : libcgroup-0.41-19.el8.x86_64 3/4 scriptletの実行中: libcgroup-0.41-19.el8.x86_64 3/4 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 4/4 インストール中 : docker-ce-3:18.09.1-3.el7.x86_64 4/4 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 4/4 検証 : libcgroup-0.41-19.el8.x86_64 1/4 検証 : containerd.io-1.2.0-3.el7.x86_64 2/4 検証 : docker-ce-3:18.09.1-3.el7.x86_64 3/4 検証 : docker-ce-cli-1:19.03.6-3.el7.x86_64 4/4 インストール済み: docker-ce-3:18.09.1-3.el7.x86_64 docker-ce-cli-1:19.03.6-3.el7.x86_64 libcgroup-0.41-19.el8.x86_64 containerd.io-1.2.0-3.el7.x86_64 スキップしました: docker-ce-3:19.03.6-3.el7.x86_64 完了しました!リポジトリ上、docker-ceの最新バージョン(2020年2月)は19.03.6ですが、18.09がインストールされます。そして、containerd.ioについては、最新バージョン(2020年2月)は1.2.10となりますが、1.2.0-3がインストールされます。
「docker-ce-3:19.03.6-3.el7.x86_64」をインストールするには、「containerd.io-1.2.2-3.el7.x86_64」以上が必要となるが、それが無いため依存関係を考慮し、18.09のdocker-ceと1.2.0-3のcontainerd.ioの組み合わせとなるようです。
この状態のままだと、「dnf upgrade」コマンドを実行すると以下のエラーとなります。
コマンド# dnf upgrade メタデータの期限切れの最終確認: 0:28:08 時間前の 2020年02月21日 01時28分55秒 に実施しました。 エラー: 問題: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed - cannot install the best update candidate for package docker-ce-3:18.09.1-3.el7.x86_64 - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded - package containerd.io-1.2.2-3.el7.x86_64 is excluded - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded (インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)CentOS7のリポジトリを利用して、containerd.ioをアップデートします。
コマンド# dnf -y update https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.10-3.2.el7.x86_64.rpm メタデータの期限切れの最終確認: 0:30:47 時間前の 2020年02月21日 01時28分55秒 に実施しました。 containerd.io-1.2.10-3.2.el7.x86_64.rpm 8.8 MB/s | 23 MB 00:02 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= アップグレード: containerd.io x86_64 1.2.10-3.2.el7 @commandline 23 M 置き換え runc.x86_64 1.0.0-64.rc9.module_el8.1.0+272+3e64ee36 トランザクションの概要 ============================================================================================================================================================= アップグレード 1 パッケージ 合計サイズ: 23 M パッケージのダウンロード: トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64 1/1 アップグレード中 : containerd.io-1.2.10-3.2.el7.x86_64 1/3 scriptletの実行中: containerd.io-1.2.10-3.2.el7.x86_64 1/3 scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/3 整理 : containerd.io-1.2.0-3.el7.x86_64 2/3 scriptletの実行中: containerd.io-1.2.0-3.el7.x86_64 2/3 廃止 : runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3 scriptletの実行中: runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3 検証 : containerd.io-1.2.10-3.2.el7.x86_64 1/3 検証 : containerd.io-1.2.0-3.el7.x86_64 2/3 検証 : runc-1.0.0-64.rc9.module_el8.1.0+272+3e64ee36.x86_64 3/3 アップグレード済み: containerd.io-1.2.10-3.2.el7.x86_64 完了しました!docker-ceのアップデートを行います。
コマンド# dnf -y update docker-ce メタデータの期限切れの最終確認: 0:35:03 時間前の 2020年02月21日 01時28分55秒 に実施しました。 依存関係が解決しました。 ============================================================================================================================================================= パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================================================================= アップグレード: docker-ce x86_64 3:19.03.6-3.el7 docker-ce-stable 24 M トランザクションの概要 ============================================================================================================================================================= アップグレード 1 パッケージ ダウンロードサイズの合計: 24 M パッケージのダウンロード: docker-ce-19.03.6-3.el7.x86_64.rpm 9.5 MB/s | 24 MB 00:02 ------------------------------------------------------------------------------------------------------------------------------------------------------------- 合計 9.5 MB/s | 24 MB 00:02 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 scriptletの実行中: docker-ce-3:19.03.6-3.el7.x86_64 1/1 アップグレード中 : docker-ce-3:19.03.6-3.el7.x86_64 1/2 scriptletの実行中: docker-ce-3:19.03.6-3.el7.x86_64 1/2 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 2/2 /usr/bin/dockerd は dockerd の為の互換用として設定されていません。 整理 : docker-ce-3:18.09.1-3.el7.x86_64 2/2 scriptletの実行中: docker-ce-3:18.09.1-3.el7.x86_64 2/2 検証 : docker-ce-3:19.03.6-3.el7.x86_64 1/2 検証 : docker-ce-3:18.09.1-3.el7.x86_64 2/2 アップグレード済み: docker-ce-3:19.03.6-3.el7.x86_64 完了しました!Dockerの自動起動を有効化します。
コマンド# systemctl enable docker Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.Dockerを起動します。
コマンド# systemctl start docker「docker version」コマンドを実行してみます。
コマンド# docker version Client: Docker Engine - Community Version: 19.03.6 API version: 1.40 Go version: go1.12.16 Git commit: 369ce74a3c Built: Thu Feb 13 01:29:29 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.6 API version: 1.40 (minimum version 1.12) Go version: go1.12.16 Git commit: 369ce74a3c Built: Thu Feb 13 01:28:07 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683「docker info」コマンドを実行してみます。
コマンド# docker info Client: Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 19.03.6 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339 runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 4.18.0-147.5.1.el8_1.x86_64 Operating System: CentOS Linux 8 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 3.692GiB Name: localhost.localdomain ID: 73MA:7GEH:Z4TQ:V4QU:O5JB:4DNI:R4LO:HMXO:GO2E:BSPN:NAKZ:2XFP Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: falseアップグレードコマンドを実行してもエラーが出なくなりました。
コマンド# dnf upgrade メタデータの期限切れの最終確認: 0:38:50 時間前の 2020年02月21日 01時28分55秒 に実施しました。 依存関係が解決しました。 行うべきことはありません。 完了しました!firewalldの変更
CentOS8の場合、デフォルトの状態ではDockerビルド中のdnfやyum等で名前解決ができません。
一つの回避方法としては、「docker container build」で「--network host」を指定して実行します。もう一つの回避方法は、以下firewalldでNAPTします。
コマンド# firewall-cmd --add-masquerade --permanent successコマンド# firewall-cmd --reload successDocker Composeインストール
jqのインストール
コマンド# dnf -y install jq メタデータの期限切れの最終確認: 0:03:02 時間前の 2020年02月21日 03時25分28秒 に 実施しました。 依存関係が解決しました。 ================================================================================ パッケージ Arch バージョン リポジトリー サイズ ================================================================================ インストール: jq x86_64 1.5-12.el8 AppStream 161 k 依存関係のインストール: oniguruma x86_64 6.8.2-1.el8 AppStream 188 k トランザクションの概要 ================================================================================ インストール 2 パッケージ ダウンロードサイズの合計: 349 k インストール済みのサイズ: 1.0 M パッケージのダウンロード: (1/2): jq-1.5-12.el8.x86_64.rpm 1.9 MB/s | 161 kB 00:00 (2/2): oniguruma-6.8.2-1.el8.x86_64.rpm 1.6 MB/s | 188 kB 00:00 -------------------------------------------------------------------------------- 合計 682 kB/s | 349 kB 00:00 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : oniguruma-6.8.2-1.el8.x86_64 1/2 scriptletの実行中: oniguruma-6.8.2-1.el8.x86_64 1/2 インストール中 : jq-1.5-12.el8.x86_64 2/2 scriptletの実行中: jq-1.5-12.el8.x86_64 2/2 検証 : jq-1.5-12.el8.x86_64 1/2 検証 : oniguruma-6.8.2-1.el8.x86_64 2/2 インストール済み: jq-1.5-12.el8.x86_64 oniguruma-6.8.2-1.el8.x86_64 完了しました!最新版のDocker Conposeをインストールするスクリプト作成
コマンド# vim docker-compose-install.sh ------------------------------------------------------------------------------------------- #!/bin/bash compose_version=$(curl https://api.github.com/repos/docker/compose/releases/latest | jq .name -r) output='/usr/local/bin/docker-compose' curl -L https://github.com/docker/compose/releases/download/$compose_version/docker-compose-$(uname -s)-$(uname -m) -o $output chmod +x $output echo $(docker-compose --version) ------------------------------------------------------------------------------------------- Esc + :wq実行権付与します。
コマンド# chmod +x docker-compose-install.shスクリプト実行します。最後にdocker-composeのバージョンが表示されます。
コマンド# sh docker-compose-install.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 19167 100 19167 0 0 63049 0 --:--:-- --:--:-- --:--:-- 63049 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617 100 617 0 0 2730 0 --:--:-- --:--:-- --:--:-- 2730 100 16.3M 100 16.3M 0 0 3849k 0 0:00:04 0:00:04 --:--:-- 4486k docker-compose version 1.25.4, build 8d51620a依存関係を無視して強制インストールした状態で、Docker Composeを利用してWordPress環境を構築した際に、WordPressのコンテナーからMySQLのコンテナーへの接続における内部の名前解決ができないなど不具合がありましたが、上記手順で解決できました。
今後のdocker-ceのアップデート運用も検討が必要となりそうな感じですね。。
RHEL8からpodman推奨となるとDocker利用はUbuntuで利用するケースが多くなるかもしれませんが、それに代わるpodmanについても色々と追っていきたいと思いました。
- 投稿日:2020-02-21T15:05:20+09:00
DockerでRailsアプリケーション立ち上げ〜Githubプッシュまで
学んだこと、細かい設定、エラーをメモ
環境
Ruby 2.6.5
Rails 5.2.4
Docker 19.03.5
bundler 2.1.4
実装:Docker環境
各ファイル用意
適当にディレクトリ作成してその中に下記のファイルを入れる
ターミナル$ mkdir hoge
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
Dockerfile
Dockerの新しいimageを作成する際に使用する設定ファイル。
コンテナはこの設定(image)を元に作成される。
Dockerfile → クラス
コンテナ → インスタンス
みたいなイメージ?DockerfileFROM ruby:2.6.5 RUN apt-get update -qq && apt-get install -y build-essential nodejs RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock RUN bundle install COPY . /appdocker-compose.yml
Dockerで複数のコンテナを設定に従ってまとめて起動するために使用する。
今回はRailsを実行するコンテナ、Mysqlを実行するコンテナの2つを起動する設定を記述。docker-compose.ymlversion: '3' services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - 3000:3000 depends_on: - db tty: true stdin_open: true db: image: mysql:5.7 volumes: - db-volume:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password volumes: db-volume:Gemfilesource 'https://rubygems.org' gem 'rails', '5.2.4'Gemfile.lock空でOKRailsプロジェクト作成
ターミナル$ docker-compose run web rails new . --force --database=mysql
docker-compose run web
docker-compose.ymlで設定したWebコンテナ(Railsコンテナ)の中で後に続くコマンドが実行される。イメージをビルド
ターミナル$ docker-compose build
Dockerfile
が実行database.yml編集
passwordとhostの指定
database.ymlpassword: docker-compose.ymlの MYSQL_ROOT_PASSWORD で設定した文字列(今回はpassword) host: MySQLサーバーのコンテナ名(今回はdb)コンテナ起動
・起動
ターミナル$ docker-compose up -d・起動確認
ターミナル$ docker-compose psstateがUpになっていれば起動確認
・コンテナ、ネットワークの削除
--rmi all
でイメージも削除ターミナル$ docker-compose down --rmi allデータベース作成
ターミナル$ docker-compose run web bundle exec rails db:createbundlerのバージョンを変更したらエラー
1系がインストールされていることに気がついたので2系にしたらエラーがでた。
こちらの記事を参考に。DockerfileFROM ruby:2.6.5 RUN apt-get update -qq && apt-get install -y build-essential nodejs RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock RUN gem install bundler # 追加 RUN bundle install COPY . /app
bundle install
の前に最新のbundlerをインストールすることで解決。Docker内のMySQL接続方法
ターミナルdockerで立ち上げた MySQLへの接続 $ docker-compose up -d →コンテナ起動 $ docker-compose ps →現在立ち上がってるコンテナ確認 ↪︎ NAMEのdb名を確認(my_youtube_space_db_1) $ docker exec -it my_youtube_space_db_1 bash → コンテナへ接続 # mysql -u root -p →シャープが表示されたら入力する Enter password: → docker-compose.ymlで設定したパスワード入力 後はローカルのMySQLいじる時の操作と同じ実装:Githubへプッシュ
Git Flow
ターミナル$ git flow init enter * 7回リモート作成
github → Your profile → Repositories → NEW → リモート名記述 → Create repository
リモートとローカルの紐付け
ターミナル$ git remote add origin url $ git push -u origin master $ git push --all.gitignore編集
.gitignore# 追記 /config/database.yml docker-compose.ymladd commit push
割愛
- 投稿日:2020-02-21T13:26:26+09:00
Linuxの演習用環境を手軽に準備する方法のメモ
Linuxコマンドを叩いたことのない人向けに、Linuxコマンドの演習用環境を用意した時のメモ
主な要件と状況
・手軽に用意したい
・別途費用が発生して欲しくない(純粋なマシン利用料含め、準備にかかるコスト)
・手元にあるLinuxマシンが1台だけ使える
常用しているマシンのため荒らして欲しくない結論
DockerコンテナでLinux環境を用意することで、一部の特権的操作を除き作業できる環境を用意する。
下記のようなdocker-composeファイルを作り、centosを使用できるコンテナを用意する。
centos/tools:latestイメージは、centosに基本的なツールを入れてあるイメージです。
普通のcentosイメージの場合、minimalな状態のため別途ツールを入れる必要があるため、こちらを利用する。
※ただ、このイメージを使ってもnetstatなどのコマンドが入らないため別途精査する必要はある。docker-compose.ymlservices: cent: image: centos/tools:latest container_name: cent tty: trueあとは適当なLinuxユーザを作成して、dockerグループへ所属させる。
あとはコンテナへアクセスするためのdocker execコマンドを叩いてもらうだけ。docker グループを明け渡すことも若干抵抗があるので、コンテナのsshポートを開けて接続してもらう方がいいかもしれない。
特権が必要なコマンドを実行する方法(未調査)
下記のようにprivilegedや/sbin/initなどを使うことで特権コマンドも使えるようになるっぽい。
今回のケースでは、ホストマシン側の影響を少なくしたかったので使用は避けたが、どうでもいいマシンならこの方法を取りたい。
docker run -it -d --privileged --name centos7 centos:7 /sbin/init
- 投稿日:2020-02-21T12:41:13+09:00
クラウドサーバー上のDockerでインストールしたKali LinuxをGUIで使いたい
GUIで動かすKali Linux
以前の記事でDockerでKali Linuxを導入しました。
しかし、Kali LinuxはGUIで利用することが多く、CUIでは不便だということを知りました。
そこで今回、クラウドサーバー上のDockerでインストールしたKali Linuxを、簡単にGUIで動かす方法について紹介したいと思います。(作業自体は簡単でしたが、Dockerの知識不足と情報量の少なさではまってしまいました)
VNCでGUI接続
今回、GUI接続するためにVNCを使います。
VNCとは、Virtual Network Computingの略で、文字通りコンピューターを遠隔動作するためのツールとなっています。
今回はVNCを簡単にインストールできるChromeの拡張機能の、VNC® Viewer for Google Chromeを使いたいと思います。
前提条件
- Dockerインストール済みのクラウドのUbuntu18.04サーバー
VNCがインストールされたDockerイメージを利用
今回は前回のKali LinuxのDockerイメージと違って、VNCサーバーがインストールされたものを使います。
$ wget https://github.com/rringler/kali-vnc/archive/master.zip $ unzip master.zip $ cd kali-vnc-master $ docker build -t kali:latest . $ sudo docker imagesKali Linuxを起動
ここの起動時がポイントです。
クラウドサーバーからコンテナを起動する場合は、IPアドレスとポートを指定してください。
IPアドレスを指定せずポートのみを指定し起動すると、デフォルトの0.0.0.0のlocalhostのIPが割り振られてしまいます。
VNC接続時はIPアドレス:ポートで接続することになるので、ホスト側でこの指定をしないと接続できなくなってしまいます。
$ sudo docker run -it --name kali -p IPアドレス:6080:6080 -p IPアドレス:5091:5091 kali:latestコンテナ内に入ったら、初期設定とVNCサーバーを立ち上げます。
# apt-get update && apt-get install metasploit-framework && apt-get upgrade # vncserver :1VNCに接続
その後、VNC® Viewer for Google Chromeを立ち上げ、IPアドレス:5901でconnectを押したら、Kali LinuxのGUI環境が立ち上がります。
これで、Kali LinuxのGUI接続は完了です。
参考URL
https://qiita.com/moe-hana/items/14c5d2ecfc054dd12708
http://www.no1497.com/?p=598
- 投稿日:2020-02-21T12:41:13+09:00
クラウドサーバー上のDockerでインストールしたKali LInuxをGUIで使いたい
GUIで動かすKali Linux
以前の記事でDockerでKali Linuxを導入しました。
しかし、Kali LinuxはGUIで利用することが多く、CUIでは不便だということを知りました。
そこで今回、クラウドサーバー上のDockerでインストールしたKali Linuxを、簡単にGUIで動かす方法について紹介したいと思います。(作業自体は簡単でしたが、Dockerの知識不足と情報量の少なさではまってしまいました)
VNCでGUI接続
今回、GUI接続するためにVNCを使います。
VNCとは、Virtual Network Computingの略で、文字通りコンピューターを遠隔動作するためのツールとなっています。
今回はVNCを簡単にインストールできるChromeの拡張機能の、VNC® Viewer for Google Chromeを使いたいと思います。
前提条件
- Dockerインストール済みのクラウドのUbuntu18.04サーバー
VNCがインストールされたDockerイメージを利用
今回は前回のKali LinuxのDockerイメージと違って、VNCサーバーがインストールされたものを使います。
$ wget https://github.com/rringler/kali-vnc/archive/master.zip $ unzip master.zip $ cd kali-vnc-master $ docker build -t kali:latest . $ sudo docker imagesKali Linuxを起動
ここの起動時がポイントです。
クラウドサーバーからコンテナを起動する場合は、IPアドレスとポートを指定してください。
IPアドレスを指定せずポートのみを指定し起動すると、デフォルトの0.0.0.0のlocalhostのIPが割り振られてしまいます。
VNC接続時はIPアドレス:ポートで接続することになるので、ホスト側でこの指定をしないと接続できなくなってしまいます。
$ sudo docker run -it --name kali -p IPアドレス:6080:6080 -p IPアドレス:5091:5091 kali:latestコンテナ内に入ったら、初期設定とVNCサーバーを立ち上げます。
# apt-get update && apt-get install metasploit-framework && apt-get upgrade # vncserver :1VNCに接続
その後、VNC® Viewer for Google Chromeを立ち上げ、IPアドレス:5901でconnectを押したら、Kali LinuxのGUI環境が立ち上がります。
これで、Kali LinuxのGUI接続は完了です。
参考URL
https://qiita.com/moe-hana/items/14c5d2ecfc054dd12708
http://www.no1497.com/?p=598
- 投稿日:2020-02-21T12:31:03+09:00
Dockerのコンテナの管理コマンド集
概要
ここでは、Dockerのコンテナの管理コマンド集を備忘録的に翻訳して記載する。
後に編集して内容をさらに肉付けしていく予定。多分。。。コンテナの管理コマンド集
docker attach
docker attach
docker container attach
でもOK。
実行中のコンテナに標準入力出力の接続を行う。docker commit
docker commit
docker container commit
でもOK。
コンテナ内部で変更されたファイルを基にdockerイメージを作成する。docker cp
docker cp
docker container cp
でもOK。
ホスト環境間でファイルやフォルダをコピーする。docker create
docker create
docker container create
でもOK。
新しいコンテナを作成するdocker diff
docker diff
docker container diff
でもOK。
コンテナの内部で変更があったファイルを調べる。docker exec
docker exec実行中のコンテナ内部でコマンド実行する。
docker export
docker exporttarアーカイブとしてコンテナのファイル一式を取り出す。
docker container inspect
docker container inspectコンテナの詳細な情報を表示する。
docker kill
docker kill実行中のコンテナへシグナルを送る。
※Dockerが作成したPID 1のプロぜスに対して。docker logs
docker logsコンテナからログを取得する。
docker ps
docker psコンテナの一覧を表示する
docker pause
docker pauseコンテナで動作している全てのプロセスを一時停止する。
docker port
docker portコンテナのポートマッピングを表示する
docker container prune
docker container prune停止しているコンテナを全て削除する
docker rename
docker renameコンテナ名を変更する
docker restart
docker restartコンテナを再起動する。
docker rm
docker rmコンテナを削除する
docker run
新しいコンテナでコマンドを実行するdocker start
docker start停止しているコンテナを起動する
docker status
docker statusコンテナのリソース利用状態を表示する(topコマンドのようなもの)
docker stop
実行中のコンテナを停止するdocker top
docker topコンテナ内部で実行中のプロセスを表示する
※psコマンド的なもの。docker unpause
docker unpause一時停止しているプロセスを再開する
docker update
docker updateコンテナの設定を更新する
docker wait
docker waitコンテナの終了を待ってから終了コードを表示する
ボリュームの管理コマンド集
ボリュームってコンテナのライフサイクルとは独立した領域だそうです。
コンテナを削除した場合、コンテナ内で変更されたファイルは削除されます。
しかし、ボリュームは明示的に削除しない限り内容が保たれるとの事。ちなみにボリュームは複数のコンテナにまたがって共有したり、ホスト環境のディレクトリを共有することもできるそうです。
docker volume create
docker volume createボリュームを作成する。
docker volume inspect
docker volume inspectボリュームの詳細な情報を表示する。
docker volume ls
docker volume lsボリュームの一覧を表示する。
docker volume prune
docker volume prune不要なボリュームを削除する
docker volume rm
docker volume rmボリュームを削除する
続きはまた後で書きます。
- 投稿日:2020-02-21T11:39:52+09:00
Dockerイメージの管理コマンド集
概要
ここでは、タイトルの通りDockerイメージの管理コマンドを備忘録的にまとめます。
後で編集して、もっとわかりやすいように肉付けしていくつもりです。Dockerイメージの管理コマンド集
docker image build
docker image buildDockerfileからDockerイメージをビルドする
docker image history
docker image historyDockerイメージの生成時の履歴を表示する
docker image import
docker image importtarアーカイブなどからイメージを生成する
docker image inspect
docker image inspectDockerイメージの詳細な情報を表示する
docker image load
docker image loadtarアーカイブからdockerイメージを読み込む
docker image prune
docker image prune不要なdockerイメージを削除する。
※ タグが付いていないコンテナで使われていないやつ。docker image pull
docker image pullレジストリからdockerイメージを取得する
docker image push
docker image pushレジストリへdockerイメージを送信する
docker images
docker imagesdockerイメージの一覧を表示する
docker image rm
docker image rmdokerイメージを削除する
docker image save
docker image savedockerイメージをtarアーカイブで出力する
※docker image load
で読めるようになるdocker image tag
docker image tag [イメージID] [DockerHubのアカウント名/イメージ名:タグ名]既存のdockerイメージに対してタグをつける
- 投稿日:2020-02-21T11:14:33+09:00
Docker CLIのコマンド一覧
概要
dockerのコマンドをよく忘れたり、英語サイトを翻訳するのが面倒なので、ここで整理します。
これは備忘録的なものです。
Windowsの人は、管理者権限なPowerShellからコマンドが打てます。インストール後によくチェックするヤツ
dockerのバージョン確認
docker versionこの意味はそのまま。
実行するとバージョン情報が表示されます。docer-composeのバージョン確認
docker-compose versionこれもそのまま。
docker-composeのバージョンが表示されます。子コマンド達
ここからは、後で編集しながら肉付けしています。
docker attach
docker attachdocker build
docker builddocker builder
docker builderdocker checkpoint
docker checkpointdocker commit
docker commitdocker config
docker configdocker container
docker containerdocker context
docker contextdocker cp
docker cpdocker create
docker createdocker diff
docker diffdocker events
docker eventsdocker exec
docker execdocker export
docker exportdocker history
docker historydocker image
docker imagedocker images
docker imagesdocker import
docker importdocker info
docker infodocker inspect
docker inspectdocker kill
docker killdocker load
docker loaddocker login
docker logindocker logout
docker logoutdocker logs
docker logsdocker manifest
docker manifestdocker network
docker networkdocker node
docker nodedocker pause
docker pausedocker plugin
docker plugindocker port
docker portdocker ps
docker psdocker pull
docker pulldocker push
docker pushdocker rename
docker renamedocker restart
docker restartdocker rm
docker rmdocker rmi
docker rmidocker run
docker rundocker save
docker savedocker search
docker searchdocker secret
docker secretdocker service
docker servicedocker stack
docker stackdocker start
docker startdocker stats
docker statsdocker stop
docker stopdocker swarm
docker swarmdocker system
docker systemdocker tag
docker tagdocker top
docker topdocker trust
docker trustdocker unpause
docker unpausedocker update
docker updatedocker version
docker versiondocker volume
docker volumedocker wait
docker wait
- 投稿日:2020-02-21T09:32:29+09:00
docker-composeでPHP開発環境
docker-composeでRails5.2開発環境 に続き、PHPの開発環境もdocker-composeで構築してみました。本当はPHP5系の検証環境が欲しかったのですが、5.4のイメージを使うとコンテナ間の通信がどうしてもうまくいかずに断念しました。当初の目的には使えませんでしたが、7系では問題なく動いたので備忘のための投稿しています。
必要なのは以下の2つのファイルです。
DockerfileFROM php:7.3-apache RUN docker-php-ext-install pdo_mysqldocker-compose.ymlversion: '3' services: db: image: mysql:5.7 volumes: - ./mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=secret php: build: . volumes: - ./html:/var/www/html ports: - 8080:80 depends_on: - dbファイルを設置後、以下のコマンドを実行します。
docker-compose build docker-compose up別のターミナルからデータベースの作成コマンドを実行します。
docker-compose exec db mysql -e "create database mydb default charset utf8" -p今回は、以下のようなプログラムで動作確認しています。htmlフォルダ下に置いてください。
index.php<p> <?php echo "Hello PHP on Docker!"; ?> </p> <p> <?php // docker-compose exec db mysql -e "create database mydb default charset utf8" -p $pdo = new PDO("mysql:host=db;dbname=mydb","root","secret"); $pdo->exec("create table if not exists t (v varchar(255))"); $pdo->exec("insert into t values ('Hello MySQL on Docker!')"); foreach ($pdo->query("select * from t") as $row) { echo $row['v'] . "<br/>"; } ?> </p>ブラウザで http://localhost:8080 にアクセスすると以下のようなページが表示されます。
ハマりどころ
- phpのイメージで
apt-get
は動作しませんでした、代わりにdocker-php-ext-install
でモジュールを追加します。- volumesで永続化した領域を意識しましょう。例えば、一度でも起動した後から、MYSQL_ROOT_PASSWORDを変更しても効きません。環境構築中であれば、少しでもおかしくなったなと思ったら躊躇なく削除してやり直すのが早いと思います。
- docker-compose.ymlから何でもやろうとすると、細かいところで詰まります。今回だとデータベースのエンコード設定などです。
docker-compose exec
なんかも組み合わせる必要がどうしてもあるような気がします。参考URL
- 投稿日:2020-02-21T09:10:17+09:00
dockerで初回起動時のみ特定の処理を行うヘルパースクリプト(docker-entrypoint.sh)
はじめに
docker run
とかdocker-compose up -d
とかの 初回起動時のみ 処理したいことがある時はどうすればいいんだろう?
docker restart
とかdocker-compose restart
とかsystemctl restart docker
の時には動いてほしくないんだ。やってみた結果 mariadb + zabbix で初回起動時のみ、構成用の .sql を流し込む。という動作ができるようになりました。
日本人にやさしそうなMIRACLE ZBXをdocker-composeでまとめた経緯
zabbix の docker-compose.yml を作成しようとしたら、 dnf でインストールした後に特定ディレクトリにある .sql を MariaDB に食わせる必要がありました。
ビルド時には DB が起動してないので、流し込めない。
MariaDB の初回起動時の .sql ファイル流し込みだと、現時点の .sql は準備できるけど、zabbix のアップデートに追従できない。
rc.local 起動時のスクリプトで実行しようとしたら、ホスト機やサービスの再起動のたびに動いてしまう。どうしよう。
動作の概要
ということで、MariaDB とか mysql とか postgresql とかの公式イメージでやってる、初回起動時の .sql 流し込みのアイデアを拝借しました。
考え方は以下のとおり
- Dockerfileの
ENTRYPOINT
でdocker-entrypoint.sh
というヘルパースクリプトを呼び出す。- Dockerfileの
CMD
に"/sbin/init"
を書き込んでヘルパースクリプトに引数として渡す。- ヘルパースクリプトは判別用のディレクトリの有無を確認し、
- ディレクトリが無い場合 -> 作成する
- ディレクトリが有る場合 -> なにもしない
- ヘルパースクリプトは前段の処理のあと、自身を起動した際の引数の文字列(=
/sbin/init
)を実行するこれで、コンテナを初回起動した場合のみ、特定の処理を挟み込むことができる。
検証
ホントにできるか検証します。
ファイルの準備
以下のようにファイルを準備します。
sample |-- Dockerfile |-- docker-compose.yml `-- docker-entrypoint.sh/root/sample/DockerfileFROM centos:centos8 COPY docker-entrypoint.sh /tmp ENTRYPOINT ["/tmp/docker-entrypoint.sh"] CMD [ "/sbin/init" ]/root/sample/docker-compose.ymlversion: '3' services: sample: build: ./ container_name: sample hostname: sample restart: always cap_add: - SYS_ADMIN security_opt: - seccomp:unconfined volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro environment: TZ: 'Asia/Tokyo'/root/sample/docker-entrypoint.sh#!/bin/sh if [ ! -d "/tmp/check" ]; then mkdir /tmp/check echo `date` > /tmp/check/first_`date +%Y%m%d_%H%M%S` else echo `date` > /tmp/check/second_`date +%Y%m%d_%H%M%S` fi exec "$@"動作確認
ビルド&初回起動 -> コンテナリスタート -> コンテナリスタート
としたときdocker-entrypoint.sh
で作成されるダミーファイルの状況を追ってみます。# docker-compose up --build -d ; docker exec -it sample ls -1 /tmp/check Creating network "sample_default" with the default driver Building sample Step 1/4 : FROM centos:centos8 ---> 470671670cac Step 2/4 : COPY docker-entrypoint.sh /tmp ---> 65969481a77a Step 3/4 : ENTRYPOINT ["/tmp/docker-entrypoint.sh"] ---> Running in faa635fbdd2c Removing intermediate container faa635fbdd2c ---> f0fd6de7dd9f Step 4/4 : CMD [ "/sbin/init" ] ---> Running in 4d8a074a1da4 Removing intermediate container 4d8a074a1da4 ---> cae2d8667ff6 Successfully built cae2d8667ff6 Successfully tagged sample_sample:latest Creating sample ... done first_20200220_213008 (↑初回起動時処理のファイルが作成されている) # docker-compose restart ; docker exec -it sample ls -1 /tmp/check Restarting sample ... done first_20200220_213008 second_20200220_213025 (↑初回起動時ではない処理のファイルが作成されている) # docker-compose restart ; docker exec -it sample ls -1 /tmp/check Restarting sample ... done first_20200220_213008 second_20200220_213025 second_20200220_213042 (↑初回起動時ではない処理のファイルが作成されている)ということで、無事にそれっぽいことができました。
ここに zabbix をインストールしたときに作成される .sql を流し込めば、全自動で処理ができそうです。もちろん、
/sbin/init
の動作もきちんとできていました。# docker exec -it sample bash (これでコンテナにログイン) [root@sample /]# systemctl status ● sample State: running Jobs: 0 queued Failed: 0 units Since: Thu 2020-02-20 21:30:58 JST; 3min 14s ago CGroup: /docker/f8a80d798e046e22c343f95b4fc9c9b8d623d0ef97ba39becfdc1debe21a0b35 tq83 bash tq96 systemctl status tq97 less tqinit.scope x mq1 /sbin/init mqsystem.slice tqsystemd-journald.service x mq22 /usr/lib/systemd/systemd-journald mqdbus.service mq36 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only [root@sample /]#うん、大丈夫そう。
さいごに
ん、よく考えたら、同じようなことを rc.local でやればよかったのかも。
Dockerfile のことを少し知れたので、勉強にはなりましたが。"ヘルパースクリプト"という言葉自体、あまり使われていないのですね
実は全然イケてない方法だったり?使い方まちがってたりして?と、ちょっとビクビクします
もしくは当たり前すぎんだよ!てな感じでしょうか。。。参考
http://docs.docker.jp/engine/reference/run.html
https://github.com/docker-library/mysql/tree/master/8.0
- 投稿日:2020-02-21T02:44:05+09:00
Docker/Kubernetes便利ツール調査
docker-compose
ライセンスは、Apache License 2.0
1.25.4 (2020/02/03)Visual Stdio Code
Kubernetes, Docker周りのVSCode便利拡張機能
Dockerで立ち上げた開発環境をVS Codeで開く!
VSCodeとDockerで簡単に開発環境を構築&共有する方法
Visual Studio CodeのRemote DevelopmentとDockerで快適な開発環境をゲットbash-completion ~dockerコマンドの補完~
Enable Docker command-line auto completion in bash on Centos/Ubuntu
dockerコマンドの補完を設定する
bash/zshとfzfでDocker関連コマンドの補完を行う方法kubectl completion
kubectl completion: Bash/Zsh 向けの kubectl のシェル自動補完
kubectlコマンドの補完を有効化する
kubectl で補完を有効にするkubectl completion zsh
ライセンスは、GNU General Public License v3.0
v0.1.12 (2019/05/22)docker-slim
ライセンスは、Apache License 2.0
1.26.1 (2019/11/29)spotify/docker-gc
ライセンスは、Apache License 2.0
dockerのcontainerとimageを一括削除する方法「spotify/docker-gc」
「Docker のいらないイメージを削除する」 Docker イメージがあるって
docker image pruneでimageが削除されない理由を教えてくださいDescheduler
ライセンスは、Apache License 2.0
v0.10.0 (2020/02/20)KubernetesのPodを再配置
Kubernetes DeschedulerでPodを再配置する
図で理解する Descheduler
k8s Deschedulerを使いこなしてスムーズなオートスケールを実現する
Kubernetesのノード障害時の挙動とノード復帰後の再スケジューリングdockerfile-lint
ライセンスは、MIT License
v0.3.3 (2018/08/17)DockerfileのLintツール
hadolint
ライセンスは、GNU General Public License v3.0
v1.17.5 (2020/01/30)DockerfileのLintツール
Dockerfileの静的解析ツールが便利すぎた
DockerfileをLintする
「hadolint」にシバかれながら美しいDockerfileを書き上げるConvoy(コンボイ)
ライセンスは、Apache License 2.0
v0.5.2 (2018/12/08)Dockerコンテナ環境のバックアップツール
Dockerコンテナ環境のバックアップツール「Convoy」を使う
第11回 Docker環境のバックアップをラクにする「Convoy」とは?