たった1日で基本が身に付く! Docker/Kubernetes超入門 実践 CHAPTER2
SECTION01
イメージの使い方の全体像
読むだけです。
イメージを検索する
本の検索結果とは異なりますが、問題なく検索できます。
同一名のイメージを区別するタグ
curlコマンドなんですが、実行に失敗します。
スルーしましょう。
イメージをPullして確認する
後で使うので、Pullしておきましょう。
イメージを削除してみる
使わないイメージやコンテナは削除しましょう。
この項目の内容は大事です。
すでに削除済みだったのか、本とは違う結果になりました。
どのDockerレジストリを使うべきか
読むだけです。
SECTION02
イメージ作成から登録までの流れ
読むだけです。
コンテナを起動してパッケージをインストール
flask1.1.1はサポート切れなのか、問題が起きるので、flask2.2.3にしましょう。
ホスト(Windowsなど)からコンテナにファイルを送る
改めて記述しますが、UbuntuからWindowsのフォルダを見るには、/mnt/cから始まるパスにアクセスします。
例えば、以下のようにカレントディレクトリを移動しました。
もちろん、サンプルファイルをこのパスに該当するように配置してくださいね。
$ cd /mnt/c/GitHub/docker-book/chap2/c2img1
本にある通り、ファイルをコンテナに転送します。
前に起動したコンテナからexitしてしまっていたので、stop、rmしてから、再度、コンテナを起動しました。
あとは、本の通りに、pythonを実行します。
おっと、コンテナを削除してしまったので、転送したファイルも消えてますね。
当たり前です。
別のコンソールを開いて、転送をもう1度実行します。
flaskもインストールが必要です。
あとは本の通りに進めましょう。
コンテナを停止してイメージ化する
本の通りに進めます。
イメージの階層構造について
一応、本の通りに進めましょう。
イメージにタグ付けする
本の通りに進めましょう。
ただし、yuichi110という部分は、著者のユーザー名なので、ご自分のDockerHubのユーザー名に変えましょう。
レジストリ(DockerHub)へのPush
本の通りに進めましょう。
DockerHub上のイメージを削除するには
読むだけでよいでしょう。
SECTION03
構築するWebアプリの構成
読むだけです。
環境変数を使ったイメージのパラメーター
読むだけです。
アプリで環境変数を利用する
筆者の環境の場合ですが、server.pyがあるところまで移動します。
$ /mnt/c/GitHub/docker-book/chap2/c2env1_app
あとは本の通りに進めましょう。
ただし、前述の通り、flaskのバージョンは、2.2.3にしましょう。
環境変数を使って設定ファイルを作成する
記述ミスがあります。
/chap2/c2env2_web
となっていますが、
/chap2/c2env1_web
が正しいです。
$ /mnt/c/GitHub/docker-book/chap2/c2env1_web
上記コマンドで移動しましょう。
あとは、本の通りに進めましょう。
環境変数ファイルを利用する
本の通りに進めましょう。
SECTION04
リモートのDockerホストを使う
こちらの項目では、仮想マシンの複製が必要です。
以下の手順で複製できます。
UbuntuではなくPowerShellで実行してください。
① 今のUbuntuをエクスポート
$ wsl --export Ubuntu-22.04 ubuntu-backup.tar
② 複製先としてインポート
Ubuntu-Copyは、任意の名前です。
本に従うなら、Linux-A、Linux-B、Linux-Cになります。
※WSLフォルダは作成しておく必要があります。
$ wsl --import Ubuntu-Copy C:\WSL\Ubuntu-Copy ubuntu-backup.tar --version 2
③ 起動して確認
下記コマンドで起動し、ログインまでします。
$ wsl -d Ubuntu-Copy
whoamiで複製成功を確認しましょう。
あとは本に従って進めましょう。
※ls ~/.ssh/を実行したとき、本ではknown_hostsというファイルがありますが、初回はないはずなので、なくて大丈夫です。
※本ではIPアドレスで識別していますが、wsl2の場合、IPアドレスがいずれも同じで識別できないです。
というわけで、IPアドレスではなく、ポートで識別するやり方で行きましょう。
LinuxA-Cにopenssh-serverをインストールし、手動起動します。
$ sudo apt update
$ sudo apt install openssh-server
$ sudo /usr/sbin/sshd -p 2222
※ポート番号は、環境ごとに変えます。それぞれ、2222, 2223, 2224としました。
Linux-Bに対して、実行したところ、下記のエラーが出ました。
Missing privilege separation directory: /run/sshd
ディレクトリがないためのようです。
Linux-Aが大丈夫だったのは、本にしたがって、すでにSSHキーを作成していたためでしょう。
Linux-BとCに下記を実行します。
$ sudo mkdir -p /run/sshd
$ sudo chmod 755 /run/sshd
もう一度、Linux-Bで下記を実行します。※Linux-Cも同様です。
sudo /usr/sbin/sshd -p 2223
では、SSHキーをLinux-Bにコピーしましょう。
ssh-copy-id -p 2223 root@localhost
初回のみ、接続を続行するか聞かれるので、yesにします。
パスワードを聞かれるので、入力します。
なぜか、Permission denied, please try again.になりました。
パスワードによるログインを許可してないからだそうです。
以下の編集が必要です。
$ sudo vi /etc/ssh/sshd_config
以下の項目を探して、編集します。
#PermitRootLogin prohibit-password
PermitRootLogin yes
#PasswordAuthentication no
PasswordAuthentication yes
sshdを再起動します。
ポート番号は、マシンごとに変えてください。
$ sudo pkill sshd
$ sudo /usr/sbin/sshd -p 2223
さらに、そもそも、パスワードが設定されていない可能性があります。
以下のコマンドを使って、各マシンにパスワードを設定します。
$ sudo passwd root
最後にもう一度キーをコピーします。
$ ssh-copy-id -p 2223 root@localhost
そしたら、すでにコピーされてるよって言われて、ハテナになりましたが、たぶん、パスワード認証だけ失敗していたのでしょう。
あとは、試すだけです。
$ ssh -p 2223 root@localhost
これでログインできるはずです。
さらに、以下を編集します。
$ sudo vi ~/.ssh/config
Host LinuxB
HostName localhost
Port 2223
User root
以下でログインできるようになります。
$ ssh LinuxB
長々とやってしまいましたが、この項目の作業って、Ansibleが楽だよ、ってことを思い知るのが目的の作業だったんですよね…。
Dockerはあまり関係ないです。
ただ、以下のようにDockerをリモートで動かせるようになるそうです。
$ docker -H ssh://LinuxB version
でも、エラーになりました。
そりゃ、Dockerをインストールした覚えはないですからね。
これは、Docker DesktopをUbuntuに統合することで、解決できます。
Chapter1のSECTION02のUbuntuと統合の当たりを参照してください。
以下の作業です。
- Docker Desktopを開く
- 設定(⚙マーク)→ Resources > WSL Integration
- Ubuntu 22.04 をONにする ✅
- 適用すればOK!
Ubuntu 22.04と同様に、Linux-A~Cが並んでいるので、ONにしましょう。
これで以下のコマンドが動きます。
$ docker -H ssh://LinuxB version
AnsibleでDockerホストを作成しよう
この項目を進めるには、前項目のように、ホストを3つ用意します。
前の項目ですでにエクスポートしていたtarファイルを使って、Host-A~Cにインポートします。
これは、PowerShellで実行します。
$ wsl --import Host-A C:\WSL\Host-A ubuntu-backup.tar --version 2
$ wsl --import Host-B C:\WSL\Host-B ubuntu-backup.tar --version 2
$ wsl --import Host-C C:\WSL\Host-C ubuntu-backup.tar --version 2
各ホストにSSHをインストールし、起動します。
ポートは、2225, 2226, 2227にします。
$ sudo mkdir -p /run/sshd
$ sudo chmod 755 /run/sshd
$ sudo apt update
$ sudo apt install openssh-server
$ sudo /usr/sbin/sshd -p 2225
※Missing privilege separation directory: /run/sshdが出るときは、ディレクトリを作り直してください。
各ホストでパスワード認証を有効化します。
$ sudo vi /etc/ssh/sshd_config
以下の項目を探して、編集します。
ポート番号は、各ホストごとに変えてください。
#Port 22
Port 2225
#PermitRootLogin prohibit-password
PermitRootLogin yes
#PasswordAuthentication no
PasswordAuthentication yes
sshdを再起動します。
ポート番号は、マシンごとに変えてください。
$ sudo pkill sshd
$ sudo /usr/sbin/sshd -p 2225
パスワードを設定します。
$ sudo passwd root
Host-Aに以下を設定します。
$ sudo mkdir ~/.ssh
$ sudo vi ~/.ssh/config
Host Host-A
HostName localhost
Port 2225
User root
Host Host-B
HostName localhost
Port 2226
User root
Host Host-C
HostName localhost
Port 2227
User root
本にしたがって、Host-AにAnsibleをインストールします。
ただし、本はCentOSであり、こちらはUbuntuなので読み替える必要があります。
epel-releaseは飛ばします。
$ sudo apt install ansible unzip
各種ファイルがあるディレクトリに移動します。
$ cd /mnt/c/GitHub/docker-book/chap2/ansible/dockerhost
本にしたがって、定義ファイルの作成を行います。
本にしたがって、定義ファイルを適用します。
が、そのままでは動きません。CentOS用だからです。
下記のようになります。
- hosts: all
remote_user: root
tasks:
- name: Disable ufw
ufw:
state: disabled
- name: Change sshd config
replace:
dest: '/etc/ssh/sshd_config'
regexp: '#MaxSessions 10'
replace: 'MaxSessions 100'
register: sshd_config
- name: Restart ssh when config changed
systemd:
name: ssh
state: restarted
daemon_reload: yes
enabled: yes
when: sshd_config.changed
- name: Copy ssh public key
copy:
src: ./id_rsa.pub
dest: /root/.ssh/id_rsa.pub
mode: 0644
- name: Copy ssh private key
copy:
src: ./id_rsa
dest: /root/.ssh/id_rsa
mode: 0600
- name: Add authorized key
authorized_key:
user: root
state: present
key: "{{ lookup('file', './id_rsa.pub') }}"
- name: Install prerequisites
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
state: latest
update_cache: yes
- name: Add Docker GPG key
apt_key:
url: https://download.docker.com/linux/ubuntu/gpg
state: present
- name: Add Docker APT repo
apt_repository:
repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
state: present
filename: docker
- name: Install Docker
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
state: latest
update_cache: yes
- name: Download Docker Compose
get_url:
url: https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
dest: /usr/local/bin/docker-compose
mode: 0511
- name: Start/Enable docker
systemd:
name: docker
state: started
enabled: yes
コマンドは以下に代わります。
$ sudo ssh-copy-id Host-A
$ sudo ansible-playbook -i Host-A, ./pb_centos7.yml
本にしたがって、Dockerホストの確認をします。
本にしたがって、ほかのホストへ実施します。
コマンドは以下に代わります。
$ ssh-copy-id Host-B
$ ssh-copy-id Host-C
$ sudo ansible-playbook -i Host-B,Host-C ./pb_centos7.yml
CHAPTER2は以上になります。
続きはこちら
↓
ピンバック: たった1日で基本が身に付く! Docker/Kubernetes超入門 実践 CHAPTER1 – ふうがITビジネス