20200221のdockerに関する記事は18件です。

Macでkubectlの入力補完をできるようにする

Macでkubectlの入力補完をできるようにする方法について記載
(bash completionを導入する)

1.まず、bashのバージョン確認

$ bash --version

2.bashのバージョンが3.2系の場合

$ brew install bash-completion
$ echo '[ -f $(brew --prefix)/etc/bash_completion ] && . $(brew --prefix)/etc/bash_completion' >> ~/.bashrc

2.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

以上

参考

https://kubernetes.io/docs/tasks/tools/install-kubectl/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Debian だって日本語入力したい

問題

環境

  • ruby の docker image: 2.7-slim-buster (DockerHub の公式のもの)
  • docker-compose 使ってる

事象

ruby 環境を docker で立ち上げて
irb, pry から 日本語入力しようとしたらできない。(日本語を受け付けない)

最初に結果

docker-compose.yml
web:
  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
POSIX

4. コンテナの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)

入力できるようになりました。

最後に

いろいろと間違っているかもしれません。
その際はご指摘いただけますと幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備えあれば憂い無し】ROSインストール済みのLiveUSBイメージをビルドするスクリプトを作った

usb_hand_memory.png

大会、商談など大事な時に限って、PCの調子が悪かったりバッテリーが切れたりして、ROSのデバッグが出来なかった。。。そんなことありませんか?
そんなとき、誰かのPCを使ってせめてrvizだけでも起動できれば、、、

ということで、
Dockerとchrootを使用してROS LiveUSBを作成するスクリプトを作ってみました。
rdbox/utils/live-ros-builder at master · rdbox-intec/rdbox

イメージの作成はとても簡単です。
特に作業環境を汚染しないことを意識しています。 (dockerとchrootを使用)

備えあれば憂い無し

Get started

  1. Requirement
    • Linux
    • Docker
    • sudo無しでdockerコマンドが実行できるユーザ
   $ sudo gpasswd -a $USER docker
   $ sudo systemctl restart docker
   $ exit
  1. リポジトリを取ってくる
   $ git clone https://github.com/rdbox-intec/rdbox
   $ cd rdbox/utils/live-ros-builder
  1. ISOを作る
    • ROS1 (Melodic Morenia)
   $ make iso-ros1
  1. 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とか需要があれば作ります。

参考文献

How to create a custom Ubuntu live from scratch - ITNEXT

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerのコンテナを起動させる方法について

はじめに

最近Dockerを勉強しているので、Dockerの起動方法についてアウトプットがてら共有していきます。

まずはコンテナを確認しにいきましょう。

$ docker ps -a

するとコンテナを確認することができると思うので、コンテナを起動させていきます。

$ docker start 起動させたいコンテナのID

こうすることでコンテナを起動することに成功しました!!

スクリーンショット 2020-02-21 19.31.45.png

僕の場合nginxの起動に成功。

そして、コンテナを停止させたい場合は以下のコマンドを打てばOKです。

$ docker stop コンテナの ID

サーバー言語の勉強も楽しいですが、インフラ系も面白いですね。Dockerに関してはまだまだ勉強中なので、これからも頑張っていきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

日本人にやさしそうなMIRACLE ZBXをdocker-composeでまとめた

やり方だけまとめると

  1. 構成ファイルをとってくる(←中身は 構成ファイルの中身 参照)
  2. ビルド&起動する
  3. 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.sh

docker-compose.yml で DBのアカウント、データベースなどの初期設定や、各コンテナのポートバインド、タイムゾーン設定などします。
必要であれば修正してください。

miraclezbx/docker-compose.yml
version: '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/Dockerfile
FROM 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=16MB

zabbixサーバ 兼 webサーバ(のコンテナ)

zabbixをインストールすると、docディレクトリに .sql が置かれ、それを流し込んでデータベースの初期化をします。
初回起動時のみ、流し込みを行うため、以下の記事のようにヘルパースクリプトを利用しています。
dockerで初回起動時のみ特定の処理を行うヘルパースクリプト(docker-entrypoint.sh)

docker-compose.yml でデータベースのアカウント情報やホスト名などを修正した場合には、以下の2ファイルも修正が必要です。

miraclezbx/zbx_sv/Dockerfile
FROM 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 です。

Next Step で進めていく
Screenshot from Gyazo

データベース情報はパラメータ変更していなければ、これ。(Passwordは zbxpwd
Screenshot from Gyazo

ZBXサーバ情報はパラメータ変更していなければ、これ。
Screenshot from Gyazo

こうなるはず
Screenshot from Gyazo

あとは Fishish をクリック
Screenshot from Gyazo

初期アカウントは以下のもの
Username:Admin
Password:zabbix
Screenshot from Gyazo

これだけで日本語環境がつかえる。
Screenshot from Gyazo

さいごに

さて、プラグインの作り方を勉強しなきゃ。

出典

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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

接続が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クライアントで接続したい場合、多くの情報が見つかります。
以下がその例になります。

RDSにSSHポートフォワーディングを利用して接続してみた

しかし今回の場合、開発にはDocker Composeを利用しているので、ローカルでトンネルを開通しても、ブリッジなど噛ますなどしなければ、
Docker Composeのネットワークから、ローカルに貼られたトンネルを利用できません。
そこらへんの手順は結構ややこしいので、なるべく少ない手順でSSH Tunnel を開通し、接続できないかと考えました。

理想は、普段どおり docker-compose up だけでアプリケーションがRDSに接続できるようになることです。
新規に開発メンバーがジョインしたときなどに、なるべく開発開始までに時間がかからないようにしたいからです。
また、アプリケーションそのものに影響を与えないような設計が望ましいと考えました。

デザイン

今回はPublic AccessibilityのないRDSへのアクセスを例に採ります。

以下の記事を大変参考にさせていただきました。

コンテナからSSHトンネルパターン (1)
コンテナからSSHトンネルパターン (2)

開発端末、(Dockerを起動するホスト)側でSSHトンネルを開通して通信するのではなく、
Docker ComposeでSSHトンネリング専用のコンテナ(アンバサダーコンテナ)を立ち上げて、アプリケーションからのMySQLの向き先をアンバサダーコンテナに向ける方法です。

DockerCompose SSH Tunneling.jpg

このやり方なら、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.yml
version: '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/Dockerfile
FROM 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.local
SSH_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接続が数十分で切れる問題が起きているので、それも解決できたら追記しようと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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.repo

Dockerインストール

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

完了しました!

CentOS7 パッケージリポジトリ

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についても色々と追っていきたいと思いました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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.repo

Dockerインストール

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

完了しました!

CentOS7 パッケージリポジトリ

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インストール

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についても色々と追っていきたいと思いました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 → クラス
コンテナ → インスタンス
みたいなイメージ?

Dockerfile
FROM 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 . /app

docker-compose.yml
Dockerで複数のコンテナを設定に従ってまとめて起動するために使用する。
今回はRailsを実行するコンテナ、Mysqlを実行するコンテナの2つを起動する設定を記述。

docker-compose.yml
version: '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:
Gemfile
source 'https://rubygems.org'
gem 'rails', '5.2.4'
Gemfile.lock
空でOK

Railsプロジェクト作成

ターミナル
$ docker-compose run web rails new . --force --database=mysql

docker-compose run web
docker-compose.ymlで設定したWebコンテナ(Railsコンテナ)の中で後に続くコマンドが実行される。

イメージをビルド

ターミナル
$ docker-compose build

Dockerfileが実行

database.yml編集

passwordhostの指定

database.yml
password: docker-compose.ymlの MYSQL_ROOT_PASSWORD で設定した文字列(今回はpassword)
host: MySQLサーバーのコンテナ名(今回はdb)

コンテナ起動

・起動

ターミナル
$ docker-compose up -d

・起動確認

ターミナル
$ docker-compose ps

stateUpになっていれば起動確認

・コンテナ、ネットワークの削除
--rmi allでイメージも削除

ターミナル
$ docker-compose down --rmi all

データベース作成

ターミナル
$ docker-compose run web bundle exec rails db:create

bundlerのバージョンを変更したらエラー

1系がインストールされていることに気がついたので2系にしたらエラーがでた。
こちらの記事を参考に。

Dockerfile
FROM 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.yml

add commit push

割愛

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxの演習用環境を手軽に準備する方法のメモ

Linuxコマンドを叩いたことのない人向けに、Linuxコマンドの演習用環境を用意した時のメモ

主な要件と状況

・手軽に用意したい
・別途費用が発生して欲しくない(純粋なマシン利用料含め、準備にかかるコスト)
・手元にあるLinuxマシンが1台だけ使える
常用しているマシンのため荒らして欲しくない

結論

DockerコンテナでLinux環境を用意することで、一部の特権的操作を除き作業できる環境を用意する。

下記のようなdocker-composeファイルを作り、centosを使用できるコンテナを用意する。
centos/tools:latestイメージは、centosに基本的なツールを入れてあるイメージです。
普通のcentosイメージの場合、minimalな状態のため別途ツールを入れる必要があるため、こちらを利用する。
※ただ、このイメージを使ってもnetstatなどのコマンドが入らないため別途精査する必要はある。

docker-compose.yml
services:
  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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

クラウドサーバー上の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 images

Kali 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 :1

VNCに接続

その後、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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

クラウドサーバー上の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 images

Kali 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 :1

VNCに接続

その後、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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 export

tarアーカイブとしてコンテナのファイル一式を取り出す。

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

ボリュームを削除する

続きはまた後で書きます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerイメージの管理コマンド集

概要

ここでは、タイトルの通りDockerイメージの管理コマンドを備忘録的にまとめます。
後で編集して、もっとわかりやすいように肉付けしていくつもりです。

Dockerイメージの管理コマンド集

docker image build

docker image build

DockerfileからDockerイメージをビルドする

docker image history

docker image history

Dockerイメージの生成時の履歴を表示する

docker image import

docker image import

tarアーカイブなどからイメージを生成する

docker image inspect

docker image inspect

Dockerイメージの詳細な情報を表示する

docker image load

docker image load

tarアーカイブから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 images

dockerイメージの一覧を表示する

docker image rm

docker image rm

dokerイメージを削除する

docker image save

docker image save

dockerイメージをtarアーカイブで出力する
docker image loadで読めるようになる

docker image tag

docker image tag [イメージID] [DockerHubのアカウント名/イメージ名:タグ名]

既存のdockerイメージに対してタグをつける

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker CLIのコマンド一覧

概要

dockerのコマンドをよく忘れたり、英語サイトを翻訳するのが面倒なので、ここで整理します。
これは備忘録的なものです。
Windowsの人は、管理者権限なPowerShellからコマンドが打てます。

インストール後によくチェックするヤツ

dockerのバージョン確認

docker version

この意味はそのまま。
実行するとバージョン情報が表示されます。

docer-composeのバージョン確認

docker-compose version

これもそのまま。
docker-composeのバージョンが表示されます。

子コマンド達

ここからは、後で編集しながら肉付けしています。

docker attach

docker attach

docker build

docker build

docker builder

docker builder

docker checkpoint

docker checkpoint

docker commit

docker commit

docker config

docker config

docker container

docker container

docker context

docker context

docker cp

docker cp

docker create

docker create

docker diff

docker diff

docker events

docker events

docker exec

docker exec

docker export

docker export

docker history

docker history

docker image

docker image

docker images

docker images

docker import

docker import

docker info

docker info

docker inspect

docker inspect

docker kill

docker kill

docker load

docker load

docker login

docker login

docker logout

docker logout

docker logs

docker logs

docker manifest

docker manifest

docker network

docker network

docker node

docker node

docker pause

docker pause

docker plugin

docker plugin

docker port

docker port

docker ps

docker ps

docker pull

docker pull

docker push

docker push

docker rename

docker rename

docker restart

docker restart

docker rm

docker rm

docker rmi

docker rmi

docker run

docker run

docker save

docker save

docker search

docker search

docker secret

docker secret

docker service

docker service

docker stack

docker stack

docker start

docker start

docker stats

docker stats

docker stop

docker stop

docker swarm

docker swarm

docker system

docker system

docker tag

docker tag

docker top

docker top

docker trust

docker trust

docker unpause

docker unpause

docker update

docker update

docker version

docker version

docker volume

docker volume

docker wait

docker wait
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

docker-composeでPHP開発環境

docker-composeでRails5.2開発環境 に続き、PHPの開発環境もdocker-composeで構築してみました。本当はPHP5系の検証環境が欲しかったのですが、5.4のイメージを使うとコンテナ間の通信がどうしてもうまくいかずに断念しました。当初の目的には使えませんでしたが、7系では問題なく動いたので備忘のための投稿しています。

必要なのは以下の2つのファイルです。

Dockerfile
FROM php:7.3-apache
RUN docker-php-ext-install pdo_mysql
docker-compose.yml
version: '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 にアクセスすると以下のようなページが表示されます。

Screen Shot 2020-02-21 at 9.15.17.png

ハマりどころ

  • phpのイメージでapt-getは動作しませんでした、代わりにdocker-php-ext-installでモジュールを追加します。
  • volumesで永続化した領域を意識しましょう。例えば、一度でも起動した後から、MYSQL_ROOT_PASSWORDを変更しても効きません。環境構築中であれば、少しでもおかしくなったなと思ったら躊躇なく削除してやり直すのが早いと思います。
  • docker-compose.ymlから何でもやろうとすると、細かいところで詰まります。今回だとデータベースのエンコード設定などです。docker-compose execなんかも組み合わせる必要がどうしてもあるような気がします。

参考URL

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 流し込みのアイデアを拝借しました。

考え方は以下のとおり

  1. Dockerfileの ENTRYPOINTdocker-entrypoint.sh というヘルパースクリプトを呼び出す。
  2. Dockerfileの CMD"/sbin/init" を書き込んでヘルパースクリプトに引数として渡す。
  3. ヘルパースクリプトは判別用のディレクトリの有無を確認し、
    1. ディレクトリが無い場合 -> 作成する
    2. ディレクトリが有る場合 -> なにもしない
  4. ヘルパースクリプトは前段の処理のあと、自身を起動した際の引数の文字列(= /sbin/init)を実行する

これで、コンテナを初回起動した場合のみ、特定の処理を挟み込むことができる。

検証

ホントにできるか検証します。

ファイルの準備

以下のようにファイルを準備します。

sample
|-- Dockerfile
|-- docker-compose.yml
`-- docker-entrypoint.sh
/root/sample/Dockerfile
FROM centos:centos8
COPY docker-entrypoint.sh /tmp
ENTRYPOINT ["/tmp/docker-entrypoint.sh"]
CMD [ "/sbin/init" ]
/root/sample/docker-compose.yml
version: '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 のことを少し知れたので、勉強にはなりましたが。

"ヘルパースクリプト"という言葉自体、あまり使われていないのですね
実は全然イケてない方法だったり?使い方まちがってたりして?と、ちょっとビクビクします
もしくは当たり前すぎんだよ!てな感じでしょうか。。。

Screenshot from Gyazo

参考

http://docs.docker.jp/engine/reference/run.html
https://github.com/docker-library/mysql/tree/master/8.0

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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)

kubectl completion zshを車輪の再発明

docker-slim

ライセンスは、Apache License 2.0
1.26.1 (2019/11/29)

docker-slimによるImageの簡単ダイエット

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」とは?

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む