概要
dockerにcentosを入れてその上でApache,php,pythonを動かすときに色々と困ったので自分メモとしてQiitaに残しておきます。
初投稿なので色々と日本語がおかしかったりうまく書けていなかったりするところがあると思いますがご了承ください。
はまったこと一覧
- dockerのコマンドがいまいち分かっていない
- パッケージを入れようとしたらyumが使えない
- yum問題解決後httpdを立ち上げようとしたらsystemctlコマンドが使えない
dockerのコマンドがわからない
これは私の勉強不足です。
今後も使っていくと思うのでメモがわりに残しておきます。
docker pull centos
まずはマシンイメージをダウンロードしてきます。
docker run -it -p 9999:80 --name xxxxx centos /bin/bash
コンテナの作成、起動をします。
今回はApacheを使いたかったためホストOSの9999番ポートに来たものを80番ポートにポートフォワードします。
yumが使えない
コンテナにcentosを入れていざApacheを使おうと思ったらyumコマンド時にエラー発生
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
直訳するとミラーリストにURLがないよと言われました。
このエラーで検索してみるとさまざまな解決法が出てきました。
ですがどれを試してもエラーは変わらず、ミラーリストにURLを登録するだけだと思っていましたがうまくいきませんでした。
もっと色々試してエラーを治してみたかったのですが今回はやりたいことがあったので別の方法を試しました。
centosのバージョンを指定してインストール
結局解決しなかったので
docker pull centos:centos7
これでcentosのバージョン指定をしてコンテナの作成をしたところcentos7ではyumが使えました。
こちらの方が楽ですね
systemctlコマンドが使えない
yumが使えるようになりhttpdを入れていざWEBサーバ化と思ったらsystemctlがつかえないという事案が発生しました。
どうやらsystemdはcentos7のデフォルトでは有効化されていないということらしいです。
有効化するには管理者権限がいるためコンテナ起動時に --privileged というオプションが必要です。
さらにそれだけではエラーは治りません
Failed to get D-Bus connection: Operation not permitted
そこで最初に /sbin/init を実行してあげることでsystemctlが使えるようになります。
完成形
docker run -it --privileged -p 9999:80 --name **** centos:centos7 /sbin/init
これでApacheも入り、systemctlで立ち上げることができました。
とりあえずはこれで準備は終わりました。
まとめ
ただphpとpythonをすこし動かしたいだけだったので簡単なことだと思ったのですが意外苦労したのでここにまとめておきます。
拙い文章で申し訳ないのですが、意外と皆さんつまるところではないのかなと思います。
こんな投稿で救われる人がいるなら共有しておこうと思い記事にしました。
間違っている部分や日本語がおかしいところ、この書き方が読みにくいなどがあればコメントしていただけると助かります。
参考記事