質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

524閲覧

linuxのディストリビューションが違う場合にはコンパイルが必要?

sakusui

総合スコア1

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2022/04/21 14:39

編集2022/04/22 00:55

linuxの知識はあまりありません。基本的な操作ができる程度ですので、
お手柔らかにお願いいたします。

疑問

ディストリビューションが違う場合はコンパイルし直す必要がある?

開発環境

OSはMac
Docker for Macを使用
開発言語はPHP(Laravel)

Dockerを使ってLaravelプロジェクト開発するとして、

開発環境のコンテナ内のディストリビューション: Debian
本番環境のディストリビューション: CentOS7

のような場合は、コンパイルし直す必要が出てくるもなのでしょうか?

(先輩エンジニアがそのように教えてくれましたが。。。)

調べたこと

ディストリビューションによってはカーネルも独自のものを使っていたりするものもあるようですが、あまりそういう記事を探してもヒットしませんでした。

また、ABIというものがあり、それによってディストリビューションが違っていても動作するというような認識でいます。(ABIについてはちゃんと理解はできていないかと思いますが。。。)

不足の情報などがあればご指摘いただけると幸いです。
ちょっと曖昧な質問内容になり申し訳ありませんが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/04/21 20:20

ものによりますが、ディストリビューションが違うならコンパイルし直した方が無難かと…。 ところで、docker の中で動かす OS を開発環境と本番環境で変える必要があるんですか?
sakusui

2022/04/21 23:41

hoshi-takanoriさん、コメントありがとうございます! > ところで、docker の中で動かす OS を開発環境と本番環境で変える必要があるんですか? Laravelのプロジェクトで、php7.4を使用します。 そのあたりが逆に本番環境と合わせないといけないの?という認識でいました。。。 DockerのappコンテナのイメージをFROM php:7.4-fpmを使用すると、OSはDebianになるようなのですが、そのイメージを本番環境のCentOS7であるようなものを選定した方がよい ということになるのでしょうか? パッケージ管理のコマンドが違うくらいなのかなと考えていたのですが。。。 >ディストリビューションが違うならコンパイルし直した方が無難かと…。 DockerコンテナのOSがDebian 本番環境がCentOS7 の場合、デプロイ時にコンパイルという作業が入る、ということでしょうか? デプロイについての知識もあまりなく、イメージできていなくて申し訳ありません! よろしくお願いいたします。
quickquip

2022/04/22 00:34 編集

「自分が作っているもの」がコンパイルが必要なものでその質問をしているのですか? 「自分が作っているものを動かす環境」がコンパイルが必要なものでその質問をしているのですか? 何の話をしているんだろう? と思ってました。 「コンパイルし直す必要」を聞いていますが「何を?」が一切書かれていません。
sakusui

2022/04/22 00:35

すいません!そのあたりが曖昧です。。。 「自分が作っているものを動かす環境」の方になるのかなと思います。 Laravelのプロジェクトを作る(これから)なのですが、コンテナのイメージのOSがDebianで、そこで開発したものを本番環境(CentOS7)にデプロイする場合、Laravelプロジェクトを動かすのにコンパイルという作業が必要になってくるのかな??というくらいの認識です。。。 学習用にWindows上で開発したLaravelのプロジェクトをHerokuにデプロイしたときはOSについて意識をしておりませんでしたので、 Dockerを使ってLinux上で開発する場合はOSの違いなどを意識する必要があるのかどうか、 ディストリビューションが違う場合はコンパイルという作業が必要になるのかどうか、 という点が疑問になっています。 理解が浅く、曖昧な表現になってしまっているかと思いますが、よろしくお願いいたします。
sakusui

2022/04/22 00:46

jbpb0さん 参考リンクありがとうございます! CPUの違い、バイナリ互換とかを理解していきたいと思います。 ちょっと知らない用語が多いですが、一つずつ潰していきたいと思います!
quickquip

2022/04/22 00:58 編集

A「ハンコは要りますか?」 B「何の書類を出そうとしていますか?」 A「それはわかりません」 みたいな質問に見えます……(やりたいことから逆算して一般論ではこうでしょうけど、程度の回答しか期待できませんよね)
sakusui

2022/04/22 01:00

quickquipさん そうですね。。。その例でいくと A「どの書類にはハンコが要りますか?」 という質問になってしまうかもしれません。。。
hoshi-takanori

2022/04/22 01:23

> Laravelプロジェクトを動かすのにコンパイルという作業が必要になってくるのかな?? そもそもコンパイルとは何かが分かってなくて、コンパイルが必要なプログラムと、コンパイルの必要がないプログラムの区別がついてない、ってことのようですね。 Laravel で Web アプリを作りたいようですが。その際にコンパイルが必要になるとしたら PHP や Web サーバー (Apache または nginx) などでしょうか。(MySQL や PostgreSQL につなぐドライバとかも?) それらは通常、ディストリビューション用にビルドされたものを使います。(異なるディストリビューションだと、動くことは動くかもしれないけど、細かい環境の違いで問題が起こる可能性が高いので。) Laravel や、それを使って作る Web アプリは、基本的には PHP で書かれてると思いますので、そもそもコンパイルの必要がありません。(画像や動画の変換など、コンパイルの必要な外部ツールを呼び出す場合は、そのツールのコンパイルは必要かもしれませんが…。) そして何より、 > コンテナのイメージのOSがDebianで、そこで開発したものを本番環境(CentOS7)にデプロイする場合、 これがあり得ないです。docker を使う目的は開発環境と本番環境の環境を揃えるためなので、Debian と CentOS のような大きく異なるディストリビューションを使い分けるのはマイナスしかありません。また、PHP のバージョンだけ合わせればいいなら、そもそも docker なんか使わずにお使いのパソコン (Windows でも Mac でも) に直接 PHP を入れれば良いでしょう。
sakusui

2022/04/22 01:59

>そもそもコンパイルとは何かが分かってなくて、コンパイルが必要なプログラムと、コンパイルの必要がないプログラムの区別がついてない、ってことのようですね Javaでいうと、○○.java → ○○.classがコンパイルというくらいの認識で、ちゃんと理解できていないですね。。。 >> コンテナのイメージのOSがDebianで、そこで開発したものを本番環境(CentOS7)にデプロイする場合、 >これがあり得ないです。 そもそもの部分で勘違いしていました。。。 イメージをpullするときにOSまでちゃんと見ないとダメですね。 ネット上のサンプルなどで、MySQLやNginxのイメージのOSがそろっていなかったりするので、考慮しなくても良いのかなと思ってしまっていました。。。 めちゃくちゃご丁寧なご説明ありがとうございます! こちらのつまづいている部分についても汲み取っていただきありがとうございます!
guest

回答1

0

ベストアンサー

パッケージ管理のコマンドが違うくらいなのかなと考えていたのですが。。。

大きなところで言うと、ディストリビューションによって /bin/sh が bash だったり ash だったりしますので、Docker イメージ内の OS は合わせておくのが無難というか、違うものにしておくメリットがないと思います。

そもそもですが、開発環境で作った Docker イメージを、ステージング・本番に持っていくのがよいです。開発・ステージング・本番で挙動が異なる部分は環境変数などで制御します。

開発環境で開発し、イメージ作成し、テストし、これで OK となった環境そのままを本番で動かすので大丈夫、という話ですね。各環境でビルドすると apt-get や npm など、書き方によっては実行するたびにパッケージ等の状況で挙動が変わる可能性があります。

投稿2022/04/22 01:02

68user

総合スコア2005

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakusui

2022/04/22 05:06

ご回答ありがとうございます! OSを一致させるところの意識がなかったので、そもそも間違っていたということでご指摘ありがとうございます。 本番環境にはDockerがインストールできないようで、開発時だけDockerを使うような感じになります。。。 >開発・ステージング・本番で挙動が異なる部分は環境変数などで制御します。 このあたりも環境変数として切り出す部分とかも検討していかないといけないですね。 なかなか一気に習得するのが難しいところですが、なんとなくDockerの開発のイメージがすこし明確になった気がしました! とりあえずイメージ内のOSは合わせる必要があるというところで、対応したいと思います。 (有料化の話もあって、そもそもDockerで良いのかという話も出てきそうですが。。。)
68user

2022/04/22 07:45

「合わせる必要がある」と言われるとちょっと違和感がありますが、「理由がないなら合わせておく方が無難」という程度でしょうか。 本番が非コンテナであるならどうやっても合わせようがないわけですが、OS・Apache・Nginx・MySQL 等ミドルウェアのバージョンくらいはあわせておいた方がよいと思います。また開発者が複数いるのであれば、少なくとも開発者間では共通 Dockerfile 使いましょうというのもアリかと思います。 一方で「本番は CentOS だが、とりあえず慣れている Debian を使って環境構築の手間を省こう」などの理由があるならもちろん如何様にでもですし、「本番はクラウドで Fargate・RDS だけど開発環境はお金を節約するために Docker 内の Apache + MySQL で」というのもよくあるケースと思います。
sakusui

2022/04/26 01:50

>本番が非コンテナであるならどうやっても合わせようがないわけですが、 そのあたりの条件が抜けていました。。。あまりDockerの運用方法について理解しておらず、申し訳ありません。 本番環境はXserver(レンタルサーバ) OSはCentOS7 Dockerはインストール不可 という条件になりますので、「開発時だけDockerを使用する」という条件です。 なのでPHPのソースだけサーバにアップロードする、という感じになるんでしょうか、その場合OSとして合わせておくのはPHPのコンテナだけで、MySQLとNginxは別のコンテナでOSはDebian(もしくはalpine)とかでも、ディストリビューションの違いによるコンパイルが必要かどうかっていう問題がなければ、、開発環境の構築は非常に楽なのですが。。。どうなんでしょう? 完全にCentOSだけで完結しようとすると、VirtualBoxの方がよさそうな気もしますが、そのあたりの知見もあまりなく、MySQLやNginxのイメージOSがディストリビューションの違いがあっても問題がなさそうならその方向で構築し、問題ない旨をちゃんと説明できればいいと考えているのですが。。。 以下余談 現在PHPのコンテナ一つの中にNginxをインストールして動かそうとしていますが、ブラウザからアクセスできない(ポートフォワードの設定が必要?)という状況です。 ググってみても ・Nginxのコンテナを用意するパターン ・Dockerを用いず、CentOSにNginxをインストールするパターン は見つかるのですが、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問