- 投稿日:2019-10-11T20:59:08+09:00
DockerのLinux OSイメージにあるコマンド一覧を出す
動機
Dockerを使ってみようと思っていろいろ調べていると、イメージを作成するには、ベースとなるOSのイメージに対して、いろいろとファイルを追加していく所作を
Dockerfile
に記述するそうなのですが、そこで「べースとなるOSにあらかじめ導入されているコマンドは何か?」という素朴な疑問が湧きます。原始的な方法でいいではないか
調べたいイメージを走らせて
find
でリストする、という原始的な方法を使ってみた。下記は公式のCentos8のパスにあるコマンド一覧を表示させた例。centos8の実行例% docker run -it --rm centos:8 /bin/bash -c 'find ${PATH//:/ } -type f -perm /0100 | sort' /usr/bin/[ /usr/bin/addr2line /usr/bin/alias /usr/bin/ar ...(途中略)... /usr/sbin/weak-modules /usr/sbin/wipefs /usr/sbin/zdump /usr/sbin/zic /usr/sbin/zramctlバリエーション
上記実行例では、GNUの
find
が入っていることを仮定している。BSD系のfind
が入っているOSイメージの場合には、find
のオプションを-perm /0100
から-perm -0100
に変える必要があるのではないかと思う。また、そもそもOSイメージにfindが入っていなかったら使えない方法ではある。応用
同様の方法で、もともとインストールされているパッケージの一覧も表示させてみた。下記の例はRedHat系Linux想定して、host OSでソート。
応用例% docker run -it --rm centos:8 rpm -qa | sort acl-2.2.53-1.el8.x86_64 audit-libs-3.0-0.10.20180831git0047a6c.el8.x86_64 basesystem-11-5.el8.noarch bash-4.4.19-7.el8.x86_64 bind-export-libs-9.11.4-16.P2.el8.x86_64 ...(途中略)... vim-minimal-8.0.1763-10.el8.x86_64 xz-5.2.4-3.el8.x86_64 xz-libs-5.2.4-3.el8.x86_64 yum-4.0.9.2-5.el8.noarch zlib-1.2.11-10.el8.x86_64
- 投稿日:2019-10-11T19:26:30+09:00
【Docker環境構築】PHP5.3.3 + Apache + MySQL + phpMyAdminにFuelPHPをインストール
概要
既存の社内システム改修をする必要があり、PHP5.3.3、FuelPHP
1.7.21.7.3、Apache、MySQLという構成で、Dockerで環境構築を行いました。調べたところPHP5.3.3は2010年頃にリリースされたらしくかなりレガシーなバージョンになるようで、記事があまり見つからない中のDocker環境構築は大変でした(最終的には色々な記事を参考になんとか構築できました・・・)。
自分が1から再構築できるようにDockerfile、docker-compose.ymlの解説や手順等を改めてまとめておこうと思います。
先に下記の先人のおかげでこの構成ができたことを感謝申し上げます!
自分の記事は先人の記事をほぼ組み合わせた感じになります。PHP5.3.3環境を2017年に用意する方法 - Qiita
docker-compose で PHP7.2 + Apache + MySQL + phpMyAdmin 環境を構築 - Qiita
Docker 仮想CentOS6を動かす - @//メモディレクトリ構成と手順
すぐ動かしたい方は、本記事と同じ構成のものをGithubに上げているのでそちらをご覧ください。本記事では、この構成を作成するまでの流れをやっていきます
追記情報は最後の方で確認してください
├─docker │ ├─httpd │ │ └─httpd.conf │ └─php │ ├─Dockerfile │ └─php.ini └─docker-compose.ymldocker-compose.yml
docker-compose.ymlversion: '3' services: php: build: context: ./docker/php/ dockerfile: Dockerfile volumes: - .:/app - ./docker/php/php.ini:/etc/php.ini - ./docker/httpd/httpd.conf:/etc/httpd/conf/httpd.conf ports: - 8080:80 mysql: image: mysql:5.7 volumes: - ./docker/mysql/volumes:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=test - MYSQL_USER=test - MYSQL_PASSWORD=test phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=root links: - mysql ports: - 4040:80 volumes: - ./docker/phpmyadmin/sessions:/sessionsdocker/httpd/httpd.conf
httpd.conf~~長いので省略~~ 初期設定からの変更点① #ServerName www.example.com:80 ↓ ServerName www.example.com:80 初期設定からの変更点② DocumentRoot "/var/www/html" ↓ DocumentRoot "/app"docker/php/Dockerfile
DockerfileFROM centos:6.9 ENV PHP_VERSION 5.3.3 RUN yum install -y \ php \ php-mbstring \ php-pgsql \ php-mysql \ php-gd \ zip \ unzip \ git \ httpd && \ yum clean all RUN mkdir /app WORKDIR /app EXPOSE 80 CMD ["/usr/sbin/apachectl","-DFOREGROUND"]docker/php/php.ini
php.ini[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"PHP5.3.3が動く環境を用意する
PHP5.3.3をまずインストールしなけなればいけません。
自分はすんなり@suinさんの記事をすぐに見つけられたので幸運です。
PHP5.3.3環境を2017年に用意する方法 - Qiitaうまくいった方法はCentOS 6.9でyum install phpすること。なんとRedHatは未だにPHP5.3をサポートしている。
一応、まだ過去バージョンで5.3.3もインストールできるみたいでした(僕は試していませんが…)。
PHP: Releases
windows.php.net - /downloads/releases/archives/
参考:旧バージョンのPHPをダウンロードする方法 | jMatsuzakiCentOS 6.9のDockerイメージダウンロード
CentOS 6.9でphp5.3がインストールできるみたいなので、CentOS 6.9のイメージからコンテナを起動してコンテナ内でphpのインストールを試して、上手く行ったらDockerfileに記載していくという方法でやってみます。
CentOS 6.9をインストールするDockerfileを用意
DockerfileFROM centos:6.9CentOS 6.9のDockerイメージをビルド
用意したら、Dockerfileがあるディレクトリに移動後、イメージをビルドします。
$ docker build .ビルドされるとエラーが表示されました。
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.セキュリティ警告:WindowsからWindows以外のDockerホストに対してDockerイメージを構築しています。すべて ビルドコンテキストに追加されたファイルとディレクトリには、「-rwxr-xr-x」権限が付与されます。お勧めです 機密性の高いファイルとディレクトリのアクセス許可を再確認してリセットします。windowsからwindows以外のイメージを作成したため、パーミッションの警告のようです。とりあえず今回は無視します。
イメージの確認
確認できました。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 6.9 2199b8eb8390 7 months ago 195MBコンテナ起動
イメージ名を指定して、コンテナを起動しログインします。
$ docker run -it centos:6.9 /bin/bashコンテナでphpインストールまで
ログインしたら、環境変数を設定します。
$ export PHP_VERSION=5.3.3 $ echo $PHP_VERSION => 5.3.3phpをインストールします。
$ yum install -y phpphpのバージョン確認。php5.3.3がインストールされました!
$ php -v PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologiesあとは必要なモジュールを同じように確認しながらインストールしていきます(モジュールは環境に応じて適宜インストール。zip、unzip、git、httpdはFuelPHPを使う際に必須でした。ないとエラーが出ます。)。
$ yum install -y php-mbstring $ yum install -y php-pgsql $ yum install -y php-mysql $ yum install -y php-gd $ yum install -y zip $ yum install -y unzip $ yum install -y git $ yum install -y httpdApacheが起動するか確認
コンテナにログインした状態で作業を続けます。
$ /usr/sbin/apachectl -DFOREGROUNDServerNameのエラーが出ると思いますがここでは無視します。
Enterを押して、うごけばとりあえずOKです。確認したら、Ctrl + Cで起動を停止します。
コンテナでの作業は終わりですので、Ctrl + Dで抜けておきましょう。
動作確認したコマンドをDockerfileに反映
先程、コンテナで実際に入力したコマンドをDockerfileを反映すると下記のようになります。
完成したDockerfileFROM centos:6.9 ENV PHP_VERSION 5.3.3 RUN yum install -y \ php \ php-mbstring \ php-pgsql \ php-mysql \ php-gd \ zip \ unzip \ git \ httpd && \ yum clean all RUN mkdir /app WORKDIR /app EXPOSE 80 CMD ["/usr/sbin/apachectl","-DFOREGROUND"]先程のコンテナ時点でなかったものがあると思います。
そちらの説明です。
yum clean all
はDockerイメージの容量を減らすためのよくあるTIPSらしいです。
RUN mkdir /app
WORKDIR /app
はappフォルダを作成して、作業フォルダをappに指定しています。のちほど、appフォルダにfuelphpのファイルを展開するときに必要になります。
EXPOSE 80
は、コンテナのポート80番を使うよみたいな感じです。実際にポートが公開されるわけではなさそうです。わかりやすいように明示しておきます。再度、ビルドを行いApacheが起動することを確認する
ここは一気にやってしまいましょう。
# ビルド時にイメージ名をつける $ docker build -t cnetos_php:6.9 . # -p: ホストのポート8080 を コンテナのポート 80 にバインド(割り当て)します。 # -d: バックグラウンドで起動 $ docker run -p 8080:80 -d cnetos_php:6.9 # コンテナが起動していることを確認 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a9337cd1cef7 cnetos_php:6.9 "/usr/sbin/apachectl…" 7 seconds ago Up 5 seconds 0.0.0.0:8080->80/tcp inspiring_ridehttp://localhost:8080/ にアクセス。
起動が確認できたら、コンテナを停止しておきます。
docker stop コンテナ名またはコンテナIDphp用のdocker-compose.ymlを用意
最終的にはdocker-compose up -dで一発起動するようにするので、docker-compose.ymlを作っていきます。
ディレクトリ構成
まず、以下のようなディレクトリ構成にします。
作成したDockerfileはdocker/php配下に配置してください。
ないフォルダは作成してください。
その他のファイルは次で説明します。├─docker │ ├─httpd │ │ └─httpd.conf │ └─php │ ├─Dockerfile │ └─php.ini └─docker-compose.ymldocker-compose.yml
docker-compose.ymlは以下の通りです。
docker-compose.ymlversion: '3' services: php: build: context: ./docker/php/ dockerfile: Dockerfile volumes: - .:/app - ./docker/php/php.ini:/etc/php.ini - ./docker/httpd/httpd.conf:/etc/httpd/conf/httpd.conf ports: - 8080:80サービス名は
php
にしています。buildでは、
./docker/php/
のDockerfile
を指定。volumesでは、dockerフォルダのphp.iniとhttpd.confの設定をコンテナに反映し、コンテナのappフォルダをマウントしホストから今後ファイル編集できるようにしています。
portsでは、ホストのポート8080番とコンテナのポート80番をつなげています。
これでホストの http://localhost:8080/ にアクセスすると、コンテナの80番に転送され、
/app
の内容が表示されます(documentrootはhttpd.confで設定しています)。php.ini
php.iniは以下の通りです。
php.ini[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"httpd.conf
httpd.confは、コンテナ内部からhttpd.confファイルをコピーしてきます。
# コピーするには「docker cp」コマンドを使用します。 # 引数は「コンテナID:コンテナパス ローカルパス」と指定します。 $ docker cp コンテナID:/etc/httpd/conf/httpd.conf docker/httpd/コピーできたら、下記の部分を変更します。
httpd.confの変更点は以下の通りです。httpd.conf~~長いので省略~~ 初期設定からの変更点① #ServerName www.example.com:80 ↓ ServerName www.example.com:80 初期設定からの変更点② DocumentRoot "/var/www/html" ↓ DocumentRoot "/app"php用のdocker-compose.ymlを起動
先程のdocker-compose.ymlをもとに、ビルドして起動します。
docker-compose build docker-compose up -dhttp://localhost:8080/ にアクセスすると、Apacheの画面が表示されると思います。
ホストのfuel-app/の中にindex.phpを作って、再度アクセスしてみましょう。
index.php<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>php5.3.3-apache</title> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <?php phpinfo(); ?> </body> </html>以下の画面が表示されたら、成功です!
コンテナは止めておきましょう。
docker-compose stopここまでで、PHP5.3.3とApacheの環境ができました。
残るMySQLとphpMyAdminが動く環境を用意する。
残りのMySQLとphpMyAdminはどちらとも公式イメージを使うので、docker-compose.ymlで完結します。
MySQLのdocker-compose.yml
以下の内容を追加するだけです。
docker-compose.ymlmysql: image: mysql:5.7 volumes: - ./docker/mysql/volumes:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=test - MYSQL_USER=test - MYSQL_PASSWORD=testimageは、公式のイメージを使用しています。
volumesは、コンテナの
/var/lib/mysql
にMySQLな大事な設定ファイルが入るのでそれをホスト側で見れるにしています。また、コンテナを停止してもvolumesは削除しない限り消えないので、データが永続化されます。environmentでは、環境変数を設定しています。意味は、docker hubを見るとわかりやすいです。
これで、docker-compose up -dすると、mysqlコンテナが出来上がります。
コンテナログイン後、mysql -uroot -proot
でmysqlにログインできます。phpmyadminのdocker-compose.yml
以下の内容を追記するだけです。
docker-compose.ymlphpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=root links: - mysql ports: - 4040:80 volumes: - ./phpmyadmin/sessions:/sessionsimageは、公式のイメージを使っています。
environmentでは、環境変数を設定しています。これもdocker hubを見るとわかりやすいです。
phpmyadmin/phpmyadmin - Docker Hub
これで、docker-compose up -dして、http://localhost:4040/ にアクセスするとphpMyAdminが開きます!
最終的なdocker-compose.yml
最終的には下記のようになります。
docker-compose up -dして正常に動くか確認してみてください。
docker-compose.ymlversion: '3' services: php: build: context: ./docker/php/ dockerfile: Dockerfile volumes: - .:/app - ./docker/php/php.ini:/etc/php.ini - ./docker/httpd/httpd.conf:/etc/httpd/conf/httpd.conf ports: - 8080:80 mysql: image: mysql:5.7 volumes: - ./docker/mysql/volumes:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=test - MYSQL_USER=test - MYSQL_PASSWORD=test phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=root links: - mysql ports: - 4040:80 volumes: - ./docker/phpmyadmin/sessions:/sessionsFuelPHPをインストールしてFuelPHPの画面を表示するまでの流れ
GitHubのREADME.mdに詳しく書いてあるのでそちらを参照してください。
さいごに
ここまでくるのに約2日かかりました。。
fuelphp自体が初めてで、何が必要か理解するまでに時間がかかりました。fuelphpのインストールをシェルスクリプトで完結させたり、httpd.confをわざわざ2回修正したり(documentrootは存在しているディレクトリである必要がある)しているので、もうすこしいい感じにできたらしたいなーと思います。
あと、正直なところがっつりfuelphpで動かしてみていないのでMySQLの連携はこれで大丈夫か心配だったりします。
とりあえずfuelphpのチュートリアルをいくつかやってみて不具合があれば修正していきます。
追記:2019年10月13日
phpコンテナで
php oil refine migrate
でマイグレーションを実行するとエラーになる。
原因は、phpコンテナとmysqlコンテナはつながっていないため、
phpコンテナから/var/lib/mysql/mysql.sock
を見に行ってもないと怒られていた。Uncaught exception Fuel\Core\Database_Exception: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) Callstack: #0 /app/fuel-app/fuel/core/classes/database/pdo/connection.php(193): Fuel\Core\Database_PDO_Connection->connect() #1 /app/fuel-app/fuel/core/classes/database/query.php(305): Fuel\Core\Database_PDO_Connection->query(1, 'SELECT * FROM `...', false) #2 /app/fuel-app/fuel/core/classes/dbutil.php(644): Fuel\Core\Database_Query->execute(NULL) #3 /app/fuel-app/fuel/core/classes/migrate.php(608): Fuel\Core\DBUtil::table_exists('migration') #4 /app/fuel-app/fuel/core/classes/migrate.php(74): Fuel\Core\Migrate::table_version_check() #5 [internal function]: Fuel\Core\Migrate::_init() #6 /app/fuel-app/fuel/core/classes/autoloader.php(375): call_user_func('Migrate::_init') #7 /app/fuel-app/fuel/core/classes/autoloader.php(249): Fuel\Core\Autoloader::init_class('Migrate') #8 [internal function]: Fuel\Core\Autoloader::load('Migrate') #9 /app/fuel-app/fuel/core/tasks/migrate.php(235): spl_autoload_call('Migrate') #10 /app/fuel-app/fuel/core/tasks/migrate.php(161): Fuel\Tasks\Migrate::_run('default', 'app') #11 /app/fuel-app/fuel/core/base.php(455): Fuel\Tasks\Migrate->__call('run', Array) #12 /app/fuel-app/fuel/core/base.php(455): Fuel\Tasks\Migrate->run() #13 /app/fuel-app/fuel/packages/oil/classes/refine.php(108): call_fuel_func_array(Array, Array) #14 [internal function]: Oil\Refine::run('migrate', Array) #15 /app/fuel-app/fuel/packages/oil/classes/command.php(126): call_user_func('Oil\Refine::run', 'migrate', Array) #16 /app/fuel-app/oil(68): Oil\Command::init(Array) #17 {main} Previous exception: Uncaught exception PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) Callstack: #0 /app/fuel-app/fuel/core/classes/database/pdo/connection.php(95): PDO->__construct('mysql:host=loca...', 'root', 'root', Array) #1 /app/fuel-app/fuel/core/classes/database/pdo/connection.php(193): Fuel\Core\Database_PDO_Connection->connect() #2 /app/fuel-app/fuel/core/classes/database/query.php(305): Fuel\Core\Database_PDO_Connection->query(1, 'SELECT * FROM `...', false) #3 /app/fuel-app/fuel/core/classes/dbutil.php(644): Fuel\Core\Database_Query->execute(NULL) #4 /app/fuel-app/fuel/core/classes/migrate.php(608): Fuel\Core\DBUtil::table_exists('migration') #5 /app/fuel-app/fuel/core/classes/migrate.php(74): Fuel\Core\Migrate::table_version_check() #6 [internal function]: Fuel\Core\Migrate::_init() #7 /app/fuel-app/fuel/core/classes/autoloader.php(375): call_user_func('Migrate::_init') #8 /app/fuel-app/fuel/core/classes/autoloader.php(249): Fuel\Core\Autoloader::init_class('Migrate') #9 [internal function]: Fuel\Core\Autoloader::load('Migrate') #10 /app/fuel-app/fuel/core/tasks/migrate.php(235): spl_autoload_call('Migrate') #11 /app/fuel-app/fuel/core/tasks/migrate.php(161): Fuel\Tasks\Migrate::_run('default', 'app') #12 /app/fuel-app/fuel/core/base.php(455): Fuel\Tasks\Migrate->__call('run', Array) #13 /app/fuel-app/fuel/core/base.php(455): Fuel\Tasks\Migrate->run() #14 /app/fuel-app/fuel/packages/oil/classes/refine.php(108): call_fuel_func_array(Array, Array) #15 [internal function]: Oil\Refine::run('migrate', Array) #16 /app/fuel-app/fuel/packages/oil/classes/command.php(126): call_user_func('Oil\Refine::run', 'migrate', Array) #17 /app/fuel-app/oil(68): Oil\Command::init(Array) #18 {main}まず、mysqlコンテナを調べると、
/var/lib/mysql/mysql.sock
はなくあったのは/var/run/mysqld/mysqld.sock
この場合、/var/run/mysqld/mysqld.sock
をphpコンテナから見えるようにしてあげればいい。
ただ、phpコンテナから見ているのは、/var/lib/mysql/mysql.sock
であったため、/var/run/mysqld/mysqld.sock
にするとphpコンテナを修正する手間があった。そのため、今回phpコンテナ側は修正をしたくなかったので、
/var/lib/mysql/mysql.sock
に合わせることにした。①mysqlコンテナの
/etc/mysql/my.cnf
をホストの/docker/mysql/my.cnf
でマウント。
設定は、/var/lib/mysql/mysql.sock
を見るようにした。
② ①の対応をした上で、phpコンテナからも/etc/mysql/my.cnf
をホストの/docker/mysql/my.cnf
でマウント。phpコンテナからも
/var/lib/mysql/mysql.sock
が見えるようになったことでMySQLとの通信が成功し、マイグレーションも成功した。変更ファイルは以下の通り。
my.cnf[mysqld] socket=/var/lib/mysql/mysql.sockdocker-compose.ymlversion: '3' services: php: build: context: ./docker/php/ dockerfile: Dockerfile volumes: - .:/app - ./docker/php/php.ini:/etc/php.ini - ./docker/httpd/httpd.conf:/etc/httpd/conf/httpd.conf - ./docker/mysql/volumes:/var/lib/mysql ports: - 8080:80 mysql: image: mysql:5.7 volumes: - ./docker/mysql/my.cnf:/etc/mysql/my.cnf - ./docker/mysql/volumes:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=test - MYSQL_USER=test - MYSQL_PASSWORD=test phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=root links: - mysql ports: - 4040:80 volumes: - ./docker/phpmyadmin/sessions:/sessions
- 投稿日:2019-10-11T17:59:49+09:00
最低限の労力でLaravelのタスクスケジュール ( Task Scheduling ) + AWS ECS
最低限の労力でLaravelのタスクスケジュール ( Task Scheduling ) + AWS ECS
※ ある程度LaravelのCommandやECSを利用している人向けの記事です
※ イメージにはphp:7.3-fpm-alpine
ベースで、他にミドルウェアを色々入れたものを利用
※ Laravelは6.0を利用EC2 + cron + Laravelで動いていた定期処理実行サーバを、ECSに移すことになりました。
以前から、WebはECS + Laravel (+ Nginx)で動かしてました
まあ、インフラ管理方法が2種類あるのは負担でしかないですよね。。。それで、方法を考えると、ECSの"タスクのスケジューリング"だろうとは思ったのですが
- たくさんECSのスケジュールタスクを作るのは面倒...
- CloudFormationを書くには、このプロジェクトは遅すぎた。cloudformationの運用も面倒...
そんなわけで、Laravelのタスクスケジュールと、ECSの”タスクのスケジューリング”を組み合わせてみました。
両方似たような名前で頭がオカシクなりそうです。注意事項
これから紹介する方法は、以下を許容できる処理に限定した方が良いと思います
- スケジュールが多少いい加減で良い
- イメージの内容によるが、コンテナ(タスク)が立ち上がるまでに数十秒かかる
- 時間に対応したスケジュールが一個ずつ実行されるため、全ての処理が完了するまでに時間がかかる
- ちなみに
runInBackground()
を利用したら処理完了前にコンテナが終了すると思います(戒め)- 時間がかかる処理では、同じコマンドが並列実行されるリスクがある
- つまり、コンテナが多重起動している状態もあるということ
- 多重でScheduleを実行させないための実装がLaravelにあり
onOneServer()
,withoutOverlapping()
onOneServer()
の方が良さそう(小並感)- コンテナ(ECSタスク)の多重起動をECS側で禁止する方法もあるが、大事なタイミングでコマンドが実行されない危険性があるので、おすすめしない
重要な処理は、個別にECSタスク定義とECSスケジュールタスクを作った方が良いかと思います。
(同じタスク定義を利用しても設定でCMDを上書きできます。しかし、タスクの設定でタスク定義のリビジョンを上げるたびに再度指定することになります。おすすめしません。)全体像
Laravelのタスクスケジュールで、定期実行の設定を記述
以下を参考に、淡々と記述すればOK。
https://readouble.com/laravel/6.0/ja/scheduling.htmlEC2なんかでcronですでに設定されていれば、
cron()
使えば楽にスケジュールを指定可能。ECSのスケジュールタスクを設定
- ECSでLaravelが動くDockerイメージが作成できていれば、それを利用してバッチ処理用のタスク定義を作成
- タスク定義では、コンテナ設定でCMDを
php artisan schedule:run
に変更
- すでにLaravelがPHP-FPMとかで動くイメージを利用する場合、起動時の動作(CMD)を上書きできる状態に変更
- ENTRYPOINTが指定されていた場合、ENTRYPOINTは実行時に上書きできないし、CMDはENTRYPOINTの引数扱いとなり、実行時の挙動を上書きできない
- ベースがphp-fpmのイメージなら、DockerfileでENTRYPOINTを
[]
に上書き(無効化)して、CMDを["docker-entry-point","php-fpm"]とかに変えればいいと思いますECSで"タスクのスケジューリング"を設定
上記のタスクを毎分起動するように設定。
(おまけ) エラー通知
例外発生時には、通知はもちろんスタックトレースとかも確認できるようにしたい。
LaravelのScheduleには、before, after, onFailuereといったフックがあるんですが、出力を参照できないっぽいから、こいつらは大した事はできないです。これはすごい悩んだ。いやまあ、杞憂でしたけどorz。
エラー時には、普通にHandlerに引っかかります。
つまり、app/Exceptions/Handler.php
内の処理。
既にSlack通知なりが設定されてれば、ECSスケジュールタスクでの例外発生時にも、同様にSlack通知されます。
定期処理だけ特別な処理をしたいなら、タスク定義に定期処理フラグ的な環境変数でも適当に設定して、その環境変数の値をもってHandlerの処理を分岐させれば良いと思われます。
- 投稿日:2019-10-11T17:52:14+09:00
Laravelの実行環境をDockerで構築する
概要
docker-composeを使ってLaravelの実行環境を構築します。
作成するコンテナはPHP-FPM、Nginx、MySQLの3つです。環境
Docker:19.03 ホストOS:Ubuntu 18.04(Vagrant)
Laravel:6.1.0 PHP-FPM:7.3 PHP:7.3.10 Nginx:1.17.4 MySQL:8.0
*Dockerおよびdocker-composeはホストOS(Vagrant上のUbuntu)上にインストールされているものとします。ディレクトリ構成
docker
|- docker-compose.yml
|- laravel
|- mysql
| |- Dockerfile
| |- my.cnf
| ∟ sql
| ∟ init.sql
|- nginx
| |- Dockerfile
| ∟ default.conf
∟ php
|- Dockerfile
∟ local.ini構築手順
1.Laravelとパッケージのインストール
初めに、ホストOS上にLaravelとパッケージをインストールします。コンテナにマウントする形でLaravelのファイルのコピーを行います。
・Laravelのインストール
最上位のdockerディレクトリ内で以下のコマンドを実行します。gitがない場合、先にインストールしてください。
git clone https://github.com/laravel/laravel.git laraveldockerディレクトリにlaravelというディレクトリが作成され、Git HubからLaravelのプロジェクトがクローンされます。
・パッケージのインストール
作成されたlaravelディレクトリに移動して、コンテナからcomposer installを実行します。
cd laravel docker run --rm --interactive --tty --volume $PWD:/app composer installこのコマンドは、Composerイメージからコンテナを一時的に作成し、Laravelに必要なパッケージをインストールします。
Laravelディレクトリをコンテナ内にマウントすることで、Composerコンテナがcomposer.jsonファイルを読み込んで利用できるようになっています。コンテナは実行後に消滅しますが、ディレクトリをマウントしているためホストOS上にインストールしたパッケージが残ります。公式のComposerイメージで紹介されている使用法です。
*ComposerイメージがホストOS上にない場合、イメージがdocker hubよりpullされます。
*注意:Composer実行中に以下のエラーが発生する場合があります。
proc_open(): fork failed errors
これはホストのメモリ不足によるものです。VMのメモリが1024MBだと発生するのでメモリを増やしましょう。2.docker-compose.yml作成
続いて、以下のようなdocker-compose.ymlを作成します。
docker-compose.ymlversion: '3' services: php: build: ./php image: app_php:7.3-fpm container_name: php restart: unless-stopped working_dir: /var/www volumes: - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini - ./laravel:/var/www networks: - app-network nginx: build: ./nginx image: app_nginx:1.17.4 container_name: nginx restart: unless-stopped ports: - 80:80 - 443:443 volumes: - ./laravel:/var/www networks: - app-network depends_on: - php mysql: build: ./mysql image: app_mysql:8.0 container_name: mysql restart: always ports: - 3306:3306 environment: MYSQL_DATABASE: laravel MYSQL_ROOT_PASSWORD: pass MYSQL_USER: user MYSQL_PASSWORD: pass TZ: 'Asia/Tokyo' command: --default-authentication-plugin=mysql_native_password volumes: - ./mysql/sql:/docker-entrypoint-initdb.d - mysql-volume:/var/lib/mysql/ networks: - app-network networks: app-network: driver: bridge volumes: mysql-volume: driver: local・PHPコンテナ
・image
通常、imageはコンテナで使用するイメージを指定しますが、「build」を使ってDockerfileからコンテナを起動する場合、docker-composeで作成するイメージにイメージ名とタグ名を付けることができます。ここでは「app_php」というイメージ名、「7.3-fpm」というタグ名を付与しています。・volumes
./php/local.ini:/usr/local/etc/php/conf.d/local.ini
ホスト上のphpディレクトリ内のlocal.iniを、コンテナ内の「/usr/local/etc/php/conf.d/local.ini」にコピーします。こうすることで、コンテナ内のデフォルトのphp.iniを上書きすることができます。php.iniファイル自体は上書きされませんが、phpinfo()で情報を出力すると上書きされていることを確認できます。local.iniは後に作成します。./laravel:/var/www
ホスト上でインストールしたlaravelディレクトリを、コンテナの「/var/www」とマウントします。こうすることで、ドキュメントルートを「/var/www/public」とすることができます。
開発環境であれば問題ありませんが、データをホストOSにマウントするのは推奨されていないため、本番で使う時はDockerボリュームを作成してマウントすることを検討しましょう。*注意
セキュリティを向上させるため、ディレクトリをリードオンリーでマウントすることが推奨されていますが、Laravelではファイルシステムをリードオンリーにするとエラーが発生します。./laravel:/var/www:ro(リードオンリー) → エラーが発生します。
・Nginxコンテナ
・volumes
./laravel:/var/www
Nginxコンテナでもlaravelディレクトリをマウントします。こうすることで、Nginxが受け付けたリクエストをLaravelで返すことができます。・MySQLコンテナ
・command
--default-authentication-plugin=mysql_native_password
上記のコマンドでMySQLの認証方式を変更しています。MySQLはバージョン8.0から認証方式を変更しており、「caching_sha2_password」がデフォルトとなっています。PHPのMySQL接続ライブラリが未対応のため、認証方式を「mysql_native_password」に戻します。・volumes
./mysql/sql:/docker-entrypoint-initdb.d
コンテナ内の「docker-entrypoint-initdb.d」以下にSQLを配置することで、初期設定などを行うことができます。mysql-volume:/var/lib/mysql/
MySQLのデータをDockerのボリュームにマウントして永続化します。Dockerのボリュームはコンテナを削除しても残ります。そのため、コンテナに変更を加える場合、volumeを削除しなければenvironment等の設定を変更しても反映されないので気を付けましょう。・environment
任意のユーザーとパスワードを設定してください。*注意
Dockerにおける永続化データの保存には、データ専用コンテナを作成する方法がありますが、docker-composeのバージョン3からvolumes_fromオプションが削除されているため使用することができません。3.Dockerfileの作成
次に、各コンテナを生成するDockerfileを作成します。
・PHPコンテナのDockerfile
phpディレクトリ内に以下のようなDockerfileを作成します。
DockerfileFROM php:7.3-fpm # Set working directory WORKDIR /var/www # Install dependencies RUN apt-get update && apt-get install -y \ build-essential \ default-mysql-client \ libpng-dev \ libjpeg62-turbo-dev \ libfreetype6-dev \ libmcrypt-dev \ libmemcached-dev \ libzip-dev \ locales \ zip \ jpegoptim optipng pngquant gifsicle \ vim \ unzip \ git \ curl # Clear cache RUN apt-get clean && rm -rf /var/lib/apt/lists/* # Install extensions RUN docker-php-ext-install pdo_mysql exif bcmath && \ docker-php-ext-configure zip --with-libzip && \ docker-php-ext-install zip && \ docker-php-ext-configure gd \ --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ && \ docker-php-ext-install gd # Install composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer # Add user for laravel application RUN groupadd -g 1000 php && \ useradd -u 1000 -ms /bin/bash -g php laravel # Change current user to laravel USER laravel # Expose port 9000 and start php-fpm server EXPOSE 9000 CMD ["php-fpm"]・ベースイメージ
公式イメージである「php:7.3-fpm」をベースイメージとしています。php:7.3-fpmのベースイメージは「debian:buster-slim」となっています。LaravelのプログラミングはPHPコンテナに入って行いますが、debianの上で行っていることを頭に入れておきましょう。・ライブラリ、エクステンションのインストール
PHPおよびLaravelの実行に必要なライブラリ、エクステンションをインストールしています。default-mysql-client
debian:buster-slimはmariadbをデフォルトとしており、mariadb-clientが使用されます。そのため、mysql-clientはインストールできません。その代わり、mysqlを利用するために「default-mysql-client」というものが用意されているので、そちらをインストールしています。bcmath
Laravelを実行するためのサーバー要件としていくつかのエクステンションが必要ですが、多くはPHP本体に含まれています。ただし、bcmathが含まれていないため、別途「docker-php-ext-install」でインストールしています。・ユーザーの作成
rootユーザーでDockerを操作するのはセキュリティ上好ましくないため、laravelというユーザーを作成しています。・NginxコンテナのDockerfile
nginxディレクトリ内に以下のDokcerfileを作成します。
DockerfileFROM nginx:1.17.4 COPY default.conf /etc/nginx/conf.d/default.confイメージはdocker-compose.ymlに指定することもできますが、docker-composeで作成するイメージにイメージ名を付与することができるため、docker-composeのbuildからイメージを作成するようにしています。また、後に作成するdefault.confをコンテナ内にコピーしています。
・MySQLコンテナのDockerfile
mysqlディレクトリ内に以下のDokcerfileを作成します。
DockerfileFROM mysql:8.0 COPY my.cnf /etc/mysql/conf.d/my.cnf RUN chmod 644 /etc/mysql/conf.d/my.cnf CMD ["mysqld"] EXPOSE 3306コンテナ内の「/etc/mysql/conf.d/my.cnf」に設定ファイルをコピーすることで、デフォルトのmy.cnfを上書きすることができます。
Windowsを使用している場合、VirtualBox経由でマウントしているディレクトリ/ファイルはすべてパーミッションが777 になります。MySQLは777の.cnfファイルを読み込みません。そのため、ファイルのパーミッションを変更しています。4.設定ファイルの作成
次に、各コンテナで使用する設定ファイルを作成します。
・PHPの設定ファイル
phpディレクトリ内にlocal.iniという設定ファイルを作成します。
local.inidisable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, memory_limit = 256M post_max_size = 100M upload_max_filesize = 100M date.timezone = "Asia/Tokyo" mysqlnd.collect_memory_statistics = Off mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = autoデフォルトのphp.iniが上書きされるので、変更が必要な項目のみ記載します。設定はLaravelの公式の開発環境であるHomesteadやLaradockを参考にしています。Homesteadではセキュリティの関係上、pcntl系の関数を使用しないようにしているようです。「memory_limit」や「post_max_size」などは、必要に応じて適宜変更してください。
・Nginxの設定ファイル
nginxディレクトリ内にdefault.confという設定ファイルを作成します。
default.confserver { listen 80; root /var/www/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }この設定はLaravelの公式ドキュメントの設定です。公式の設定では「fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;」となっているところを「fastcgi_pass php:9000;」と変更しています。コンテナ間で通信が行えるようにするため、php7.2-fpm.sock(Unixドメインソケット)を使うのではなく、PHPコンテナの9000番のポートを指定(php:9000)してTCP通信を行います。
・MySQLの設定ファイル
mysqlディレクトリ内にmy.confという設定ファイルを作成します。
my.conf[mysql] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 skip-character-set-client-handshake [mysqldump] default-character-set=utf8mb4 [client] default-character-set=utf8mb4こちらもデフォルトのmy.cnfを上書きできるため、変更する項目のみ記載します。日本語を使えるようにする設定です。
また、mysql/sqlディレクトリ内に以下のinit.sqlというファイルを作成します。
init.sqlGRANT ALL PRIVILEGES ON *.* to user@"%"; FLUSH PRIVILEGES ;こちらはコンテナが起動する際に実行されるコマンドです。作成したユーザーに権限を与えます。
5.コンテナの起動とMySQLの接続確認
・コンテナの起動
docker-compose.yml、Dockerfile、設定ファイルを作成した後、コンテナを起動します。
コンテナを起動する前に、Laravelの設定ファイルを「.env」として作成します。その後、docker-compose.ymlファイルのあるdockerディレクトリに移動します。cp .env.example .env cd ..docker-composeでコンテナを起動します。以下のコマンドを実行すると、各コンテナのイメージも作成されます。途中で「debconf: delaying package configuration, since apt-utils is not installed」という警告が出ますが、単なる警告なので問題ありません。すべての処理が完了するまで数分かかります。
docker-compose up -d処理が完了したら、以下のコマンドで確認します。
docker-compose ps以下のようにコンテナが立ち上がっていたら成功です。
Name Command State Ports ----------------------------------------------------------------------------------------- mysql docker-entrypoint.sh --def ... Up 0.0.0.0:3306->3306/tcp, 33060/tcp nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp php docker-php-entrypoint php-fpm Up 9000/tcp次に、Laravelのアプリケーションキーを設定します。PHPコンテナ内でphp artisanコマンドを実行します。
docker-compose exec php php artisan key:generateLaravelの設定ファイル.envの「APP_KEY」にキーが設定されます。次のコマンドで設定をキャッシュに反映させます。
docker-compose exec php php artisan config:cacheホストOSのIPアドレス(Vagrantfileに設定したIP)にブラウザからアクセスして以下の画面が表示されたら正常に動作しています。
・MySQLの接続確認
最初に、Laravelのデータベースの設定を行います。.envファイルを次のように設定します。
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=user DB_PASSWORD=passDB_HOSTにはコンテナ名であるmysqlと記述します。続いて、config/database.phpファイルを設定します。「'strict' => false」は、「mysql_native_password」の認証方式を利用するための設定です。
'host' => env('DB_HOST', 'mysql'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_USERNAME', 'user'), 'password' => env('DB_PASSWORD', 'pass'), 'strict' => false,以下のコマンドで設定をキャッシュに反映させます。
docker-compose exec php php artisan config:cachePHPコンテナに入り、接続の確認をしていきます。
docker exec -it php /bin/bashコンテナに入ったら、以下のコマンドでデータベースのマイグレーションを実行します。
php artisan migrate続いてtinkerを起動します。
php artisan tinker次のコマンドを実行して、マイグレーションを行ったデータが返ってきたらMySQLとの接続が成功しています。
\DB::table('migrations')->get();「Ctrl + C」を押してtinkerを終了し、ロールバックを行います。
php artisan migrate:rollbackなお、PHPコンテナにログインすると、Dokcerfileで定義したユーザーとしてログインします。rootユーザーではないため、コマンドの実行が制限されています。rootとしてログインしたい場合は、以下のようにuオプションに0を指定します。
docker exec -it -u 0 php /bin/bash以上でDockerによるLaravelの実行環境の構築は終了です。
参考にした記事
今回の環境構築は次の記事を参考にさせて頂きました。
How To Set Up Laravel, Nginx, and MySQL with Docker Compose
Dockerは非常に奥が深く、習得するのに時間がかかるツールと思いますが、Dockerfileやdocker-compose.ymlを自分で書くことで理解を深めていくことができます。
この記事が参考になれば幸いです。
- 投稿日:2019-10-11T17:43:00+09:00
docker applicationを動かしてみた
株式会社日立製作所 研究開発グループ サービスコンピューティング研究部の長沼です。
今回はCloud Native Application Bundles(CNAB)という観点で、実装の1つであるdocker applicationを動かしてみましたので、その内容について紹介します。
CNABの概要については、こちらの記事を参照ください。docker applicationとは
公式のREADME.mdによれば、
docker CLI Pluginとして動作する、アプリケーションをインストール・共有する仕組みです。
CNAB仕様と互換があり、Composeファイル(docker-compose.yml)から
CNABのinvocation image(アプリケーションをインストールするためのコンテナイメージ、すなわちインストーラ)を作成し、このinvocation imageをコンテナレジストリを用いて共有(配布・再利用)するための機能群を提供するものです。以降では、この一連の流れを具体的な手順と合わせて説明していきます。
docker applicationの準備
動作環境
今回使用するマシンのOSとdocker、およびdocker-app(docker applicationを実現するコマンド)のversionは以下の通りとなります。
- ubuntu 18.04 LTS
- docker
- client: Docker Engine - Community 19.03.2
- Server: Docker Engine - Community 19.03.2
- docker-app: v0.8.0またアプリケーションを展開するためのプライベートレジストリ(Harbor)と、インストール先として上記マシン上で動作するdocker swarmクラスタ、も準備しておきます。
インストール
まずdocker application(docker-appコマンド)のインストールを以下手順に従い実施していきます。
https://github.com/docker/app#installation上記で紹介されているようにdocker-appは、スタンドアローンとして利用する方法と、
docker CLI Pluginによりdockerのサブコマンドとして利用する方法があります。
今回は、dockerのサブコマンドとして利用する方法を使う方法で紹介していきます。
具体的には、以下コマンドを実行します。# docker-appのdownload $ export OSTYPE="$(uname | tr A-Z a-z)" $ curl -fsSL --output "/tmp/docker-app-${OSTYPE}.tar.gz" "https://github.com/docker/app/releases/download/v0.8.0/docker-app-${OSTYPE}.tar.gz" $ tar xf "/tmp/docker-app-${OSTYPE}.tar.gz" -C /tmp/ # docker CLI plugin利用の設定 $ mkdir -p ~/.docker/cli-plugins && cp "/tmp/docker-app-plugin-${OSTYPE}" ~/.docker/cli-plugins/docker-appappがサブコマンドとして認識されない(
'app' is not a docker command.
などとなる)場合、dockerのexperimentalを有効にすることで解決する場合があります。
例えば、以下を実行します。$ export DOCKER_CLI_EXPERIMENTAL=enableddocker applicationの利用
docker applicationを利用する上で必要となる一連の流れとして、
- invocation imageの元となるコンテンツ開発
- CNAB invocation imageへのビルド、
- レジストリへのpush/pull、
- アプリケーションのインストール
を以下で紹介していきます。コンテンツの開発
docker applicationは主に以下の3つのファイルからなります。
- metadata file (metadata.yml): アプリケーションのバージョンや説明などのメタ情報を記述
- compose file (docker-compose.yml): アプリケーションで使うイメージやポートなどの構成を記述
- parameter file (parameters.yml): compose fileに与える変数の定義を記述以降では、docker applicationの例でも用いられている、指定メッセージを表示する簡単なWebサーバを動作させるアプリケーションの作成を例に挙げ、説明を行っていきます。
まず上記ファイルの雛形をinitコマンドを使って生成します。
$ docker app init hello-message
するとhello-message.dockerappというディレクトリが作成され、3つのファイルの雛形が作成されているのが確認できます。
なおinitコマンドに--single-file
オプションを付けると、この3つのファイルを一つにまとめた1ファイル(今回の場合はhello-message.dockerappというYAMLファイル)
として雛形を出力することもできます。$ tree hello-message.dockerap hello-message.dockerapp/ ├── metadata.yml ├── parameters.yml └── docker-compose.ymlこの雛形を編集して、実際に動かすアプリケーションに必要な情報へ書き換えを行います。
ここでアプリケーション動作時に変更したい(変数化しておきたい)項目は、parameters.ymlにkey:valueの形式で記述し、docker-compose.yml側で変数${key}
として埋め込むことができます。
今回の例では、表示するメッセージ(docker-compose.ymlの${message}
)と公開ポート(同じく${ports.port1}
)を変数としています。metadata.yml# アプリケーションのバージョン version: 0.1.2 # アプリケーションの名前 name: hello-message # アプリケーションの簡単な説明 description: This application returns a hello message for HTTP request. # アプリケーションやパッケージのメンテナの名前・E-Mail maintainers: - name: maintainer.name email: maintainer@email.addressparameters.yml# docker-compose.ymlの${message}に対応するkeyとvalue(デフォルト値) message: world # keyを階層構造にもできる ports: port1: 5678docker-compose.ymlversion: "3.3" services: hello-server: image: hashicorp/http-echo # ${message}は変数として扱われる command: ["-text", "hello ${message}"] ports: - ${ports.port1}:5678これら用いて、
docker app render
により変数化部分に値が入ったdocker-composeファイルを生成することもできます。
以下ではメッセージ部分はデフォルト値(parameters.yamlで指定した値)、公開ポート部分は--set
オプションで変更した値、で生成したdocker-composeファイルを生成する例を示しています。$ docker app render --set ports.port1=8080 version: "3.3" services: hello-server: command: - -text - hello world image: hashicorp/http-echo ports: - mode: ingress target: 5678 published: 8080 protocol: tcpinvocation imageのビルド・レジストリへのpush/pull
invocation imageのビルド
docker app bundle
コマンドにより、hello-message.dockerappに対する
- CNABのinvocation image(アプリのインストーラ)の作成
- CNABのbundle.json(CNABが規定するパッケージのメタ情報)
を行うことができます。# invocation imageのbuild $ docker app bundle Invocation image "hello-message:0.1.2-invoc" successfully built # invocation imageの確認 $ docker images | grep hello-message hello-message 0.1.2-invoc fbce87b60497 23 seconds ago 49.1MB # bundle.jsonの確認 $ls . bundle.json docker-compose.yml metadata.yml parameters.ymlちなみに現在のdocker-appの実装では、実は
docker app render
でもCNAB invocation imageのビルドが行われるようです。
変数に値を入れたdocker-composeファイルを生成するにしては処理時間がかかると感じたら、実はイメージのビルドも行っていたんですね。。作成したinvocation imageの中身
作成したinvocation image(hello-message:0.1.2-invoc)とは、いったいどんなものか気になり、中身をのぞいてみました。
$ docker inspect hello-message:0.1.2-invoc [ { ... "Config": { "Hostname": "", "Domainname": "", "User": "cnab", "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"], "Cmd": [ "/bin/sh", "-c", "/cnab/app/run" ], ..., }, ... } ]から分かるように、invocation image実行時は、イメージ内の/cnab/app/runが起動されるようです。
invocation image内の/cnab内にどのようなものが格納されているかを見てみると、以下のように今回作成したhello-message.dockerappとrunコマンド(バイナリ)が格納されたものであることが確認できました。# tree /cnab の結果 cnab └── app ├── hello-message.dockerapp │ ├── bundle.json │ ├── docker-compose.yml │ ├── metadata.yml │ └── parameters.yml └── runレジストリへのpush・pull
さらに作成したinvocation imageは、レジストリに格納することができます。
これにより、dockerイメージと同じようにレジストリを介し、invocation image(すなわちアプリのインストーラ)を配布・再利用することができるようになります。以降ではローカルに立てたレジストリ(registry:5000)を介してinvocation imageをpush/pullする例を示しています。
今回はinsecure registryを使ったため、--insecure-registries
オプションを付ける必要がありました。# レジストリへpush $ docker app push --insecure-registries registry:5000 --tag registry:5000/hello-message:0.1.2 # レジストリからのpull $ docker app pull --insecure-registries registry:5000 registry:5000/hello-message:0.1.2さらに
docker app inspect
をpush前後で比較してみると単純なpushではなく、以下のようにアプリケーションのイメージ(hello-serverに対応するimage)
も参照場所が書き換えられていました。
すなわちinvocation imageだけでなく、invocation imageに含まれるアプリのイメージも、今回invocation imageを格納したレジストリへ集約しているようです。# hello-message.dockerappディレクトリ直下で実行した結果 $ docker app inspect . hello-message 0.1.2 Maintained by: maintainer.name <maintainer@email.address> This application returns a hello message for HTTP request. Service (1) Replicas Ports Image ----------- -------- ----- ----- hello-server 1 5678 hashicorp/http-echo Parameters (2) Value -------------- ----- message world ports.port1 5678 Attachments (7) Size --------------- ---- bundle.json 2.345kB ...(略) # pushしたregistry:5000/hello-message:0.1.2に対して実行するとhello-serverのImage部分が変更されている $ docker app inspect --insecure-registries registry:5000 registry:5000/hello-message:0.1.2 hello-message 0.1.2 Maintained by: maintainer.name <maintainer@email.address> This application returns a hello message for HTTP request. Service (1) Replicas Ports Image ----------- -------- ----- ----- hello-server 1 5678 registry:5000/hello-message@sha256:ba27d460cd1f22a1a4331bdf74f4fccbc025552357e8a3249c40ae216275de96 Parameters (2) Value -------------- ----- message world ports.port1 5678 Attachments (7) Size --------------- ---- bundle.json 2.345kB ...アプリの起動
このようにビルドしたinvocation imageは、現状ではdocker swarmとkubernetesへインストール(デプロイ)することができます。
swarmの場合は、以下のようにしてアプリをインストール・確認できます。# hello-messageのswarmへのインストール $ docker app install --insecure-registries registry:5000 registry:5000/hello-message:0.1.2 # インストール結果の確認 $ docker app list INSTALLATION APPLICATION LAST ACTION RESULT CREATED MODIFIED REFERENCE hello-message hello-message (0.1.2) install success 12 seconds 11 seconds registry:5000/hello-message:0.1.2 # アンインストール $ docker app uninstall hello-messagekubernetesも、compose-on-kubernetesでAPIを拡張したkubernetesクラスタに対して、
--orchestrator kubernetes
オプションを付けることでアプリケーションをインストールできるとのことです。
ただ今回準備した環境ではうまく動かすことができず、こちらは引き続き調査などを行っていきたいと思います。まとめ
今回はdocker-appを使って、コンテンツの準備、CNABのinvocation imageのビルド/push/pull、およびアプリのインストールまでの流れを紹介しました。
これまでの資産として既にdocker-composeファイルで動作するアプリケーションがあり、これをCNAB仕様に従って共有したいようなユースケースには、うまくフィットする気がしました。
特にdocker app pull/pushという、慣れ親しんだdokcerコマンドの使い勝手でinvocation imageを配布/再利用(push/pull)できる仕組みはステキに感じました。
またCNAB向けのレジストリという点ではcnab-to-ociというプロジェクトでも議論されており、こういった周辺動向含め引き続き見ていきたいと思います。参考資料
- CNAB: https://github.com/deislabs/cnab-spec
- docker-app: https://github.com/docker/app
- cnab-to-oci: https://github.com/docker/cnab-to-oci
- 投稿日:2019-10-11T15:48:56+09:00
kamonohashi をdockerで:未完
KAMONOHASHI
https://kamonohashi.aihttps://github.com/KAMONOHASHI/kamonohashi
install
https://kamonohashi.ai/docs/install-and-update
macOS$ docker run -v /Users/Administrator/work:/home/work -p 8080:8080 -it ubuntu /bin/bash# apt update; apt -y update # apt install -y wget apt-utils sudo vim # export KQI_VERSION='1.1.2' # wget -O /tmp/deploy-tools-$KQI_VERSION.tar.gz https://github.com/KAMONOHASHI/kamonohashi/releases/download/$KQI_VERSION/deploy-tools-$KQI_VERSION.tar.gz --2019-10-11 06:39:29-- https://github.com/KAMONOHASHI/kamonohashi/releases/download/1.1.2/deploy-tools-1.1.2.tar.gz Resolving github.com (github.com)... 13.114.40.48 Connecting to github.com (github.com)|13.114.40.48|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/188967625/222c1b00-e5e8-11e9-9d1f-ad9205903c1e?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191011%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191011T063930Z&X-Amz-Expires=300&X-Amz-Signature=153a4ff98de0ed7f1eff048a90677cbaa4fdb862ada10b6e693bc51d3b2a7490&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Ddeploy-tools-1.1.2.tar.gz&response-content-type=application%2Foctet-stream [following] --2019-10-11 06:39:30-- https://github-production-release-asset-2e65be.s3.amazonaws.com/188967625/222c1b00-e5e8-11e9-9d1f-ad9205903c1e?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20191011%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20191011T063930Z&X-Amz-Expires=300&X-Amz-Signature=153a4ff98de0ed7f1eff048a90677cbaa4fdb862ada10b6e693bc51d3b2a7490&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Ddeploy-tools-1.1.2.tar.gz&response-content-type=application%2Foctet-stream Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.184.35 Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.184.35|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 16403 (16K) [application/octet-stream] Saving to: '/tmp/deploy-tools-1.1.2.tar.gz' /tmp/deploy-tools-1.1.2.tar.gz 100%[==========================================================>] 16.02K 90.7KB/s in 0.2s 2019-10-11 06:39:31 (90.7 KB/s) - '/tmp/deploy-tools-1.1.2.tar.gz' saved [16403/16403] # mkdir -p /var/lib/kamonohashi/deploy-tools/$KQI_VERSION/ # cd /var/lib/kamonohashi/deploy-tools/$KQI_VERSION/ # tar --strip=1 -xf /tmp/deploy-tools-$KQI_VERSION.tar.gz ./deploy-basic-cluster.sh deploy -------------------------------------------------------------------------------------------- ..NNNMMMMNNgJ.. # # ## # # ##### # # ##### ..NMMMMMMMMMMMMMMMMNa, # # ## ## ## # # ## # # # .dMMMMMMMMMMMMMMMMMMMM"! # # # # # # # # # # # # # # # .dMMMMMMMMMMMMMMMMMMMD` ### # # # # # # # # # # # # # .MMMMMMMMMMMMMMMMMMM'` # # # # # # # # # # # # # # .MMMMMMMMMMMMMMMMMMM' .MM # # ###### # # # # # # # # # MMMMMMMH""MMMMMMMMMM{ MMM' # # # # # # # # # ## # # .MMMMM' _7"WMMY" # # # # # # ##### # # ##### dMMMM! dMMM# # # ## #### # # # JMMMN # # ## # # # # .MMMMp # # # # # # # # ?MMMMMNJ.. ###### # # ## ###### # TMMMMMMMMMMMMMMMMMMMMMMMMNN.. # # # # ## # # # ?MMMMMMMMMMMMMMMMMMMMMMMMMMMMt # # ###### # # # # TMMMMMMMMMMMMMMMMMMMMMMMMM! # # # # # # # # # 7MMMMMMMMMMMMMMMMMMMM"` # # # # ##### # # # ?YMMMMMMMMMMMMB"` クラスタ構築ツール -------------------------------------------------------------------------------------------- ################################################## STEP[1/5] クラスタ設定の入力 ################################################## クラスタの構成情報を入力してください 詳細は https://kamonohashi.ai/docs/beforequickstart/install を参照してください Kubernetes masterをデプロイするサーバ名: k8s-master KAMONOHASHIをデプロイするサーバ名: kqi-node Storageをデプロイするサーバ名: storage1 GPU サーバ名(,区切りで複数可): gpu-servere1,gpu-server2,gpu-server3 SSHユーザー名: sshuser SSHパスワード(キーを使用する場合は未入力でEnter): SUDOパスワード(不要なら未入力でEnter): プロキシを設定しますか? [y/N]: N KAMONOHASHIのadminパスワード(8文字以上): ./deploy-basic-cluster.sh : line 98: envsubst: command not foundmacOS$ docker push kaizenjapan/kamonohashi
p.s.
https://github.com/KAMONOHASHI/kamonohashi/tree/master/release-tools/build-docker
内容確認中。
Type Name Latest commit message Commit time build.sh build.shのバグ修正 4 months ago cli-Dockerfile initial commit 5 months ago push.sh 実行権限をスクリプトに付与 5 months ago web-api-Dockerfile initial commit 5 months ago web-pages-Dockerfile initial commit 5 months ago
- 投稿日:2019-10-11T15:15:52+09:00
Google Apps Script を TypeScript + Docker で開発する
以下のやり方で
- Google Apps Script をローカルで書け、Git管理できる
- TypeScriptで書ける
- Docker内に環境構築するため、ホストOSを汚さない
の3つを満たすことができます。
Docker 環境を構築する
完了後のファイル構成
./ ├── docker │ ├── Dockerfile │ └── docker-compose.yml └── src ├── gas │ ├── appsscript.json │ └── hello.ts ├── package.json └── node_modules └── @typesdocker-compose.yml
version: '2' services: gas-build: build: . container_name: 'gas-build' tty: true volumes: - "../src:/opt/src"Dockerfile
FROM node:8.16.2 RUN npm -v RUN npm i @google/clasp -gDocker Build
cd ./docker docker-compose buildDockerをデーモンとして起動して bash に入る
起動
docker-compose up -d起動後、bash に入る
docker-compose exec gas-build bash終了
docker-compose stopこれで npm + google/clasp が実行できる環境で bash に入ることができた。
clasp を使えるようにする
docker に bash で入って clasp による Google ログインを行う
docker であるため、 --no-localhost オプションをつけるclasp login --no-localhost色々権限を求められるので、許可する。
許可完了後、コードが表示されるため、コピーをして、 bash 内に入力するclasp のプロジェクトを作成する
GoogleAppsScript API の許可をしておく
プロジェクト作成
cd /opt/src clasp create --title clasp-sample-project --parentId {GoogleDriveのフォルダID} --rootDir ./gasGoogle Drive のフォルダIDは、フォルダを開いた後のURLを参照してください
https://drive.google.com/drive/folders/{GoogleDriveのフォルダID}IDE で Google Apps Script のコード補完をできるようにしておく
cd /opt/src npm install @types/google-apps-script作成結果
TypeScript作成
テスト用ソースコード作成
ホストOS上にて、
./src/gas/hello.ts を作成const greeter = (person: string) => { return `Hello, ${person}!`; } function testGreeter() { const user = 'Grant'; Logger.log(greeter(user)); }テストとして、Google Drive に Pushする
修正するたびに実行するため、Dockerコンテナ内からではなく、
ホストOSから実行できるようにするdocker-compose exec gas-build bash -c "cd /opt/src/ && clasp push"clasp push に --watch のオプションをつけると、監視状態になり、変更の都度、自動でPushされる。
clasp でプッシュした結果
正常に Google Apps Script が反映されている!
- 投稿日:2019-10-11T10:54:51+09:00
今日のdocker error:one of the subprocesses failed:
docker desktop for Mac : 2.1.0.2(37877)
macOS:10.12.6error
Diagnose & Feedback
くるくる回って終わらない。
3分経過。macOSPID TTY TIME CMD 1 ?? 1319:46.53 /sbin/launchd 41 ?? 1:02.08 /usr/sbin/syslogd 42 ?? 5:36.14 /usr/libexec/UserEventAgent (System) 44 ?? 0:33.49 /Applications/ESET Endpoint Antivirus.app/Contents/MacOS/esets_ctl 45 ?? 1:37.92 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld 46 ?? 0:04.59 /usr/libexec/kextd 47 ?? 11:41.84 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Support/fseventsd 49 ?? 0:16.36 /System/Library/PrivateFrameworks/MediaRemote.framework/Support/mediaremoted 52 ?? 0:01.90 /System/Library/CoreServices/appleeventsd --server 53 ?? 17:54.02 /usr/libexec/configd 54 ?? 0:54.32 /System/Library/CoreServices/powerd.bundle/powerd 55 ?? 0:06.25 /usr/libexec/mobileassetd 60 ?? 19:51.05 /usr/libexec/logd 64 ?? 0:27.30 /usr/libexec/airportd 66 ?? 0:01.93 /usr/libexec/warmd 72 ?? 0:00.37 /System/Library/CoreServices/iconservicesd 73 ?? 0:00.35 /System/Library/CoreServices/iconservicesagent 75 ?? 0:06.95 /usr/libexec/diskarbitrationd 78 ?? 0:40.56 /usr/libexec/coreduetd 79 ?? 0:00.03 /usr/libexec/wdhelper 84 ?? 2:52.08 /usr/libexec/opendirectoryd 85 ?? 0:23.82 /usr/sbin/wirelessproxd 87 ?? 0:40.73 /System/Library/PrivateFrameworks/ApplePushService.framework/apsd 88 ?? 0:02.86 /Library/PrivilegedHelperTools/com.docker.vmnetd 89 ?? 0:00.02 /System/Library/PrivateFrameworks/Noticeboard.framework/Versions/A/Resources/nbstated 90 ?? 15:40.07 /System/Library/CoreServices/launchservicesd 92 ?? 0:39.72 /usr/sbin/securityd -i 94 ?? 1:08.16 /usr/libexec/locationd 96 ?? 0:08.65 /usr/libexec/DuetHeuristic-BM 97 ?? 1:52.94 /usr/libexec/displaypolicyd -k 1 98 ?? 1:26.82 /usr/sbin/blued 99 ?? 0:00.28 autofsd 103 ?? 48:33.76 /Applications/ESET Remote Administrator Agent.app/Contents/MacOS/ERAAgent 104 ?? 0:00.79 /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/Support/revisiond 106 ?? 0:00.24 /System/Library/CoreServices/logind 107 ?? 0:00.02 /usr/sbin/KernelEventAgent 110 ?? 5727:23.89 /usr/libexec/hidd 111 ?? 0:04.21 /usr/libexec/corebrightnessd --launchd 112 ?? 0:18.27 /usr/libexec/AirPlayXPCHelper 113 ?? 0:13.24 /usr/libexec/amfid 114 ?? 10:45.98 /usr/sbin/notifyd 115 ?? 12:46.39 /usr/sbin/distnoted daemon 116 ?? 0:02.52 /System/Library/Frameworks/Security.framework/Versions/A/XPCServices/authd.xpc/Contents/MacOS/authd 117 ?? 0:15.34 /System/Library/CoreServices/coreservicesd 119 ?? 0:01.45 aslmanager 120 ?? 0:31.87 /usr/sbin/cfprefsd daemon 160 ?? 2:45.06 /usr/sbin/coreaudiod 163 ?? 0:00.27 /System/Library/Frameworks/PCSC.framework/Versions/A/XPCServices/com.apple.ctkpcscd.xpc/Contents/MacOS/com.apple.ctkpcscd 165 ?? 2:00.07 /usr/libexec/trustd 166 ?? 0:00.28 /System/Library/Frameworks/CryptoTokenKit.framework/ctkd -s 170 ?? 7:05.37 /usr/sbin/mDNSResponder 172 ?? 0:00.27 /System/Library/Frameworks/CoreAudio.framework/Versions/A/XPCServices/com.apple.audio.DriverHelper.xpc/Contents/MacOS/com.apple.audio.DriverHelper 177 ?? 1:06.64 /usr/libexec/sandboxd 188 ?? 2:34.42 /usr/sbin/mDNSResponderHelper 190 ?? 0:12.28 /usr/libexec/lsd runAsRoot 192 ?? 0:01.51 /System/Library/PrivateFrameworks/CoreSymbolication.framework/coresymbolicationd 196 ?? 0:00.27 /usr/sbin/systemstats --xpc 197 ?? 0:00.21 /System/Library/CoreServices/CrashReporterSupportHelper server-init 198 ?? 0:08.86 /usr/libexec/nsurlsessiond --privileged 199 ?? 9:53.13 /usr/sbin/ntpd -c /private/etc/ntp-restrict.conf -n -g -p /var/run/ntpd.pid -f /var/db/ntp.drift 200 ?? 0:02.48 /usr/libexec/nehelper 201 ?? 2:58.67 /usr/libexec/symptomsd 202 ?? 0:13.02 /usr/libexec/usbd 203 ?? 0:00.02 /System/Library/CryptoTokenKit/com.apple.ifdreader.slotd/Contents/MacOS/com.apple.ifdreader 207 ?? 0:01.56 /usr/libexec/thermald 214 ?? 0:10.94 /System/Library/PrivateFrameworks/WirelessDiagnostics.framework/Support/awdd 216 ?? 0:05.03 /usr/sbin/netbiosd 218 ?? 0:00.35 /System/Library/PrivateFrameworks/Heimdal.framework/Helpers/kdc 219 ?? 0:15.47 /usr/libexec/watchdogd 225 ?? 0:00.34 /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/CVMServer 229 ?? 0:04.01 /System/Library/Frameworks/Security.framework/Versions/A/XPCServices/com.apple.CodeSigningHelper.xpc/Contents/MacOS/com.apple.CodeSigningHelper 246 ?? 0:00.80 /System/Library/CoreServices/sharedfilelistd --enable-legacy-services 248 ?? 1:21.96 /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd 249 ?? 0:00.13 /System/Library/Frameworks/CryptoTokenKit.framework/ctkahp.bundle/Contents/MacOS/ctkahp -d 250 ?? 0:00.40 /usr/libexec/secinitd 257 ?? 3:43.13 sysmond 258 ?? 0:00.44 /System/Library/PrivateFrameworks/AccountPolicy.framework/XPCServices/com.apple.AccountPolicyHelper.xpc/Contents/MacOS/com.apple.AccountPolicyHelper 260 ?? 0:01.52 /usr/sbin/systemsoundserverd 261 ?? 0:00.13 /System/Library/PrivateFrameworks/TCC.framework/Resources/tccd system 262 ?? 0:00.93 /System/Library/Frameworks/LocalAuthentication.framework/Support/coreauthd 263 ?? 0:00.31 /Applications/.esets/Contents/MacOS/esets_daemon 264 ?? 153:45.51 /Applications/.esets/Contents/MacOS/esets_daemon --scan-process 265 ?? 0:00.56 /usr/libexec/securityd_service 271 ?? 0:00.11 /Applications/.esets/Contents/MacOS/esets_kac 273 ?? 0:42.00 /Applications/.esets/Contents/MacOS/esets_fcor 274 ?? 0:00.37 /Applications/.esets/Contents/MacOS/esets_mac 275 ?? 3:19.75 /Applications/.esets/Contents/MacOS/esets_proxy 290 ?? 23:06.62 /System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdated 291 ?? 0:01.55 /System/Library/PrivateFrameworks/SoftwareUpdate.framework/Resources/suhelperd 298 ?? 0:02.26 /usr/libexec/nsurlstoraged 318 ?? 11:58.57 /usr/sbin/cupsd -l 328 ?? 1:05.10 /usr/sbin/cfprefsd agent 330 ?? 2:34.19 /usr/sbin/distnoted agent 331 ?? 63:53.70 /usr/sbin/distnoted agent 337 ?? 0:00.31 /System/Library/Frameworks/GSS.framework/Helpers/com.apple.GSSCred 343 ?? 88:25.35 /usr/libexec/lsd 359 ?? 0:00.09 /usr/sbin/WirelessRadioManagerd 365 ?? 0:00.23 /System/Library/PrivateFrameworks/IMDPersistence.framework/XPCServices/IMDPersistenceAgent.xpc/Contents/MacOS/IMDPersistenceAgent 372 ?? 0:04.84 /usr/libexec/secinitd 373 ?? 1031:27.32 /usr/libexec/pkd 377 ?? 0:00.60 /usr/libexec/AssetCache/AssetCache 379 ?? 0:00.45 /System/Library/CoreServices/backupd.bundle/Contents/Resources/TMCacheDelete 380 ?? 0:01.83 /System/Library/PrivateFrameworks/PackageKit.framework/Resources/installd 383 ?? 3:20.39 /System/Library/PrivateFrameworks/PackageKit.framework/Resources/system_installd 398 ?? 0:00.40 /System/Library/Frameworks/Security.framework/Versions/A/Resources/CloudKeychainProxy.bundle/Contents/MacOS/CloudKeychainProxy 399 ?? 0:01.90 /System/Library/PrivateFrameworks/CloudPhotoServices.framework/Versions/A/Frameworks/CloudPhotosConfigurationXPC.framework/Versions/A/XPCServices/com.apple.CloudPhotosConfiguration.xpc/Contents/MacOS/com.apple. 422 ?? 0:00.30 /usr/libexec/findmydeviced 426 ?? 0:01.94 /usr/sbin/filecoordinationd 432 ?? 0:18.33 /System/Library/PrivateFrameworks/GeoServices.framework/Versions/A/XPCServices/com.apple.geod.xpc/Contents/MacOS/com.apple.geod 470 ?? 0:02.51 /usr/libexec/taskgated -s 478 ?? 0:00.27 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper 480 ?? 0:45.71 /usr/sbin/spindump 487 ?? 0:00.75 /System/Library/CoreServices/SubmitDiagInfo server-init 504 ?? 1:07.62 /usr/libexec/trustd --agent 514 ?? 0:11.59 /usr/libexec/wifivelocityd 598 ?? 0:00.70 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdflagwriter 630 ?? 0:00.40 /usr/libexec/smd 687 ?? 0:00.27 /System/Library/PrivateFrameworks/InstallerDiagnostics.framework/Versions/A/Resources/installerdiagd 748 ?? 8:10.47 /System/Library/StagedFrameworks/Safari/SafariShared.framework/Versions/A/XPCServices/com.apple.Safari.History.xpc/Contents/MacOS/com.apple.Safari.History 756 ?? 0:00.27 /System/Library/PrivateFrameworks/StoreXPCServices.framework/Versions/A/XPCServices/com.apple.appstore.PluginXPCService.xpc/Contents/MacOS/com.apple.appstore.PluginXPCService 855 ?? 0:00.81 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdflagwriter 857 ?? 0:00.45 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/XPCServices/com.apple.DictionaryServiceHelper.xpc/Contents/MacOS/com.apple.DictionaryServiceHelper 891 ?? 0:00.72 /usr/libexec/dprivacyd 922 ?? 0:00.47 /System/Library/Frameworks/MediaAccessibility.framework/Versions/A/XPCServices/com.apple.accessibility.mediaaccessibilityd.xpc/Contents/MacOS/com.apple.accessibility.mediaaccessibilityd 945 ?? 0:18.17 /System/Library/Frameworks/ApplicationServices.framework/Frameworks/SpeechSynthesis.framework/Resources/com.apple.speech.speechsynthesisd 1002 ?? 0:00.04 /usr/libexec/periodic-wrapper daily 1165 ?? 0:02.02 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker-sizing -c MDSSizingWorker -m com.apple.mdworker.sizing 1297 ?? 0:08.46 /usr/libexec/syspolicyd 1526 ?? 0:08.98 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/XPCServices/com.apple.hiservices-xpcservice.xpc/Contents/MacOS/com.apple.hiservices-xpcservice 3827 ?? 0:00.25 /usr/sbin/aslmanager -s /var/log/eventmonitor 5775 ?? 0:00.06 /usr/libexec/applessdstatistics 5957 ?? 0:00.01 /usr/libexec/periodic-wrapper monthly 5958 ?? 0:00.01 /usr/libexec/periodic-wrapper weekly 6007 ?? 22:12.22 /usr/libexec/trustd --agent 6014 ?? 0:27.50 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow console 6018 ?? 34:19.38 /System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServer -daemon 6020 ?? 0:36.14 /System/Library/PrivateFrameworks/AmbientDisplay.framework/Versions/A/XPCServices/com.apple.AmbientDisplayAgent.xpc/Contents/MacOS/com.apple.AmbientDisplayAgent 6036 ?? 0:00.11 /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd -launchd 6053 ?? 2:25.68 /usr/libexec/UserEventAgent (Aqua) 6057 ?? 0:18.83 /System/Library/Frameworks/CoreTelephony.framework/Support/CommCenter -L 6058 ?? 0:01.20 /usr/sbin/usernoted 6059 ?? 0:04.12 /usr/libexec/nsurlsessiond 6060 ?? 2:57.32 /Applications/Epson Software/Event Manager.app/Contents/Resources/Assistants/Event Manager/EEventManager.app/Contents/MacOS/EEventManager 6062 ?? 0:02.65 /System/Library/PrivateFrameworks/CalendarAgent.framework/Executables/CalendarAgent 6064 ?? 0:00.29 /usr/libexec/networkserviceproxy 6065 ?? 0:56.81 /System/Library/CoreServices/SafariSupport.bundle/Contents/MacOS/SafariBookmarksSyncAgent 6066 ?? 0:00.17 /System/Library/PrivateFrameworks/QuickLookThumbnailing.framework/Support/com.apple.quicklook.ThumbnailsAgent 6067 ?? 0:11.20 /System/Library/PrivateFrameworks/CloudDocsDaemon.framework/Versions/A/Support/bird 6068 ?? 0:11.97 /System/Library/CoreServices/cloudphotosd.app/Contents/MacOS/cloudphotosd 6069 ?? 0:00.13 /System/Library/PrivateFrameworks/CoreFollowUp.framework/Versions/A/Support/followupd 6071 ?? 0:00.82 /System/Library/PrivateFrameworks/CoreSuggestions.framework/Versions/A/Support/suggestd 6072 ?? 0:00.29 /System/Library/PrivateFrameworks/PhotoAnalysis.framework/Versions/A/Support/photoanalysisd 6074 ?? 7:24.83 /usr/libexec/swcd 6075 ?? 0:00.04 /usr/libexec/DataDetectorsSourceAccess 6076 ?? 140:32.55 /usr/libexec/videosubscriptionsd 6078 ?? 0:00.42 /System/Library/Image Capture/Support/icdd 6079 ?? 0:00.27 /usr/libexec/secd 6081 ?? 0:00.66 /System/Library/Frameworks/Accounts.framework/Versions/A/Support/accountsd 6083 ?? 0:00.74 /System/Library/PrivateFrameworks/TelephonyUtilities.framework/callservicesd 6084 ?? 0:00.46 /System/Library/PrivateFrameworks/TCC.framework/Resources/tccd 6086 ?? 0:01.85 /System/Library/PrivateFrameworks/CalendarNotification.framework/Versions/A/XPCServices/CalNCService.xpc/Contents/MacOS/CalNCService 6087 ?? 0:12.39 /System/Library/PrivateFrameworks/CloudKitDaemon.framework/Support/cloudd 6088 ?? 0:01.01 /System/Library/PrivateFrameworks/IDS.framework/identityservicesd.app/Contents/MacOS/identityservicesd 6089 ?? 0:00.36 /System/Library/PrivateFrameworks/IMCore.framework/imagent.app/Contents/MacOS/imagent 6090 ?? 0:00.46 /usr/libexec/pboard 6091 ?? 5:35.15 /System/Library/PrivateFrameworks/CoreParsec.framework/parsecd 6092 ?? 0:00.14 /System/Library/Frameworks/Security.framework/Versions/A/Resources/KeychainSyncingOverIDSProxy.bundle/Contents/MacOS/KeychainSyncingOverIDSProxy 6093 ?? 0:02.02 /System/Library/CoreServices/pbs 6094 ?? 0:00.59 /System/Library/CoreServices/sharedfilelistd 6097 ?? 0:00.09 /usr/libexec/languageassetd --firstLogin 6098 ?? 0:00.30 /System/Library/Frameworks/AddressBook.framework/Executables/ContactsAccountsService 6099 ?? 0:03.65 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeaccountd 6101 ?? 4:30.42 /usr/libexec/nsurlstoraged 6103 ?? 0:02.89 /System/Library/PrivateFrameworks/IMFoundation.framework/XPCServices/IMRemoteURLConnectionAgent.xpc/Contents/MacOS/IMRemoteURLConnectionAgent 6104 ?? 0:13.27 /System/Library/PrivateFrameworks/UserActivity.framework/Agents/useractivityd 6105 ?? 0:02.65 /System/Library/PrivateFrameworks/MediaRemote.framework/Support/mediaremoteagent 6106 ?? 0:00.06 /System/Library/PrivateFrameworks/IMFoundation.framework/XPCServices/IMRemoteURLConnectionAgent.xpc/Contents/MacOS/IMRemoteURLConnectionAgent 6107 ?? 0:19.77 /usr/libexec/sharingd 6108 ?? 0:00.29 /System/Library/PrivateFrameworks/PrintingPrivate.framework/Versions/A/PrintUITool 6109 ?? 0:00.25 /usr/libexec/fmfd 6113 ?? 0:00.18 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/XPCServices/com.apple.CommerceKit.TransactionService.xpc/Contents/MacOS/com.apple.CommerceKit.TransactionService 6115 ?? 0:00.12 /System/Library/Frameworks/LocalAuthentication.framework/Support/coreauthd 6116 ?? 0:58.94 /System/Library/PrivateFrameworks/CacheDelete.framework/deleted 6119 ?? 0:04.36 /System/Library/PrivateFrameworks/PassKitCore.framework/passd 6120 ?? 0:00.09 /usr/libexec/nfcd 6122 ?? 0:24.04 /Applications/mi.app/Contents/MacOS/mi -psn_0_10615327 6123 ?? 240:59.91 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_10619424 6124 ?? 1:01.40 /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -psn_0_10623521 6125 ?? 1:03.90 /Applications/BridgePoint.app/Contents/MacOS/bridgepoint -psn_0_10627618 6127 ?? 0:10.83 /Applications/System Preferences.app/Contents/MacOS/System Preferences -psn_0_10635812 6128 ?? 2:44.96 /Applications/Microsoft Word.app/Contents/MacOS/Microsoft Word -psn_0_10639909 6130 ?? 6:32.18 /Applications/Microsoft Excel.app/Contents/MacOS/Microsoft Excel -psn_0_10648103 6131 ?? 8:14.63 /Applications/LINE.app/Contents/MacOS/LINE -psn_0_10652200 6132 ?? 80:10.03 /Applications/App Store.app/Contents/MacOS/App Store -psn_0_10656297 6133 ?? 0:09.11 /Applications/Epson Software/EPSON Manuals.app/Contents/MacOS/EPSON Manuals -psn_0_10660394 6134 ?? 0:39.58 /Applications/Mail.app/Contents/MacOS/Mail -psn_0_10664491 6135 ?? 0:18.43 /System/Library/CoreServices/Dock.app/Contents/MacOS/Dock 6137 ?? 0:13.69 /System/Library/Frameworks/ApplicationServices.framework/Frameworks/ATS.framework/Support/fontd 6138 ?? 0:27.20 /System/Library/CoreServices/SystemUIServer.app/Contents/MacOS/SystemUIServer 6139 ?? 52:18.43 /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder 6147 ?? 0:14.07 /System/Library/CoreServices/Spotlight.app/Contents/MacOS/Spotlight 6151 ?? 0:03.26 /System/Library/PrivateFrameworks/AuthKit.framework/Versions/A/Support/akd 6155 ?? 0:01.50 /System/Library/CoreServices/iconservicesagent 6157 ?? 0:00.12 /System/Library/Frameworks/CryptoTokenKit.framework/ctkahp.bundle/Contents/MacOS/ctkahp 6159 ?? 0:00.12 /System/Library/Frameworks/CryptoTokenKit.framework/ctkd -tw 6160 ?? 0:00.12 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6161 ?? 0:04.61 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeassetd 6166 ?? 0:00.29 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storedownloadd 6167 ?? 0:00.17 /System/Library/PrivateFrameworks/GeoServices.framework/geodMachServiceBridge 6172 ?? 0:00.21 /System/Library/PrivateFrameworks/PhotoLibraryPrivate.framework/Versions/A/Support/photolibraryd 6173 ?? 0:08.77 /System/Library/CoreServices/Dock.app/Contents/XPCServices/com.apple.dock.extra.xpc/Contents/MacOS/com.apple.dock.extra 6176 ?? 0:00.11 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6177 ?? 0:00.18 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storelegacy 6183 ?? 84:15.67 /System/Library/Frameworks/InputMethodKit.framework/Resources/imklaunchagent 6186 ?? 0:00.21 /usr/libexec/SafariNotificationAgent 6190 ?? 4:16.30 /System/Library/Input Methods/JapaneseIM.app/Contents/PlugIns/JapaneseIM.appex/Contents/MacOS/JapaneseIM 6192 ?? 27:23.79 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.Networking.xpc/Contents/MacOS/com.apple.WebKit.Networking 6202 ?? 0:03.67 /System/Library/CoreServices/mapspushd 6222 ?? 0:00.15 /System/Library/PrivateFrameworks/CoreWLANKit.framework/Versions/A/XPCServices/WiFiProxy.xpc/Contents/MacOS/WiFiProxy 6240 ?? 0:00.54 /System/Library/PrivateFrameworks/MessagesKit.framework/Resources/soagent.app/Contents/MacOS/soagent 6245 ?? 0:03.16 /System/Library/CoreServices/AppleIDAuthAgent 6246 ?? 0:00.26 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/maspushagent 6247 ?? 0:00.55 /usr/libexec/keyboardservicesd 6248 ?? 0:00.20 /System/Library/PrivateFrameworks/AskPermission.framework/Versions/A/Resources/askpermissiond 6273 ?? 0:00.38 /System/Library/PrivateFrameworks/AssistantServices.framework/assistantd 6274 ?? 0:08.59 /System/Library/CoreServices/FolderActionsDispatcher.app/Contents/MacOS/FolderActionsDispatcher 6276 ?? 0:00.16 /usr/libexec/spindump_agent 6279 ?? 0:00.23 /System/Library/CoreServices/SocialPushAgent.app/Contents/MacOS/SocialPushAgent 6282 ?? 5:20.91 /Library/Printers/Canon/CUPS_SFP/BackGrounder/Canon CUPSSFP BackGrounder.app/Contents/MacOS/Canon CUPSSFP BackGrounder 6284 ?? 50:49.74 /Library/Application Support/EPSON/Scanner/ScannerMonitor/Epson Scanner Monitor.app/Contents/MacOS/Epson Scanner Monitor 6285 ?? 157:59.55 /System/Library/CoreServices/NotificationCenter.app/Contents/MacOS/NotificationCenter 6287 ?? 0:08.52 /Library/Printers/Brother/Utilities/Server/LOGINserver.app/Contents/MacOS/LOGINserver 6289 ?? 0:08.35 /Applications/Epson Software/Epson Low Ink Reminder.app/Contents/EpsonLowInkReminderAgent.app/Contents/MacOS/EpsonLowInkReminderAgent 6292 ?? 0:11.65 /System/Library/CoreServices/AirPlayUIAgent.app/Contents/MacOS/AirPlayUIAgent --launchd 6293 ?? 0:12.33 /System/Library/CoreServices/cloudpaird 6295 ?? 0:09.01 /System/Library/PrivateFrameworks/Noticeboard.framework/Versions/A/Resources/nbagent.app/Contents/MacOS/nbagent 6297 ?? 0:09.00 /System/Library/CoreServices/WiFiAgent.app/Contents/MacOS/WiFiAgent 6298 ?? 0:00.88 /System/Library/CoreServices/diagnostics_agent 6302 ?? 0:09.20 /System/Library/CoreServices/Menu Extras/TextInput.menu/Contents/SharedSupport/TISwitcher.app/Contents/MacOS/TISwitcher 6306 ?? 0:00.12 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6310 ?? 2:22.87 /Applications/ESET Endpoint Antivirus.app/Contents/MacOS/esets_gui 6312 ?? 0:00.18 /System/Library/PrivateFrameworks/CallHistory.framework/Support/CallHistoryPluginHelper 6316 ?? 0:06.03 /usr/libexec/WiFiVelocityAgent 6317 ?? 0:00.13 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6321 ?? 0:00.21 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/XPCServices/com.apple.CommerceKit.TransactionService.xpc/Contents/MacOS/com.apple.CommerceKit.TransactionService 6322 ?? 0:10.45 /System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.Networking.xpc/Contents/MacOS/com.apple.WebKit.Networking 6323 ?? 0:11.66 /System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 6335 ?? 0:10.33 /System/Library/PrivateFrameworks/ViewBridge.framework/Versions/A/XPCServices/ViewBridgeAuxiliary.xpc/Contents/MacOS/ViewBridgeAuxiliary 6338 ?? 0:11.43 /System/Library/PreferencePanes/Security.prefPane/Contents/XPCServices/com.apple.preference.security.remoteservice.xpc/Contents/MacOS/com.apple.preference.security.remoteservice 6339 ?? 0:05.36 /Applications/iTunes.app/Contents/MacOS/iTunesHelper.app/Contents/MacOS/iTunesHelper 6341 ?? 0:07.33 /Library/Printers/Brother/Utilities/Server/USBserver.app/Contents/MacOS/USBserver 6342 ?? 15:00.53 /Applications/.esets/Contents/Helpers/esets_tray.app/Contents/MacOS/esets_tray 6343 ?? 0:08.78 /Applications/VMware Fusion.app/Contents/Library/VMware Fusion Start Menu.app/Contents/MacOS/VMware Fusion Start Menu 6346 ?? 0:08.15 /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesisServer.app/Contents/MacOS/SpeechSynthesisServer launchd 6349 ?? 0:00.09 /usr/libexec/diskmanagementd 6350 ?? 0:00.25 /System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Resources/storeinappd 6355 ?? 0:20.22 /Library/Printers/Brother/Utilities/Server/NETserver.app/Contents/MacOS/NETserver 6360 ?? 0:00.18 /Users/administrator/Library/Application Support/Google/Android File Transfer/Android File Transfer Agent.app/Contents/MacOS/Android File Transfer Agent 6362 ?? 0:00.14 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6366 ?? 0:00.13 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6367 ?? 0:07.03 /System/Library/Services/AppleSpell.service/Contents/MacOS/AppleSpell 6370 ?? 0:00.15 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6371 ?? 0:00.18 /System/Library/CoreServices/Software Update.app/Contents/Resources/softwareupdate_notify_agent 6386 ?? 0:00.16 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6399 ?? 0:00.11 /usr/libexec/loginitemregisterd 6406 ?? 0:00.56 /System/Library/CoreServices/ScopedBookmarkAgent 6420 ?? 0:00.18 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6425 ?? 0:00.30 /System/Library/StagedFrameworks/Safari/SafariShared.framework/Versions/A/XPCServices/com.apple.Safari.ImageDecoder.xpc/Contents/MacOS/com.apple.Safari.ImageDecoder 6426 ?? 0:13.61 /System/Library/StagedFrameworks/Safari/SafariShared.framework/Versions/A/XPCServices/com.apple.Safari.SearchHelper.xpc/Contents/MacOS/com.apple.Safari.SearchHelper 6428 ?? 0:08.36 /System/Library/PrivateFrameworks/SafariSafeBrowsing.framework/com.apple.Safari.SafeBrowsing.Service 6429 ?? 0:30.18 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.Storage.xpc/Contents/MacOS/com.apple.WebKit.Storage 6430 ?? 0:51.43 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 6482 ?? 0:00.08 /System/Library/PrivateFrameworks/KerberosHelper/Helpers/DiskUnmountWatcher 6500 ?? 0:13.95 /System/Library/PreferencePanes/Sound.prefPane/Contents/XPCServices/com.apple.preference.sound.remoteservice.xpc/Contents/MacOS/com.apple.preference.sound.remoteservice 6501 ?? 0:00.12 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6506 ?? 0:13.17 /System/Library/Frameworks/Foundation.framework/Versions/C/XPCServices/LookupViewService.xpc/Contents/MacOS/LookupViewService 6541 ?? 24:58.06 /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/com.apple.appkit.xpc.openAndSavePanelService.xpc/Contents/MacOS/com.apple.appkit.xpc.openAndSavePanelService 6567 ?? 0:00.12 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper 6569 ?? 121:41.56 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 6570 ?? 0:00.17 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper 6572 ?? 0:00.17 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.ComponentHelper.xpc/Contents/MacOS/com.apple.audio.ComponentHelper 6579 ?? 0:00.10 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6604 ?? 0:00.15 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 6642 ?? 0:00.32 /System/Library/PrivateFrameworks/DiskImages.framework/Resources/diskimages-helper -uuid 713AE564-9CB3-4F03-85CD-A7AE002705CE -post-exec 4 6649 ?? 0:00.08 /System/Library/PrivateFrameworks/DiskImages.framework/Resources/hdiejectd 6669 ?? 0:10.84 /System/Library/CoreServices/Installer.app/Contents/MacOS/Installer -psn_0_11012736 6670 ?? 0:00.14 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 7126 ?? 0:00.34 /System/Library/CoreServices/EscrowSecurityAlert.app/Contents/MacOS/EscrowSecurityAlert 7127 ?? 0:00.23 /System/Library/PrivateFrameworks/ProtectedCloudStorage.framework/Helpers/ProtectedCloudKeySyncing 7129 ?? 0:00.16 /System/Library/PrivateFrameworks/StorageManagement.framework/Resources/diskspaced 7162 ?? 0:00.34 /System/Library/PrivateFrameworks/AssistantServices.framework/Versions/A/XPCServices/media-indexer.xpc/Contents/MacOS/media-indexer 7182 ?? 0:00.21 /Library/Frameworks/iTunesLibrary.framework/Versions/A/XPCServices/com.apple.iTunesLibraryService.xpc/Contents/MacOS/com.apple.iTunesLibraryService 7255 ?? 0:43.05 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 7256 ?? 0:00.11 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 7288 ?? 0:27.43 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 7298 ?? 0:20.17 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 7382 ?? 0:10.00 /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/com.apple.appkit.xpc.openAndSavePanelService.xpc/Contents/MacOS/com.apple.appkit.xpc.openAndSavePanelService 7687 ?? 12:47.94 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 7688 ?? 0:00.28 /System/Library/Frameworks/VideoToolbox.framework/Versions/A/XPCServices/VTDecoderXPCService.xpc/Contents/MacOS/VTDecoderXPCService 7689 ?? 0:00.09 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.SandboxHelper.xpc/Contents/MacOS/com.apple.audio.SandboxHelper 7690 ?? 0:00.11 /System/Library/Frameworks/AudioToolbox.framework/XPCServices/com.apple.audio.ComponentHelper.xpc/Contents/MacOS/com.apple.audio.ComponentHelper 7691 ?? 0:25.75 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 7708 ?? 0:00.10 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 7753 ?? 1:20.67 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 8359 ?? 0:02.15 /System/Library/PrivateFrameworks/DiskImages.framework/Resources/diskimages-helper -uuid A74A30DC-3B98-48E3-8D1D-36A2A634A4B0 -post-exec 4 8411 ?? 0:00.23 /usr/libexec/SafariPlugInUpdateNotifier 8451 ?? 0:02.99 /System/Library/PrivateFrameworks/DiskImages.framework/Resources/diskimages-helper -uuid 9285AE26-1621-4BEA-92AB-9D577AA8DC1C -post-exec 4 10483 ?? 0:51.30 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10484 ?? 0:04.07 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10689 ?? 0:05.18 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10720 ?? 0:01.42 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10721 ?? 0:00.09 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 10722 ?? 0:03.92 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10723 ?? 0:05.66 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10724 ?? 0:00.09 /System/Library/Frameworks/Metal.framework/Versions/A/XPCServices/MTLCompilerService.xpc/Contents/MacOS/MTLCompilerService 10725 ?? 0:06.19 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10735 ?? 0:00.28 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10736 ?? 0:00.21 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10737 ?? 0:00.19 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10738 ?? 0:00.22 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10745 ?? 0:00.14 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10746 ?? 0:00.13 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10747 ?? 0:00.68 /System/Library/CoreServices/CoreServicesUIAgent.app/Contents/MacOS/CoreServicesUIAgent 10749 ?? 0:23.24 /Applications/Docker.app/Contents/MacOS/Docker 10781 ?? 0:00.19 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10782 ?? 0:00.16 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.shared 10797 ?? 0:03.88 /Applications/Preview.app/Contents/MacOS/Preview 10800 ?? 0:03.49 /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/com.apple.appkit.xpc.openAndSavePanelService.xpc/Contents/MacOS/com.apple.appkit.xpc.openAndSavePanelService 10802 ?? 0:00.13 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdwrite 10862 ?? 0:00.15 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker -c MDSImporterWorker -m com.apple.mdworker.single 10919 ?? 0:04.10 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10920 ?? 0:13.76 /System/Library/StagedFrameworks/Safari/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent 10921 ?? 0:00.42 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker32 -s mdworker-lsb -c MDSImporterWorker -m com.apple.mdworker.32bit 10922 ?? 0:00.42 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker32 -s mdworker-lsb -c MDSImporterWorker -m com.apple.mdworker.32bit 10923 ?? 0:00.12 /System/Library/PrivateFrameworks/XprotectFramework.framework/Versions/A/XPCServices/XprotectService.xpc/Contents/MacOS/XprotectService 10924 ?? 0:00.32 /System/Library/PrivateFrameworks/RemoteViewServices.framework/XPCServices/com.apple.security.pboxd.xpc/Contents/MacOS/com.apple.security.pboxd 10925 ?? 0:00.11 /System/Library/Frameworks/ApplicationServices.framework/Frameworks/PrintCore.framework/Versions/A/printtool agent 14221 ?? 0:00.83 /usr/sbin/cfprefsd agent 14222 ?? 0:00.90 /usr/libexec/lsd 14223 ?? 1:06.36 /usr/libexec/trustd --agent 14224 ?? 1:08.62 /usr/sbin/distnoted agent 16252 ?? 0:00.83 /usr/sbin/cfprefsd agent 19178 ?? 19:01.09 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Support/mds 19368 ?? 4:57.00 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds_stores 32192 ?? 1:00.29 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker-sizing -c MDSSizingWorker -m com.apple.mdworker.sizing 55043 ?? 0:00.82 /usr/sbin/cfprefsd agent 55044 ?? 1:06.15 /usr/sbin/distnoted agent 55047 ?? 0:00.81 /usr/sbin/cfprefsd agent 55054 ?? 1:04.12 /usr/sbin/distnoted agent 55057 ?? 0:07.05 /usr/libexec/lsd 55059 ?? 1:03.79 /usr/libexec/trustd --agent 55060 ?? 0:07.06 /usr/libexec/lsd 55061 ?? 1:03.95 /usr/libexec/trustd --agent 55068 ?? 0:06.64 /usr/libexec/lsd 55069 ?? 1:03.67 /usr/libexec/trustd --agent 57037 ?? 1:04.88 /usr/sbin/distnoted agent 95570 ?? 0:00.54 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker -s mdworker-sizing -c MDSSizingWorker -m com.apple.mdworker.sizing 6178 ttys000 0:00.11 login -pfl administrator /bin/bash -c exec -la bash /bin/bash 6189 ttys000 0:00.15 -bash 10966 ttys000 0:00.01 ps -ax
- 投稿日:2019-10-11T04:11:01+09:00
Infrastructure as Code (IaC)
Why?
- Windowsに色んなソフトウェア入れていったら途中で動かなくなった
- 手順書?そんなもの残せるわけないじゃん?
- Linuxシステムの色んな所にPythonが入っていて、しかも消して良いか分からん
- anacondaとか色々あってそれぞれのチュートリアルしてたらたくさん入ってる...
- 設定ファイルにredisと書いたらRedisが、postgresと書いたらPostgreSQLが起動して欲しい
Immutable Infrastructure
- 構築したら手順書なんて書かないので逆に手順書から環境を構築する
- 直接システムに環境を構築すると、手動でまた変なことをしてしまう
- 一回使ったら消して新しく作り直したらいつも同じ!
- すぐ消すので実機じゃなくて仮想マシンとして構築したい
Docker
- Hyper-V, KVM等のハイパーバイザーの仮想マシン作るのはコストがかかる
- 仮想ファイルシステムとOSリソースの管理だけしてくれたら十分
- 仮想マシンは簡単にダウンロード・アップロード出来て欲しい
- Linux container / Windows Server container
Dockerfile
- 独自の手順書フォーマット
# docker.ioからubuntuコンテナを取ってきてベースにする FROM ubnuntu # ビルドに必要なライブラリをインストール RUN apt install -y curl g++ make git cmake # GitHubからダウンロードしてビルドしてインストール RUN git clone http://github.com/grpc/grpc \ && cd grpc \ && cmake -Bbuild -H. -DCMAKE_INSTALL_PREFIX=/usr \ && cmake --build build --target install # これで/usrにgrpcがインストールされたubuntuが出来上がる
- 構築したコンテナに名前を付けて管理する
docker build . --tag grpc-ubuntu
Continuous Integration (CI)
- どのコードで・どの環境で・どの条件でテストされているのか分からなくなる
- Docker内でテストを実行すればいつでもDockerfileに書いた通りの環境が使える
- ユーザーも同じ環境が簡単に用意できる
- すぐにどこでも環境を自動的に用意出来るので、GitにPushするだけで環境構築からテストまでやってくれる
- OSSだと無料で使えるところが多い(Travis CI, Circle CI, Azure Pipeline, ...)
- 課金で大量のサーバーを使えるようになる(Circle CI, Google Cloud Build, ...)
Continuous Delivery/Deployment (CD)
- 本番・テスト環境へのデプロイも自動でやってほしい
- コンテナ環境を常に使うことで、本番もテストも同じ環境で行うのでデプロイ時のエラーを防ぎやすい
CIOps
- Git Pushのイベントでデプロイを行う
- Heroku / GitLab Pages
GitOps
- 常にGitリポジトリを監視し、その定義通りになるようにシステムを更新していく
- より複雑なデプロイに対応できる(ローリングリリース、カナリアリリース)
- Kubernetes (Deployment, ...)