Redmineプラグインもくもく会 山梨 #004回 開発環境
(まだ)開発環境の続きです。(遅い・・・(^_^;) )
DockerCompose
・Dockerツール群の一つであるDockerComposeを使うと、コンテナ立ち上げ設定をファイル化(yml形式)して管理することが可能になります。 ・docker-compose で起動する場合は、Dockerfileを使ってイメージを作成します。
Docker Composeについてもほんの少し(汗)勉強しました。
Docker お勉強 04 Docker Compose - sioaji2012のブログ
対象の docker-compose.yml はこちら。
version: '3' services: # start service for redmine with plugin # 1. $ docker-compose build --force-rm --no-cache # 2. $ docker-compose up -d # # If you want to change Redmine's version, # # 1. $ REDMINE_VERSION=master docker-compose build --force-rm --no-cache # 2. $ docker-compose up -d # # web: build: context: . args: REDMINE_VERSION: $REDMINE_VERSION image: redmine_sqlite3 container_name: redmine_sqlite3 command: > bash -c "bundle exec rake redmine:plugins:migrate && bundle exec rails s -p 3000 -b '0.0.0.0'" environment: RAILS_ENV: development volumes: - ./plugins:/tmp/redmine/plugins ports: - "3000:3000"
勉強不足ですが、少しだけ説明書いてみます。
★今の最新は compose Ver3 version: '3' ★『WEB』というサービス名となる services: web: ★構築時に適用するオプションを指定 build: ★Dockerfile があるパス(や Git URL)を指定 → カレントDIR context: . ★構築時の引数指定 args: REDMINE_VERSION: $REDMINE_VERSION ★ローカルのimageから検索して、なけれ DockerHubからの取得を試みる。 (buildを指定した場合は構築する) image: redmine_sqlite3 ★カスタム・コンテナ名 container_name: redmine_sqlite3 ★デフォルトのコマンドを上書きする ★DockerFileはrailsサーバー起動のみで、 こちらはpluginマイグレードを追加したコマンドにしてる。 ★docker run だとプラグインなしでRedmine起動。 composeはプラグインつき起動になる。 command: > bash -c "bundle exec rake redmine:plugins:migrate && bundle exec rails s -p 3000 -b '0.0.0.0'" ★環境変数を追加する environment: RAILS_ENV: development ★コンテナ内にマウントするボリュームを指定する( ホスト:コンテナ ) ★コンテナ内は、Redmineの標準pluginsフォルダ ★ホスト側は、カレントDirにpluginsというフォルダを作っている。 MAC側でこの中にpluginソースを配置して開発する。 volumes: - ./plugins:/tmp/redmine/plugins ★公開用のポートを指定する(ホスト側:コンテナ側) ports: - "3000:3000"
実行オプション docker-compose build
REDMINE_VERSION=3.3.2 docker-compose build --no-cache docker-compose up -d
こちらも少しだけ説明してみます。
★引数を指定 REDMINE_VERSION=3.3.2 ★構築する build オプション: --force-rm 常に中間コンテナを削除 --no-cache 構築時にイメージのキャッシュを使わない ★こちら --pull 常に新しいバージョンのイメージ取得を試みる REDMINE_VERSION=3.3.2 docker-compose build --no-cache ★サービス用のコンテナの構築、作成、起動、アタッチを行う:up オプション: -d デタッチド・モード: バックグラウンドでコンテナを実行し、新しいコンテナ名を表示 docker-compose up -d
Dockerファイルを基本に適時Compose側の設定で構築・起動していく感じでしょうか。
以上が、DockerComposeの簡単な説明になります。
(もし余裕が出来たらDockerをもっと勉強しなくては。。。その前にRuby On Railsもですが。。。)
build結果
最後の方のログ (Dockerfileのdb:migrate終わったあたりから)
コマンドのステップありますが、実行されていない状態だと思います。
== 20160529063352 AddRolesSettings: migrated (0.0005s) ======================== Removing intermediate container 244ba24cd9b2 ---> f7771e68733e Step 13/15 : RUN bundle exec rake generate_secret_token ---> Running in 81f23bf15e13 Removing intermediate container 81f23bf15e13 ---> 4e49572fc819 Step 14/15 : CMD bundle exec rails s -p 3000 -b '0.0.0.0' ---> Running in 0fc6f20e4369 Removing intermediate container 0fc6f20e4369 ---> 41e55eadecaa Step 15/15 : EXPOSE 3000 ---> Running in 8b167069180b Removing intermediate container 8b167069180b ---> 2315b3a0cca7 Successfully built 2315b3a0cca7 Successfully tagged redmine_sqlite3:latest
起動 (docker-compose up -d)
mbp:redmine_my_plugin sioaji$ docker-compose up -d WARNING: The REDMINE_VERSION variable is not set. Defaulting to a blank string. Recreating redmine_sqlite3 ... done
起動したコンテナの確認(docker ps)
mbp:redmine_my_plugin sioaji$ docker ps CONTAINER ID IMAGE COMMAND CREATED c288f733f5dc redmine_sqlite3 "bash -c 'bundle exe…" About a minute ago STATUS PORTS NAMES Up About a minute 0.0.0.0:3000->3000/tcp redmine_sqlite3
注意する事がありました。
同じことを何回もやると、古いイメージデータが名無しで残り続ける(HDD容量減る)ので注意。
今のイメージ(ID = 2315b3a0cca7)
mbp:redmine_my_plugin sioaji$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE redmine_sqlite3 latest 2315b3a0cca7 16 minutes ago 937MB
2回目のイメージ(ID = 420c17967e35)
ID = 2315b3a0cca7 は名無しで残り続ける。(タグがついていない)
mbp:redmine_my_plugin sioaji$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE redmine_sqlite3 latest 420c17967e35 4 minutes ago 937MB <none> <none> 2315b3a0cca7 23 minutes ago 937MB
不要なイメージを消す
docker rmi イメージID
$ docker rmi 2315b3a0cca7
もくもくで使いそうなDockerコマンド
殴り書きですが、使いそうなコマンドを書いておきます。
http://localhost:3000 ------------------------------------------------------------ /* 基本 */ ------------------------------------------------------------ $ docker-compose build $ docker-compose up -d ------------------------------------------------------------ /* バージョン指定 */ ------------------------------------------------------------ Dockerfile FROM ruby:2.2.2 $ REDMINE_VERSION=3.3.2 docker-compose build --no-cache $ docker-compose up -d ------------------------------------------------------------ /* 構築済みのイメージを起動する */ ------------------------------------------------------------ ■ docker start コンテナ $ docker start redmine_sqlite3 ■ docker stop コンテナ ------------------------------------------------------------ /* 作ったドッカー内に入る */ ------------------------------------------------------------ ■ docker exec -it 名前など /bin/bash -i : Interactive -t: terminal $ docker exec -it redmine_sqlite3 /bin/bash ------------------------------------------------------------ /* コンテナを外から止めるか中から止めるか */ ------------------------------------------------------------ ■ 中から止める exitでコンテナから抜けた時のコンテナ起動→接続 $ sudo docker start <コンテナID> $ sudo docker attach <コンテナID> ctrl+p -> ctrl+q で抜けるとdockerコンテナは起動したまま、抜けられる $ sudo docker attach <コンテナID> で再入場 ■ 外から止める $ sudo docker stop <コンテナID> $ sudo docker start <コンテナID> $ sudo docker stop redmine_sqlite3 ------------------------------------------------------------ /* 作業中のコンテナをイメージとして保存する */ ------------------------------------------------------------ ■ docker commit 名前など 保存イメージ名 $ docker commit redmine_sqlite3 create_ticket ⬇ イメージ一覧で確認 $ docker images ------------------------------------------------------------ /* コンテナ消す */ ------------------------------------------------------------ $ docker rm コンテナIDとか名前していする - docker start: コンテナを起動する - docker stop : コンテナを止める(コンテナプロセスにSIGTERMを送信して一定時間経過後にSIGKILLを送信、デフォルトは10秒後) - docker kill : コンテナを止める(直ちにSIGKILLを送信) - docker rm : 停止状態のコンテナを削除 - docker rm -f : 起動状態のコンテナも削除 - docker ps -aq | xargs docker rm -f : 全部のコンテナをまとめてrm or - docker rm -f 'docker -aq' ------------------------------------------------------------ /* イメージ消す */ ------------------------------------------------------------ $ docker rmi <IMAGE ID> ■未使用イメージ一括削除 $ docker image prune ■タグがついていないイメージをすべて削除する docker rmi $(docker images -f 'dangling=true' -q) ------------------------------------------------------------ /* docker run */ ------------------------------------------------------------ ■名前つける $ sudo docker run -it --name infra-workshop-sioaji centos $ sudo docker rename 変更前の名前 変更後お名前 ■docker run -v のお話 -v : volume $ sudo docker run -it --name "mamy1326" -v /home/psuser:/home/test centos [option] image [command] を守ればオプションの順番は問われないと思いますー イメージ名は最後 参考:Docker の Data Volume まわりを整理する https://qiita.com/lciel/items/e21a4ede3bac7fb3ec5a ■ 起動したコンテナのIPを知らべる # for cname in $(docker ps |grep -v NAMES|awk '{print $1}'); do echo -n "${cname} ";docker inspect -format="{{ .NetworkSettings.IPAddress }}" ${cname}; done 00c5ccb98f17 ormat=172.17.0.8 39d0cd55f2f3 ormat=172.17.0.7 bf091cc5eafa ormat=172.17.0.6 4b2898c6f5a0 ormat=172.17.0.5 08d6607d8676 ormat=172.17.0.4 cb8719479fd3 ormat=172.17.0.3 dac5fd5ff2e9 ormat=172.17.0.2
今回は以上でした。
このままで、コンテナのrailsを再起動する方法がわかりませんでした。どうやってやるのかな。
developmentなので、再起動不要らしいのですが。。。
次回からは、以前ハンズオンでちんぷんかんぷんだったプラグインを写経してみようと思います。