Closed37

Docker 入門

ほげさんほげさん
yum install -y java wget
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.41/bin/apache-tomcat-9.0.41.tar.gz
tar zxf apache-tomcat-9.0.41.tar.gz
ほげさんほげさん

centos のイメージに php をインストールする手作業

$ docker pull centos:centos7
$ docker run -it -d --name centos7 -v "$(pwd)"/src:/src centos:centos7
$ docker exec -it centos7 /bin/bash

# yum install -y epel-release
# yum install -y --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd
ほげさんほげさん

イメージの情報はinspect

$ docker inspect centos7 | jq '.[].Config.Labels'
{
  "org.label-schema.build-date": "20201113",
  "org.label-schema.license": "GPLv2",
  "org.label-schema.name": "CentOS Base Image",
  "org.label-schema.schema-version": "1.0",
  "org.label-schema.vendor": "CentOS",
  "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
  "org.opencontainers.image.licenses": "GPL-2.0-only",
  "org.opencontainers.image.title": "CentOS Base Image",
  "org.opencontainers.image.vendor": "CentOS"
}
ほげさんほげさん
yum install -y wget
wget https://phar.phpunit.de/phpunit-7.5.9.phar
chmod +x phpunit-7.5.9.phar
mv phpunit-7.5.9.phar /usr/local/bin/phpunit

# phpunit --version
PHPUnit 7.5.9 by Sebastian Bergmann and contributors.
ほげさんほげさん

手作業での構築はできたんだけど、以下がわからん

  • Dockerfile による volume は named mount だけ?
    • src を共有するための bind mount は? コマンドライン引数指定か docker-compose ?
  • CMD で何をするの? ずっと立っていてほしい
    • エディタの PHP / PHPUnit の実態パスとして指定するには
    • php -aをするには
ほげさんほげさん

RUN はイメージの作り方を
ENTRYPOINT はイメージの起動時の挙動を
指定している

ほげさんほげさん
FROM centos:centos7

LABEL desc="php sandbox"

RUN yum install -y epel-release
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum update -y
RUN yum install -y --enablerepo=epel,remi,remi-php73 php php-{mbstring}

ENTRYPOINT php -a
$ docker build -t php .
$ docker run --rm -it php
ほげさんほげさん

PHP Docker を入れないとだめ

特にそういう記述はなかったけど、PHP Storm だと標準で入っている?

ほげさんほげさん

CMD命令の主目的は、コンテナの実行時のデフォルト処理を設定することです。

http://docs.docker.jp/engine/reference/builder.html#cmd

あくまでデフォルト処理

RUNCMDを混同しないようにしてください。RUNは実際にコマンドが実行されて、結果を確定させます。 一方CMDはイメージビルド時には何も実行しません。

ほげさんほげさん

Alpine ってよくみるやつは Linux の軽量ディストリビューションらしい

centos から alpine に変えて yum を apk に変えておこうと思う

ほげさんほげさん

composer で install できる超軽いものないかな

try and error を phpunit でやるのは重い...

ほげさんほげさん

vendor はどうやってホスト側と共有する領域に持ってくるんだ?

もしかして build ではなくて Dockerfile では composer の用意までで、composer install はコンテナ立ててからやるのか?

ほげさんほげさん

php cli のコンテナと composer のコンテナを分けてみたけど、composer 自体の install に php が必要

composer をコンテナをビルドする時に php cli のコンテナの php を指定する...??

COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer

参考にしてるやつは composer 自体の調達に php を使ってない感じなのかな

ほげさんほげさん

とりあえずコンテナの中身自体はワンパス通ればあとで変えられるので、php のインストール自体をして composer を入れる

ほげさんほげさん

IntelliJ から php-sandbox:cli と php-sandbox:composer それぞれを指定して、IntelliJ から composer install を実行

ホストから見える場所に vendor ができてるので、しばし待ち

ほげさんほげさん

あー、やっぱ Makefile で composer install をコンテナに向けて命じてるから、composer install 自体はホスト側でやってるのか

その場合 autoload.php か bin/phpunit がホストから見える vendor にできるはず


ここまで類似コマンドでできているのに、IntelliJ から phpunit が認識できない

あと何が違うんだ

ほげさんほげさん

vagrant みたいに立てっぱなしにしておいて fabric みたいにコマンドを ssh 先に送りつけるイメージではない

このスクラップは2021/04/15にクローズされました