- 投稿日:2020-05-28T23:41:13+09:00
docker、cakePHP、apache、mysqlの作りました!
はじめに
今回githubの方にまとめる形をとってみました!!
手順まとめてあるので以下見てください!
ちなみにDockerコマンド打てるところからお願いします!
打てない場合『困ったときは以下も』の一番上のリンクから行う形になるかんじです!https://github.com/sachiko-kame/docker_cakePHP_mysql_apache_1
一応:
php:7.4
mysql:8
cakePHP:4.0.8困ったときは以下も
全部自分の記事です!
Dockerの大まかなイメージから自分が作成したものをDockerhubにあげて、インストールして実行まで
[Docker][apache][CakePHP]The requested URL was not found on this server.
とりあえずhtmlの表示をDocker使って行う[apacheバージョン]
実は
行う処理をもっと少なくしたいけど今のところまだ出来ていない感じです、、、
手作業が多いのがネックではあります、、、
なんかいい方法教えてください?♀️ただ結構シンプルにしたので何を行っているかなどはわかりやすいのではないかと思っています!
なのでqiitaに載せました!!←載せる理由を作成する必要があると思ってい、ま、す。
- 投稿日:2020-05-28T23:37:45+09:00
MacでARM用Dockerイメージを作成する
dockerのExperimental機能であるbuildxを利用すると、異なるCPUアーキテクチャ用のDockerイメージを作ることができます。
今までは、ARM用のDockerイメージを作るためにはARM用のマシンでDockerイメージをbuildする必要がありましたが、
buildxを利用することでローカルで作業を完結させることができるようになりました。環境用意
まずはインストール済みのDocker Desktopのバージョンが以下であることを確認します。
- Docker Desktop Version 2.0.4.0 (33772) 以上
また、buildxはExperimental機能のため利用するために以下のように設定ファイルを編集する必要があります。
$HOME/.docker/config.json
{ "stackOrchestrator" : "swarm", "credsStore" : "desktop", "experimental" : "disabled", "auths" : { "787080764332.dkr.ecr.ap-northeast-1.amazonaws.com" : { }, "https://index.docker.io/v1/" : { } }, "HttpHeaders" : { "User-Agent" : "Docker-Client/19.03.5 (darwin)" }, "experimental": "enabled" <-- ここを追加 }次にbuild用のコンテナを作成していきます。
$ docker buildx create --name buildarm --platform linux/arm64 --use $ docker buildx use buildarm $ docker buildx inspect --bootstrap [+] Building 0.8s (1/1) FINISHED => [internal] booting buildkit 0.8s => => starting container buildx_buildkit_buildarm0 0.8s Name: buildarm Driver: docker-container Nodes: Name: buildarm0 Endpoint: unix:///var/run/docker.sock Status: running Platforms: linux/arm64, linux/amd64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6これでARM用のDockerイメージを作る準備ができました。
Dockerイメージを作成
ここではテスト用に簡易的なDockerfileを用意してbuildしていきます。
$ mkdir test && cd test && cat <<EOF > Dockerfile FROM ubuntu RUN apt-get update && apt-get install -y curl WORKDIR /src COPY . . EOF以下イメージ作成になります。
$ docker buildx build --platform linux/arm/v7 -t test-buildx --load . [+] Building 8.3s (10/10) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 31B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ubuntu:latest 4.7s => [internal] load build context 0.0s => => transferring context: 31B 0.0s => [1/4] FROM docker.io/library/ubuntu@sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7 0.0s => => resolve docker.io/library/ubuntu@sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7 0.0s => CACHED [2/4] RUN apt-get update && apt-get install -y curl 0.0s => CACHED [3/4] WORKDIR /src 0.0s => CACHED [4/4] COPY . . 0.0s => exporting to oci image format 3.4s => => exporting layers 0.0s => => exporting manifest sha256:75f5df7b0a817b040d8e06c4547c17734bf719ce038f91a0f59e4b379a0213b7 0.0s => => exporting config sha256:4815274966cce0c0f0ce84e54cd28b9ee02164bd1d3e4899578d1176e0388506 0.0s => => sending tarball 3.4s => importing to docker 0.0s $ docker images | grep test-buildx test-buildx latest 4815274966cc About an hour ago 82.1MB
- 投稿日:2020-05-28T22:53:32+09:00
Dockerでapt-get upgrade
はじめに
Dockerでイメージをビルドしようとすると、ユーザインタラクションを避ける必要があります。ところがapt-get upgrade したときのサービスのリスタートの確認では、一般につかわれている -y オプションをつけてもYes/Noの確認がでてしまいdocker build が停止してしまいます。
問題点
Dockerfile内でapt-upgradeすると、-yをつけようが--force-yesをつけようが--allow-downgradesをつけようが--allow-remove-essentialをつけようが--allow-change-held-packages をつけようが、以下のプロンプトが避けられない
Configuring libssl1.1:arm64 There are services installed on your system which need to be restarted when certain libraries, such as libpam, libc, and libssl, are upgraded. Since these restarts may cause interruptions of service for the system, you will normally be prompted on each upgrade for the list of services you wish to restart. You can choose this option to avoid being prompted; instead, all necessary restarts will be done for you automatically so you can avoid being asked questions on each library upgrade. Restart services during package upgrades without asking? [yes/no]で、これがでるとdocker build がとまって、どうしようもない感じ
解決策
debconf-set-selections
コマンドに設定をいれることでプロンプトのデフォルトの選択肢が選択できます。
'* libraries/restart-without-asking boolean true'をわたすことで、上記のプロンプトでとまるのを抑止できました。
Dockerfileに以下を設定RUN echo '* libraries/restart-without-asking boolean true' | debconf-set-selectionsでもって、このあとの
apt-get upgrade -y
では上記のプロンプトでは止まらなくなります。利用例
Darknetをビルド済なXavierNX/JetsonNANOのDockerイメージを作成でつくったイメージだと、apt-upgradeがおこなわれなくて、いろいろ起きますが、これで、apt-get updateとupgrade部分を自動化することができます。
FROM darknet:100 RUN apt-get -y update RUN echo '* libraries/restart-without-asking boolean true' | debconf-set-selections RUN apt-get -y upgrade RUN apt -y install xfce4-terminal CMD ["/bin/bash"]
- 投稿日:2020-05-28T22:23:17+09:00
CTF用にUbuntuのDocker Imageファイルを作成する
概要
バイナリ(実行ファイル)解析用PythonパッケージAngrを中心とした、CTF用のコマンド類をまとめてインストールしたコンテナを作って、Imageファイルにしておくと何かと便利かなと思ったので、作り方を記録しておく。
手順
以下の作業はWindows10上のVirtualBoxで稼働するUbuntuで検証。
Ubuntu上でUbuntuコンテナを作成
[端末]を起動し、以下のコマンドを実行。
docker run -it --name ubuntu_base ubuntuapt updateUbuntuコンテナにいろいろinstall
python3
apt install python3apt install python3-pipAngr
pip3 install angrイメージ作成
コンテナを停止し、状態を確認。Dockerイメージを作成
exit docker ps docker ps -a docker commit ubuntu_base ubuntu4ctf1作成結果を確認した後、イメージをファイルに出力。
出力ファイルを圧縮して、最終確認。docker images docker save ubuntu4ctf1 -o ubuntu4ctf1.tar zip ubuntu4ctf1.zip ubuntu4ctf1.tar ls -la ubuntu4ctf1*コマンド追加
とりあえず、できたみたいなので、コマンドを追加してみる。
コンテナの状態を確認してから、再度コンテナを起動。docker images docker ps docker ps -a docker run -it --name ubuntu4ctf1_base ubuntu4ctf1gdbの追加
apt install gdb
yを入力し[Enter]キーを押下。
6を入力し、[Enter]キーを押下。
[Enter]キーを押下。
79を入力し、[Enter]キーを押下。
その他
同じ要領で以下のコマンドをインストール
apt install strace apt install ltrace apt install netcat apt install curl apt install nmapイメージ作成
exit docker ps docker ps -a docker commit ubuntu4ctf1_base ubuntu4ctf2作成結果を確認後、イメージをファイルに出力
docker images docker save ubuntu4ctf2 -o ubuntu4ctf2.tar zip ubuntu4ctf2.zip ubuntu4ctf2.tar ls -la ubuntu4ctf2*イメージからコンテナを作成
mkdir d_share docker run -it --mount type=bind,src=$PWD/d_share,dst=/tmp/share --name ctf2 ubuntu4ctf2別マシンの別OS上で稼働
CentOS8をインストールした環境には、Dockerと互換のpodmanがインストールされている。
作成したコンテナが正しく動作するか検証する。以下の作業はWindows10上のVirtualBoxで稼働するCentOSで検証。
cp /tmp/ubuntu4ctf2.zip . unzip ubuntu4ctf2.zip podman images podman ps -apodman load -i ubuntu4ctf2.tar podman images podman ps -a podman run -it ubuntu4ctf2 python3 import angr exit()参考URL
- 投稿日:2020-05-28T20:59:46+09:00
Windows10 Update が来たので WSL2 で Ubuntu 20.04 LTS を起動し Docker をインストール
はじめに
本日 2020年05月28日に Windows10 2004 May 2020 Update が正式に来たみたいですね?
最近 PC を購入し、Linuxをデュアルブートでインストールしようと考えていたのですが、WSL2がもうすぐ来るというので待っていました。
今回の Windows Update で WSL2 が使えるようになるということだったので、「Ubuntu 20.04 LTS」を WSL2 で動かし、Docker をインストールして動作確認まで行いたいと思います?♀️
Windows10 2004 May 2020 Update
もう少し待てば Windows Update の更新確認にも出てくると思いますが、今回は Windows 10 のダウンロード サイトで更新しいています。
WSL2 のインストール
Windows PowerShell を管理者権限で実行します。
「Linux 用 Windows サブシステム」と「仮想マシンプラットホーム」の有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartWSL 2 Linux カーネルの更新
WSL 2 Linux カーネルの更新
で 最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロード しインストールWSLのデフォルトをWSL2に設定
wsl --set-default-version 2Ubuntu 20.04 LTS のダウンロード
Microsoft Storeで linux と検索し「Ubuntu 20.04 LTS」をインストール
バージョン確認
wsl --list --verboseバージョンが2になっていたらOK
Ubuntu 20.04 LTS の 起動
起動するとこの画面が出るのでユーザを登録すれば完了です。
Docker のインストール
Ubuntuにdockerをインストールする
を参考にしながらインストールしてみます。まず最新にします
sudo apt update sudo apt upgrade -y前提ソフトウェアをインストール
sudo apt install -y apt-transport-https ca-certificates curl software-properties-commondocker公式のGPG公開鍵をインストール
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -aptリポジトリの設定
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"docker と docker-compose インストール
sudo apt install -y docker-ce docker-composeすると GRUB install devices の確認画面が出ました
Vagrant環境でUbuntuをupgradeした際に起きるGRUBの問い合わせ
を確認してみましたが問題なさそうなのでそのまま Enter
Yesを選択で インストールは完了しましたdocker daemon を起動
sudo service docker startdockerグループに追加
sudo usermod -aG docker $USERグループ反映のため一度再起動します
起動確認
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES tdocker ps で上記のようにエラーがなければ インストール完了です。
動作確認をしてみます
ここは実際には行わなくても大丈夫です。
以前 Docker Desktop for Windows で Rocket.Chatを動かすと MongoDB が動かなくてエラーになっていたので、Rocket.Chatで確認してみたいと思います。
mkdir -p docker/rocketchat cd docker/rocketchat/ curl -L https://raw.githubusercontent.com/RocketChat/Rocket.Chat/develop/docker-compose.yml -o docker-compose.ymldocker-compose.ymlの中身を確認
docker-compose.ymlversion: '2' services: rocketchat: image: rocketchat/rocket.chat:latest command: > bash -c "for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)" restart: unless-stopped volumes: - ./uploads:/app/uploads environment: - PORT=3000 - ROOT_URL=http://localhost:3000 - MONGO_URL=mongodb://mongo:27017/rocketchat - MONGO_OPLOG_URL=mongodb://mongo:27017/local - MAIL_URL=smtp://smtp.email # - HTTP_PROXY=http://proxy.domain.com # - HTTPS_PROXY=http://proxy.domain.com depends_on: - mongo ports: - 3000:3000 labels: - "traefik.backend=rocketchat" - "traefik.frontend.rule=Host: your.domain.tld" mongo: image: mongo:4.0 restart: unless-stopped volumes: - ./data/db:/data/db #- ./data/dump:/dump command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1 labels: - "traefik.enable=false" # this container's job is just run the command to initialize the replica set. # it will run the command and remove himself (it will not stay running) mongo-init-replica: image: mongo:4.0 command: > bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \" rs.initiate({ _id: 'rs0', members: [ { _id: 0, host: 'localhost:27017' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)" depends_on: - mongo # hubot, the popular chatbot (add the bot user first and change the password before starting this image) hubot: image: rocketchat/hubot-rocketchat:latest restart: unless-stopped environment: - ROCKETCHAT_URL=rocketchat:3000 - ROCKETCHAT_ROOM=GENERAL - ROCKETCHAT_USER=bot - ROCKETCHAT_PASSWORD=botpassword - BOT_NAME=bot # you can add more scripts as you'd like here, they need to be installable by npm - EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics depends_on: - rocketchat labels: - "traefik.enable=false" volumes: - ./scripts:/home/hubot/scripts # this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier ports: - 3001:8080 #traefik: # image: traefik:latest # restart: unless-stopped # command: > # traefik # --docker # --acme=true # --acme.domains='your.domain.tld' # --acme.email='your@email.tld' # --acme.entrypoint=https # --acme.storagefile=acme.json # --defaultentrypoints=http # --defaultentrypoints=https # --entryPoints='Name:http Address::80 Redirect.EntryPoint:https' # --entryPoints='Name:https Address::443 TLS.Certificates:' # ports: # - 80:80 # - 443:443 # volumes: # - /var/run/docker.sock:/var/run/docker.sockそのまま実行してみます
docker-compose up -d動きましたね!!
まとめ
WSL2 で問題なく Docker が動かせそうですね。
MongoDB がいつから出来るようになったのかはよくわかっていませんが、とりあえず動いてよかったです?
Docker Desktop for Windows だと docker-compose.yml に書くパスを c:\ などと Windows 形式の絶対パスで書かないといけませんでしたが、WSL2 上で動かすと Linux 同様に書けて相対パスもいけるので、定義ファイルを分ける必要がなくなりましたね。
「Windwsキー」 + 「.」
で絵文字が打てるようになったのも少し面白いですね???
- 投稿日:2020-05-28T20:19:04+09:00
Django GirlsチュートリアルでつくったものでDockerfile作成
環境
macOS
Dockerfileの作成
Django Girlsチュートリアルでつくったもの
$ ls blog manage.py myvenv README.md db.sqlite3 mysite requirements.txtDocker Hubで使いたいイメージを探します。
公式のものなど、なるべく信頼できるイメージをつかいます。元になるイメージはpython:3.7-slim-busterを選びました。
Django起動時に打ち込んでいるコマンドを
Dockerfileに書き込んでいきます。$ vi DockerfileFROM python:3.7-slim-buster COPY . /app/ WORKDIR /app RUN pip3 install -r requirements.txt RUN python3 manage.py collectstatic --noinput CMD python3 manage.py runserver 0.0.0.0:8000Dockerの構築
任意でイメージ名やタグなどの指定をして
buildしてみます。$ docker build -t [イメージ名]:[タグ] . 例えば $ docker build -t djangogirls:0.1.0 .イメージの一覧を表示させます。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE djangogirls latest 53a38ee83c1a 24 minutes agoローカルで何か走っていないか確認?
Dockerを走らせる前に
心当たりがある場合は、ローカルで何か走っていないか確認します。
※特にローカルで走らせているものがなければ、以下読み飛ばしてもOKです。$ ps -ef | grep runserver 502 2437 479 0 土02PM ttys000 0:00.60 /Library/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python manage.py runserver 502 2438 2437 0 土02PM ttys000 58:01.79 /Library/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python manage.py runserver 502 26677 13920 0 3:55PM ttys003 0:00.01 grep runserver大まかに書くと
2437(子:Django) 479(親:shell) 2438(子:Python) 2437(親:Django) 26677 13920 => いま検索したgrepコマンドが走っているので無視shellは殺さず、2437を殺せば親のDjangoもろとも子の2438も死ぬので
ローカルで走りっぱなしでいたDjangoのrunserverをkillします。$ kill 2437killできたか確認。
$ ps -ef | grep runserver 502 26680 13920 0 3:55PM ttys003 0:00.01 grep runserverDocker run
Dockerを走らせます。
※djangogirls
はDocker ID
でもOK。$ docker run -it --rm -p djangogirls下記にアクセス
できた?
Tips (.dockerignore)
全体的に重かったので.dockerignoreを作成し、無視するファイルを指定します。
$ vi .dockerignore.dockerignoremyvenv db.sqlite3
myvenv
は仮想環境なので不要です。
db.sqlite3
はDockerに乗せるには今後重くなる可能性が高いので
もしデプロイする際にはMySQLなどを使っても良いかもです。
ちなみにDBをignoreで無視するとDockerを走らせた際に赤文字で
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, blog, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
このようにDBに問題ありなどと表示されます。
あえてignoreしている場合はスルーです。
- 投稿日:2020-05-28T18:57:12+09:00
rails: ActionView::Template::Error http error 500 対処法について
現在、ポートフォリオを作成している途中のゆーた(@onoblog)です。
そこそこ、ローカル環境で、ポートフォリオのデザインも整ってきたし、1回、デプロイしとこうかなと思い、デプロイしたときのエラーをまとめておきます。環境
- rails 5.2.3
- carrierwave
- fog-aws
- jquery-rails (4.3.5)
- vue/cli 4.1.2
- yarn 1.21.1
- webpacker (5.0.1)
- Docker 19.03.5
- docker-compose 1.25.2
- nginx 1.15.8
対処法
assetへのパイプラインを通してあげる設定にしてあげます。
config/enviroments/production.rbconfig.assets.compile = true状況
このように、デプロイしたものを表示しようとするとhttp error 500が起きてしまいました。
最初に、nginxのlogかawsのec2の設定を疑い、無駄な時間を使ってしまいました。
docker-compose -f staging.yml exec app tail -f log/production.logその後、上記コマンドで本番環境のログを見ると
ActionView::Template::Error
が起きている状況でした。原因
ローカル環境では、trueになっていたことにより、動的にコンパイルができていましたが、本番環境では、falseになってしまっていました。
precompileしていないファイルを動的にコンパイルするので、本番環境では、負荷がかかってしまうので、良くないと思いますが、一時的に、適宜変更します。
development production true false 参照
- 投稿日:2020-05-28T16:55:50+09:00
AWS CLI on dockerで死なないためのalias設定
.zshrcとか.bashrcなどに書いておく内容
長くなってしまいました。
変数評価のところをもうすこしきれいに書きたいのですが、動いているので一旦お披露目します。AWS_PAGER=cat alias aws='docker run --rm -ti \ -v ~/.aws:/root/.aws \ -v $(pwd):/aws \ -v ~/.ssh:/root/ssh \ $(for _e in AWS_PAGER AWS_ACCESS_KEY_ID AWS_CA_BUNDLE AWS_CONFIG_FILE AWS_DEFAULT_OUTPUT AWS_DEFAULT_REGION AWS_PROFILE AWS_ROLE_SESSION_NAME AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_SHARED_CREDENTIALS_FILE;\ do \ if [ "x$(eval echo \$$_e)" != "x" ];\ then \ echo -n " --env $(echo ${_e})=$(eval echo \$$_e) ";\ fi;\ done) \ amazon/aws-cli'経緯
AWS CLI v2になり、いくつかの理由により on docker で動かそうとしたところ以下のような挙動を確認し、こう動かしたいという要望を持ちました。
- cli_pager を ~/.aws/config に設定しているのに反映されてな差そうな挙動を示します。具体的にはless/moreのようなものが間に挟まっているように見えます。
- dockerコンテナに対して環境変数を可能な限り引き渡してあげたい(公式ドキュメントでは動作の確認のための最小限の利用方法のみの記載となっています)
cli_pager についてはあまり大きな問題になってないようなので、僕の端末環境に依存するものじゃないかと推測しています。
いずれにしても、
- 環境変数は全部引き渡したほうがよい
- pager を使わない = cat にすればいいんじゃね?
というような理由により、aws cli on docker における(そこそこ)気の利いたaliasを書いてみることにしました。
挙動の説明らしきもの
環境変数全部渡し
$for _e in ...
以降でAWS CLIが取り扱う変数を列挙し、設定が行われている場合にはdockerコンテナに対して環境変数を引き渡します。aws cliをdockerで動かすとcli_pagerを正しく評価しない?
~/.aws/config には
[default] region=us-west-2 output=json cli_pager=のような記述を行っていますが、どうしてもless(more?)を使いたいようです。
僕の意図した挙動ではないので、一行目でcat
をpagerとして指定しています。
別の何かをフィルタにする際には随時env pager="hoge" aws ...
のような手続きにすることとします。
- 投稿日:2020-05-28T16:04:29+09:00
bitcoindをdockerで動かしてみる
概要
bitcoind v0.19.1をalpine linux on dockerで動かしてみました
bitcoind周りのサービスをリファクタリングすることにしたので
その準備として、まずは、2020/5/28現在で、最新のbitcoinのバージョン(v0.19.1)のものを
Dockerでビルドして動かしてみることにしました。せっかくなので、alpine linuxを使って小さめなサイズになるように工夫しました。
実施事項
まずは、以下のDockerfileを作成しました。
Dockerfile
FROM alpine as berkeley-db RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/alpine.global.ssl.fastly.net/g' /etc/apk/repositories RUN apk --no-cache add autoconf RUN apk --no-cache add automake RUN apk --no-cache add build-base RUN apk --no-cache add libressl ENV BERKELEYDB_VERSION=db-4.8.30.NC ENV BERKELEYDB_PREFIX=/opt/${BERKELEYDB_VERSION} RUN wget https://download.oracle.com/berkeley-db/${BERKELEYDB_VERSION}.tar.gz RUN tar -xzf *.tar.gz RUN sed s/__atomic_compare_exchange/__atomic_compare_exchange_db/g -i ${BERKELEYDB_VERSION}/dbinc/atomic.h RUN mkdir -p ${BERKELEYDB_PREFIX} WORKDIR /${BERKELEYDB_VERSION}/build_unix RUN ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=${BERKELEYDB_PREFIX} RUN make -j4 RUN make install RUN rm -rf ${BERKELEYDB_PREFIX}/docs FROM alpine as bitcoin-core # copy berkeley-db from berkeley-db COPY --from=berkeley-db /opt /opt RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/alpine.global.ssl.fastly.net/g' /etc/apk/repositories RUN apk --no-cache add autoconf RUN apk --no-cache add automake RUN apk --no-cache add boost-dev RUN apk --no-cache add build-base RUN apk --no-cache add chrpath RUN apk --no-cache add file RUN apk --no-cache add gnupg RUN apk --no-cache add libevent-dev RUN apk --no-cache add libressl RUN apk --no-cache add libressl-dev RUN apk --no-cache add libtool RUN apk --no-cache add linux-headers RUN apk --no-cache add protobuf-dev RUN apk --no-cache add zeromq-dev RUN set -ex \ && for key in \ 90C8019E36C2E964 \ ; do \ gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key" || \ gpg --batch --keyserver pgp.mit.edu --recv-keys "$key" || \ gpg --batch --keyserver keyserver.pgp.com --recv-keys "$key" || \ gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" || \ gpg --batch --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys "$key" ; \ done ENV BITCOIN_VERSION=0.19.1 ENV BITCOIN_PREFIX=/opt/bitcoin-${BITCOIN_VERSION} RUN wget https://bitcoin.org/bin/bitcoin-core-${BITCOIN_VERSION}/SHA256SUMS.asc RUN wget https://bitcoin.org/bin/bitcoin-core-${BITCOIN_VERSION}/bitcoin-${BITCOIN_VERSION}.tar.gz RUN gpg --verify SHA256SUMS.asc RUN grep " bitcoin-${BITCOIN_VERSION}.tar.gz\$" SHA256SUMS.asc | sha256sum -c - RUN tar -xzf *.tar.gz WORKDIR /bitcoin-${BITCOIN_VERSION} RUN sed -i '/AC_PREREQ/a\AR_FLAGS=cr' src/univalue/configure.ac RUN sed -i '/AX_PROG_CC_FOR_BUILD/a\AR_FLAGS=cr' src/secp256k1/configure.ac RUN sed -i s:sys/fcntl.h:fcntl.h: src/compat.h RUN ./autogen.sh RUN ./configure LDFLAGS=-L`ls -d /opt/db*`/lib/ CPPFLAGS=-I`ls -d /opt/db*`/include/ \ --prefix=${BITCOIN_PREFIX} \ --mandir=/usr/share/man \ --disable-tests \ --disable-bench \ --disable-ccache \ --with-gui=no \ --with-utils \ --with-libs \ --with-daemon RUN make -j4 RUN make install # delete symbols from executables for security RUN strip ${BITCOIN_PREFIX}/bin/bitcoin-cli RUN strip ${BITCOIN_PREFIX}/bin/bitcoin-tx RUN strip ${BITCOIN_PREFIX}/bin/bitcoind RUN strip ${BITCOIN_PREFIX}/lib/libbitcoinconsensus.a RUN strip ${BITCOIN_PREFIX}/lib/libbitcoinconsensus.so.0.0.0 FROM alpine LABEL maintainer="Hiroki Tanaka" # copy applications from bitcoin-core COPY --from=bitcoin-core /opt /opt ARG USER_ID ARG GROUP_ID ENV BITCOIN_VERSION=0.19.1 ENV HOME /bitcoin # add user with specified (or default) user/group ids ENV USER_ID ${USER_ID:-1000} ENV GROUP_ID ${GROUP_ID:-1000} ENV PATH=/opt/bitcoin-${BITCOIN_VERSION}/bin:${PATH} RUN sed -i 's/http\:\/\/dl-cdn.alpinelinux.org/https\:\/\/alpine.global.ssl.fastly.net/g' /etc/apk/repositories RUN apk --no-cache add \ boost \ boost-program_options \ libevent \ libressl \ libzmq \ su-exec \ bash RUN addgroup -g ${GROUP_ID} bitcoin; \ adduser -D -u ${USER_ID} -G bitcoin -h /bitcoin -s "/bin/bash" bitcoin; # add utilities ADD ./bin /usr/local/bin RUN chmod +x /usr/local/bin/btc_* VOLUME ["/bitcoin"] EXPOSE 8332 8333 18332 18333 18444 28333 WORKDIR /bitcoin CMD ["su-exec", "bitcoin", "bitcoind"]こちらをビルドしました。
% docker build -t bitcoind:0.19.1 -f Dockerfile .そうしたら・・以下のようなエラーに遭遇
g++: fatal error: Killed signal terminated program cc1plus調べてみたら・・・原因は「メモリ不足」のようでした・・・
Docker Desktopから Preferences > Resources > Memory を大きく(3GBから8GB)にして再度ビルドしてみます
(最近ローカルの開発マシンをMac Miniにしたので、ここら辺は十分リソースがあって嬉しいです)今度は、うまくビルドできました。
あとは、docker-compose-data/testnet/bitcoin.conf を作成しておき、以下のように実行します。
% docker run --rm -it -p 18332:18332 -v `pwd`/docker-compose-data/testnet:/bitcoin/.bitcoin bitcoind:0.19.1 bash # su-exec bitcoin bitcoindこちらで、ちゃんと動作するのを確認しました。
以下でも同様のTipsを記載しています。
https://kumano-te.com/activities/developed-bitcoind-with-alpine-docker以上になります。
- 投稿日:2020-05-28T15:19:35+09:00
Windows 10 May 2020 UpdateでのWSL2導入手順
Windows 10の9回目の大型アップデート「May 2020 Update」でようやくWSL2が使えるようになりました。
以下はWSL2の導入、及びWSLをWSL2に切り替える手順です。⚠︎注意
「Windows 10 May 2020 Update」でブルースクリーン発生やBluetooth、IMEの不具合
のような不具合も出ています。作業を行う際はバックアップをきっちり取った方が良いです。
また、この記事を参考にしたことにより生じたあらゆる損害について筆者は一切の責任を負いません。前提
- Windows 10 Pro(多分Homeでも動くが手順は違うと思う)
Windows 10 May 2020 Update の適用
「Windows 10 May 2020 Update」
2004(Build 19041)
が適用済みでない場合
Windows Updateが降ってくるのを待つでも良いですが以下からUpdateが可能です。
https://www.microsoft.com/en-us/software-download/windows10Hyper-Vを無効化する
WSLではHyper-Vが必須でしたが、WSL2では不要になりました。
Hyper-Vを有効化しておくことでgRPCのport 50051などHyper-Vが予約しているポートとバッティングしているポートを使用しようとする場合などで困ることになるので必要なければ無効化しておいた方がよさそうです。Powershellを管理者権限で立ち上げ以下を実行します。
Disable-WindowsOptionalFeature -Online -FeatureName $("Microsoft-Hyper-V")VirtualMachinePlatformとWSLを有効化する
Powershellを管理者権限で立ち上げ以下を実行します。
Enable-WindowsOptionalFeature -Online -FeatureName $("VirtualMachinePlatform", "Microsoft-Windows-Subsystem-Linux")WSL2 Linux カーネル更新プログラム パッケージのインストール
以下から「WSL2 Linux カーネル更新プログラム パッケージ」をダウンロードしてきてインストールします。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel(既にWSLが入ってる場合)ディストリビューションの更新
WSLを既に使用してる場合はディストリビューションの更新が必要です。
Powershell を管理者権限で立ち上げて以下を実行します。
- WSLのディストリビューションを検索
wsl -l -v # NAME STATE VERSION #* Ubuntu-18.04 Running 1
- バージョンを2に上げたいディストリビューションを更新
wsl --set-version Ubuntu-18.04 2更新までしばらく時間がかかります。
- ディストリビューションのバージョンが「2」に上がったことを確認
wsl -l -v # NAME STATE VERSION #* Ubuntu-18.04 Running 2(おまけ) Docker for Windowsの設定変更
- WSL 2 based engine を有効化
- WSL INTEGRATION を有効化
以上で元々Docker for Windowsで動いていたDockerコンテナのWSL2での起動までは確認できました。
- 投稿日:2020-05-28T15:14:46+09:00
Docker上にRails環境構築(DBはmariadb)
Docker上にRails環境(DBはmariadb)を構築したい!
ローカル環境上にRailsの環境構築を行うと、どんどんローカルが汚れていくので嫌だなと。
なのでローカル上でDocker for Windowsを使用してRails環境を構築したく記事を書きました。
※色々弄りすぎた結果、この投稿に記載しているDockerファイルやdocker-composeファイルも汚れた状態での投稿になっています。。。綺麗にしたい。。。構築にあたっての前提環境
- Windows10 Pro(HomeだとDocker for Windowsがインストールできないため)
- Docker for Windowsのインストール 公式を見てインストール
構築手順
- プロジェクトを作成したい場所にフォルダを作成
上記で作成したフォルダ内にDockerファイルを作成
FROM ruby:2.7 ENV LANG C.UTF-8 ENV WORKSPACE=/usr/local/src # install bundler. RUN apt-get update && \ apt-get install -y vim less && \ apt-get install -y build-essential libpq-dev nodejs && \ apt install -y lsb-release && \ apt remove -y libmariadb-dev-compat libmariadb-dev && \ apt-get install -y nginx RUN wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-common_8.0.18-1debian10_amd64.deb \ https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient21_8.0.18-1debian10_amd64.deb \ https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client-core_8.0.18-1debian10_amd64.deb \ https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-client_8.0.18-1debian10_amd64.deb \ https://dev.mysql.com/get/Downloads/MySQL-8.0/libmysqlclient-dev_8.0.18-1debian10_amd64.deb RUN dpkg -i mysql-common_8.0.18-1debian10_amd64.deb \ libmysqlclient21_8.0.18-1debian10_amd64.deb \ mysql-community-client-core_8.0.18-1debian10_amd64.deb \ mysql-community-client_8.0.18-1debian10_amd64.deb \ libmysqlclient-dev_8.0.18-1debian10_amd64.deb RUN gem install bundler && \ apt-get clean && \ rm -r /var/lib/apt/lists/* # create user and group. RUN groupadd -r --gid 1000 rails && \ useradd -m -r --uid 1000 --gid 1000 rails # create directory. RUN mkdir -p $WORKSPACE $BUNDLE_APP_CONFIG && \ chown -R rails:rails $WORKSPACE && \ chown -R rails:rails $BUNDLE_APP_CONFIG USER rails WORKDIR $WORKSPACE # install ruby on rails. ADD --chown=rails:rails . $WORKSPACE RUN bundle install ADD . /app RUN mkdir -p tmp/sockets # Expose volumes to frontend VOLUME /app/public VOLUME /app/tmp # Start Server # TODO: environment CMD bundle exec puma同一フォルダにdocker-compose.ymlを作成
docker-compose.ymlversion: '3.2' services: api: build: . command: bundle exec rails s -p 8080 -b '0.0.0.0' container_name: '好きなコンテナー名' ports: - 8080:8080 volumes: - type: bind source: ./ target: /usr/local/src restart: always environment: TZ: Asia/Tokyo links: - maria-db maria-db: image: mariadb:10.5.2 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin environment: MYSQL_ROOT_PASSWORD: hoge MYSQL_DATABASE: hoge MYSQL_USER: hoge MYSQL_PASSWORD: hoge ports: - '3306:3306' command: --innodb-use-native-aio=0 volumes: - ./docker_config/db/volumes:/var/lib/mariadb - ./docker_config/db/my.cnf:/etc/mysql/conf.d/my.cnfプロジェクトの作成
コマンドプロンプトを立ち上げプロジェクトを作成するフォルダまで移動後、下記コマンドを実行する$ docker-compose run --rm api rails new . --force --database=mysql --skip-bundle $ docker-compose run --rm api bundle exec spring binstub --alldatabaseの接続情報を設定
プロジェクトフォルダ/config/database.ymlにDBの接続情報を記載default: &default adapter: mysql2 encoding: utf8 pool: 5 username: hoge password: hoge host: maria-db起動する
$ docker-compose up
- 投稿日:2020-05-28T14:45:27+09:00
Docker の低レベルランタイムを Nabla Container に入れ替え、専用イメージもビルドして動かしてみる
要約
- コンテナの作成方法は Docker 標準 (containerd + runc) だけではなく、複数存在する。
- その多くがホストとのカーネル共有から脱却して安全にコンテナを使う方法を検討しており、異なる手法で実現を目指している。
- Unikernel を使って実現しようとしている IBM の Nabla Container の導入~専用イメージのビルドを実際にやってみました。
コンテナランタイムも runnc も知ってる!という方は以下から。
Nabla Containers のインストール
コンテナランタイムは分かるけど runnc って何?という方は以下から。
Nabla Containers (runnc) とは
コンテナランタイムって何?という方は以下から。
Docker 標準 (containerd + runc) 以外のコンテナ作成方法Docker 標準 (containerd + runc) 以外のコンテナ作成方法
コンテナの作成・管理を直接的に担っているのはコンテナランタイムと呼ばれる部分です。
多くのコンテナランタイムは次の二層から成ります。
- 高レベルランタイム: ユーザや Kubernetes のようなコンテナオーケストレータからの命令を受け取り、低レベルランタイムへ指示を出す。
- 低レベルランタイム: 高レベルランタイムからの指示を受け取り、コンテナ環境を実際に作成する。
Dockerのデフォルトで採用されているコンテナランタイムは以下の通りです。
- 高レベルランタイム: containerd
- 低レベルランタイム: runc
これ以外にも様々なコンテナランタイムが存在します。
高レベルランタイムと低レベルランタイムの間のやり取りは OCI という規格で定義されているので、入れ替えて使うこともできます。
主要なランタイムと特色については以下を参照してください。
http://c.itdo.jp/?p=2653なぜランタイムを入れ替えるのか
多くの場合はセキュリティのためだと思います。
runc はコンテナとホストがカーネルを共有しているため、コンテナが乗っ取られるとホストに被害範囲が拡大する恐れがあります。
Docker デフォルト以外のランタイムはこの問題の抜本的な解決のため、ホストとカーネルを共有しない方向でランタイムの改善を図っています。Nabla Containers (runnc) とは
- Unikernel を使ってホストとカーネルを共有せずにコンテナをより安全に動作させるランタイム。runnc とも呼ばれる。
- ざっくり言うと Unikernel とは、アプリを動作させるための最低限の機能のみを持ち、 1:1 で紐づくカーネルのこと。
- コンテナライフサイクルのパフォーマンスに優れ、アプリケーションの動作パフォーマンスも比較的良好な一方で、専用イメージでしかコンテナを実行できないなど機能面に大きな制約がある。(具体的な制約は Nabla Containers の Github リポジトリ から確認できます。)
Nabla Containers のインストール
環境
- OS: Ubuntu 18.04
- Docker: 19.03.8
- git: 2.17.1
- gcc: 6.5.0
実行手順
1. Go のインストール
参考: https://github.com/golang/go#download-and-install
1. Go のバイナリをダウンロード。# ver.1.14.2 は 2020/05/12 時点の最新安定版です。 $ wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
2. /usr/local 下へ解凍。$ tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz
3. 環境変数の設定。$ export PATH=$PATH:/usr/local/go/bin $ export GOPATH=$HOME/go2. Nabla Containers のインストール
参考: https://github.com/nabla-containers/runnc#getting-started-with-the-go-repo
1. リポジトリを取得。$ go get github.com/nabla-containers/runnc
どうやら runc の github リポジトリから依存パッケージを引っ張ってきているらしいですが、依存先から一部のパッケージが消失しておりこんなメッセージが出ますがこの後の作業には差し支えませんでした。
package github.com/opencontainers/runc/libcontainer/label: cannot find package "github.com/opencontainers/runc/libcontainer/label" in any of: /usr/local/go/src/github.com/opencontainers/runc/libcontainer/label (from $GOROOT) /home/yasuda/go/src/github.com/opencontainers/runc/libcontainer/label (from $GOPATH)
2. ホストに genisoimage をインストール。$ sudo apt install genisoimage。
3. ホストに jq をインストール。$ sudo apt install jq
4. コンテナを使ってインストール。Docker があれば、コンテナ内でビルドした成果物をホストへコピーする形でインストールができます。
$ cd $GOPATH/src/github.com/nabla-containers/runnc $ make container-build $ make container-install
5. libseccomp-dev をインストール。$ sudo apt install libseccomp-dev
6. /etc/docker/daemon.json を編集して docker デーモン起動時のオプションを追加。$ vi /etc/docker/daemon.json
/etc/docker/daemon.json{ "runtimes": { "runnc": { "path": "/usr/local/bin/runnc" } } }※他のランタイムと併用したい場合、以下のように , で区切る必要があります。
/etc/docker/daemon.json(複数のランタイムを併用する場合){ "runtimes": { "runnc": { "path": "/usr/local/bin/runnc" }, "runsc":{ "path": "/usr/local/bin/runsc" } }
7. docker デーモンを再起動。$ systemctl restart docker
8. テストイメージを実行。$ sudo docker run --rm --runtime=runnc nablact/nabla-node-base:v0.3 nabla-run arg [/opt/runnc/bin/nabla-run --x-exec-heap --mem=512 --net=tap1123274cef1a --disk=/var/run/docker/runtime-runnc/moby/1123274cef1a51a3405f359b4b27f02df95ddcee60dfeafda8c6d10cd187b923/rootfs.iso /var/lib/docker/overlay2/94626cd9623c92c1c5820b39aaf0c369d732ec856ee37a491b349e3679e45951/merged/node.nabla {"env":"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","env":"HOSTNAME=1123274cef1a","cmdline":"/var/lib/docker/overlay2/94626cd9623c92c1c5820b39aaf0c369d732ec856ee37a491b349e3679e45951/merged/node.nabla","net":{"if":"ukvmif0","cloner":"True","type":"inet","method":"static","addr":"172.18.0.2","mask":"16","gw":"172.18.0.1"},"blk":{"source":"etfs","path":"/dev/ld0a","fstype":"blk","mountpoint":"/"},"cwd":"/"}] nabla-run: WARNING: The use of --x-exec-heap is dangerous and not recommended as it makes the heap and stack executable. nabla-run: /var/lib/docker/overlay2/94626cd9623c92c1c5820b39aaf0c369d732ec856ee37a491b349e3679e45951/merged/node.nabla: Warning: phdr[0] requests WRITE and EXEC permissions | ___| __| _ \ | _ \ __ \ \__ \ ( | | ( | ) | ____/\___/ _|\___/____/ Solo5: Memory map: 512 MB addressable: Solo5: reserved @ (0x0 - 0xfffff) Solo5: text @ (0x100000 - 0xb0f377) Solo5: rodata @ (0xb0f378 - 0xdd3bef) Solo5: data @ (0xdd3bf0 - 0x1018aa7) Solo5: heap >= 0x1019000 < stack < 0x20000000 rump kernel bare metal bootstrap [ 1.0000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, [ 1.0000000] 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, [ 1.0000000] 2018 The NetBSD Foundation, Inc. All rights reserved. [ 1.0000000] Copyright (c) 1982, 1986, 1989, 1991, 1993 [ 1.0000000] The Regents of the University of California. All rights reserved. [ 1.0000000] NetBSD 8.99.25 (RUMP-ROAST) [ 1.0000000] total memory = 247 MB [ 1.0000000] timecounter: Timecounters tick every 10.000 msec [ 1.0000080] timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0 [ 1.0000090] cpu0 at thinair0: rump virtual cpu [ 1.0000090] root file system type: rumpfs [ 1.0000090] kern.module.path=/stand/amd64/8.99.25/modules [ 1.0200090] mainbus0 (root) [ 1.0200090] timecounter: Timecounter "bmktc" frequency 1000000000 Hz quality 100 [ 1.0200090] ukvmif0: Ethernet address 06:bb:07:e1:d1:56 [ 1.0662231] /dev//dev/ld0a: hostpath XENBLK_/dev/ld0a (45002 KB) mounted tmpfs on /tmp === calling "/var/lib/docker/overlay2/94626cd9623c92c1c5820b39aaf0c369d732ec856ee37a491b349e3679e45951/merged/node.nabla" main() === rumprun: call to ``_sys___sigprocmask14'' ignored rumprun: call to ``sigaction'' ignored Hello, Rump!! === main() of "/var/lib/docker/overlay2/94626cd9623c92c1c5820b39aaf0c369d732ec856ee37a491b349e3679e45951/merged/node.nabla" returned 0 === === _exit(0) called === [ 1.2419573] rump kernel halting... [ 1.2419573] syncing disks... done [ 1.2419573] unmounting file systems... [ 1.2421135] unmounted tmpfs on /tmp type tmpfs [ 1.2421135] unmounted /dev//dev/ld0a on / type cd9660 [ 1.2421135] unmounted rumpfs on / type rumpfs [ 1.2421135] unmounting done haltedお疲れさまでした。インストールは終了です。
専用イメージをビルドする
参考: https://github.com/nabla-containers/nabla-base-build
- ローカルリポジトリを用意。
$ mkdir localrepo $ cd localrepo $ git init
2. Nabla Containers が公開する、nabla-base-build リポジトリをクローン。$ git clone https://github.com/nabla-containers/nabla-base-build.git
3. サブモジュールをフェッチ。$ ls -la $ cd nabla-base-build $ git submodule update --init --recursive
4. zlib1g-devとlibseccomp-devをインストール。$ apt install zlib1g-dev libseccomp-dev
5. gcc のバージョンが 5 か 6 であることを確認。gcc --version
6. gcc のバージョンが 5 か 6 でない場合、 6.5 をインストール。内部では rumprun が Unikernel を提供しているのですが、7 以上のバージョンだと rumprun のビルドが失敗します。
$ sudo apt-get update && \ sudo apt-get install build-essential software-properties-common -y && \ sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && \ sudo apt-get update && \ sudo apt-get install gcc-6 g++-6 -y && \ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 && \ $ gcc -v7.gcc-6 を明示的に指定。
$ export CC=gcc-6
8. pcre のダウンロード元を変更。pcre のダウンロード元として指定されている ftp.csx.cam.ac.uk ですが、現在は存在していません。
代わりになるダウンロード先を指定します。$ vi rumprun-packages/pcre/Makefile
rumprun-packages/pcre/Makefileinclude ../Makefile.inc #UPSTREAM=ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz #この行をコメントアウト UPSTREAM=ftp://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz # この行を追加
9. イメージをビルド。インストール可能なイメージは以下の通り。
- nginx-base
- node-base
- python3-base
- redis-base
- go-base
# 全てのイメージをビルドしたい場合 $ make world # または、特定のイメージのみビルドしたい場合 $ make -C nginx-base
10. イメージを確認。$ sudo docker images
11. nginx コンテナを実行して実際にブラウザから接続してみる。$ sudo docker run --rm -d -p 80:80 --name nabginx nabla-nginx-basedocker ホストのポート80番へ接続すれば nginx コンテナの同ポートへ転送されます。
おわりに
この後、対話的シェルを呼び出してバージョンを確認しようと思ったのですが、 Nabla Containers の制約 を読む限り docker exec や docker run -it などコンテナ作成後に任意のコマンドを実行する手段に対応していないようだったので断念しました。今の段階で運用するには機能面の制約が大きく感じますが、Unikernels は数あるカーネル分離へのアプローチの中でも光るものがある技術であると感じます。今後の動向にも着目していきたいと思います。
ちなみに記事中でも触れたパフォーマンス面ですが、弊社 web サイトにて Redis-benchmark と Apache benchmark を使った runc との動作パフォーマンス比較があるので、よろしければご参照ください。
http://c.itdo.jp/?p=2653#nablavsrunc
- 投稿日:2020-05-28T13:42:12+09:00
Docker Rails 起動しなくなった
前提
DockerでRails環境を構築し、突然コンテナが起動しないくなった原因と解決方法について記述します。
本題
dockerのアップデート終了後にdocker-compose up -dで立ち上げても一瞬で終了してしまうことがありました。
原因
すでにサーバーが起動していると認識していたからでした。
まずは、ログを確認します。
$ docker-compose up確認すると、、、
#省略 ・ ・ ・ db_1 | 2020-05-28T04:13:02.167787Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. db_1 | 2020-05-28T04:13:02.207302Z 0 [Note] InnoDB: Buffer pool(s) load completed at 200528 4:13:02 db_1 | 2020-05-28T04:13:02.234813Z 0 [Note] Event Scheduler: Loaded 0 events db_1 | 2020-05-28T04:13:02.235265Z 0 [Note] mysqld: ready for connections. db_1 | Version: '5.7.30' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) web_1 | => Booting Puma web_1 | => Rails 5.2.3 application starting in development web_1 | => Run `rails server -h` for more startup options web_1 | A server is already running. Check /app/tmp/pids/server.pid. web_1 | Exiting上記のように、
A server is already running
となっており、サーバーがすでに立ち上がっているから終了してしまっていることがわかります。
tmp/pids/server.pidというファイルが原因となってます。
確認してみると、、、$ cat tmp/pids/server.pid 1この1という数字はRails ServerのPID(Process ID)となります。
Linuxでは各プロセスにIDをつけて管理しています。
またDockerでは, プロセスIDが1であるプロセスが終了した場合、コンテナも終了するようになっているとのことです。解決方法
$ rm tmp/pids/server.pid上記でtmp/pids/server.pidを削除後、再度立ち上げると無事に立ち上がりました!
$ docker-compose up -d毎回 rm tmp/pids/server.pid するのも手間であるため、docker-compose.ymlを修正しました。
docker-compose.yml#変更前 version: '3' services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - 3000:3000 depends_on: - db tty: true stdin_open: true environment: - "SELENIUM_DRIVER_URL=http://selenium_chrome:4444/wd/hub"docker-compose.yml#変更後 version: '3' services: web: build: . command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - 3000:3000 depends_on: - db tty: true stdin_open: true environment: - "SELENIUM_DRIVER_URL=http://selenium_chrome:4444/wd/hub"以上です。
- 投稿日:2020-05-28T11:07:30+09:00
Docker Composeを使った初期装備なRails6/PostgreSQL環境の作り方
Docker Composeを使ったRails環境を作る場合、Quickstart: Compose and Rails | Docker Documentationがとても参考になります。ただし、このドキュメントはRails5を前提として書かれており、現時点(2020-05-28)で最新のRails6を使う場合には一部修正が必要です。
そこでこの記事では、Rails6を使う場合について記載します。また、この記事の対象読者は下記を想定しており、環境構築は下記の方針と前提に基づいて行ないます。
想定読者
- Rails環境構築でいつも躓くの方(丁寧めに説明します)
- 未来の自分(思い出せるように書きます)
方針
- Quickstart: Compose and Rails | Docker Documentationに準拠する(DBはPostgreSQLを使う)
- Ruby2.7とRails6の環境を作る
- できる限りRails6の初期装備を使う(Webpackerを使う、turbolinksを使う、など)
前提
- dockerをインストール済みである
- gitをインストール済みである
なお、今回の作業内容はこちらのプルリクエスト https://github.com/tanaken0515/docker-compose-rails-sample/pull/1 にまとまっています。
では、やっていきましょう。
リポジトリを作る
まずはリポジトリを作りましょう。
$ mkdir docker-compose-rails-sample $ cd docker-compose-rails-sample $ git init $ touch README.md $ git add . $ git commit -m "initial commit"ここでは
docker-compose-rails-sample
という名前でリポジトリを作りました。
空のREADME.md
を作ってコミットしています。プロジェクトを定義する
ここから環境構築です。
まずは https://docs.docker.com/compose/rails/#define-the-project をまるっと書き写しながらファイルを作っていきます。
このドキュメントは解説も交えて書かれているので、詳しくはドキュメントを参照してください。(英語のドキュメントが苦手な方は @daichi41 さんが書かれた DockerでのRuby on Rails環境構築を一つずつ詳解する - Qiita と照らし合わせながら読むと理解が進むかもしれません)
一つ目は
Dockerfile
です。FROM ruby:2.5
となってますがこれは後で書き換えるのでいったんそのままで。DockerfileFROM ruby:2.5 RUN apt-get update -qq && apt-get install -y nodejs postgresql-client RUN mkdir /myapp WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install COPY . /myapp # Add a script to be executed every time the container starts. COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 # Start the main process. CMD ["rails", "server", "-b", "0.0.0.0"]次に
Gemfile
です。gem 'rails', '~>5'
となってますがこれもあとで書き換えます。このままで。Gemfilesource 'https://rubygems.org' gem 'rails', '~>5'
Gemfile.lock
は空のファイルを作っておきます。これはあとでrails new
するときに上書きされます。$ touch Gemfile.lock続いて
entrypoint.sh
です。これもそのまま。entrypoint.sh#!/bin/bash set -e # Remove a potentially pre-existing server.pid for Rails. rm -f /myapp/tmp/pids/server.pid # Then exec the container's main process (what's set as CMD in the Dockerfile). exec "$@"docker-compose.ymlversion: '3' services: db: image: postgres volumes: - ./tmp/db:/var/lib/postgresql/data web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/myapp ports: - "3000:3000" depends_on: - db説明の都合上、ここまでいったんコミットしました。
さて、Ruby2.7とRails6を使うために少し手を加えます。
Dockerfile
のベースイメージをRuby2.7にします。また、Rails6のデフォルトではWebpackerを使うのでyarnpkgもインストールするようにしておきます。Dockerfile-FROM ruby:2.5 -RUN apt-get update -qq && apt-get install -y nodejs postgresql-client +FROM ruby:2.7 +RUN apt-get update -qq && apt-get install -y nodejs postgresql-client yarnpkg +RUN ln -s /usr/bin/yarnpkg /usr/bin/yarn RUN mkdir /myapp WORKDIR /myapp COPY Gemfile /myapp/Gemfile
Gemfile
のrailsを~>6
に書き換えます。Gemfilesource 'https://rubygems.org' -gem 'rails', '~>5' +gem 'rails', '~>6'プロジェクトの定義はこれで完了です。
プロジェクトをビルドする
https://docs.docker.com/compose/rails/#build-the-project の通りに進めます。
まずは
rails new
します。少々時間がかかりますので休憩しつつ待ちましょう。(僕の環境では15分くらい待ちました)docker-compose run web rails new . --force --no-deps --database=postgresql
rails new
したことで、たくさんのファイルが生成されているはずです。
(この段階でコミットしておくと良いでしょう)続いてビルドしましょう。これも少々時間がかかります。(僕の環境では10分くらいでした)
docker-compose buildプロジェクトのビルドはこれで完了です。
データベースに接続する
https://docs.docker.com/compose/rails/#connect-the-database に沿って進めます。
rails new
したときにconfig/database.yml
が生成されています。これを書き換えます。config/database.ymldefault: &default adapter: postgresql encoding: unicode - # For details on connection pooling, see Rails configuration guide - # https://guides.rubyonrails.org/configuring.html#database-pooling - pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + host: db + username: postgres + password: + pool: 5 development: <<: *defaultアプリケーションを起動します。
$ docker-compose up
おっと、ここでエラーに遭遇しました。
db_1 | Error: Database is uninitialized and superuser password is not specified. db_1 | You must specify POSTGRES_PASSWORD to a non-empty value for the db_1 | superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run". db_1 | db_1 | You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all db_1 | connections without a password. This is *not* recommended. db_1 | db_1 | See PostgreSQL documentation about "trust": db_1 | https://www.postgresql.org/docs/current/auth-trust.html docker-compose-rails-sample_db_1 exited with code 1一旦別のターミナルで以下を実行して、アプリケーションを停止しましょう。
$ docker-compose down
さて、先ほどのエラーは割と最近の変更によってPostgreSQLにパスワードなしでアクセスできなくなったからのようです。
ref: https://github.com/docker-library/postgres/issues/681ここまでの手順でインストールされたPostgreSQLのバージョンは
docker-compose.yml
で指定されたimage: postgres
に依存していますが、そもそもここでバージョンを指定していないので、どのバージョンがインストールされるのかが自明ではないですね(最新の安定版がインストールされそう)
docker-compose.yml
でPostgreSQLのバージョンを指定し、環境変数にPOSTGRES_HOST_AUTH_METHOD=trust
を設定しましょう。
バージョンは https://hub.docker.com/_/postgres をみて現時点(2020-05-28)で最新安定版の12.3
を指定します。docker-compose.ymlversion: '3' services: db: - image: postgres + image: postgres:12.3 volumes: - ./tmp/db:/var/lib/postgresql/data + environment: + POSTGRES_HOST_AUTH_METHOD: trust web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"改めてアプリケーションを起動します。
$ docker-compose up
warningが出ますが、無事にデータベースと接続することができました。
db_1 | ******************************************************************************** db_1 | WARNING: POSTGRES_HOST_AUTH_METHOD has been set to "trust". This will allow db_1 | anyone with access to the Postgres port to access your database without db_1 | a password, even if POSTGRES_PASSWORD is set. See PostgreSQL db_1 | documentation about "trust": db_1 | https://www.postgresql.org/docs/current/auth-trust.html db_1 | In Docker's default configuration, this is effectively any other db_1 | container on the same system. db_1 | db_1 | It is not recommended to use POSTGRES_HOST_AUTH_METHOD=trust. Replace db_1 | it with "-e POSTGRES_PASSWORD=password" instead to set a password in db_1 | "docker run". db_1 | ******************************************************************************** (中略) db_1 | PostgreSQL init process complete; ready for start up. db_1 | db_1 | 2020-05-28 01:21:45.583 UTC [1] LOG: starting PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit db_1 | 2020-05-28 01:21:45.583 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 db_1 | 2020-05-28 01:21:45.584 UTC [1] LOG: listening on IPv6 address "::", port 5432 db_1 | 2020-05-28 01:21:45.588 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" db_1 | 2020-05-28 01:21:45.694 UTC [58] LOG: database system was shut down at 2020-05-28 01:21:45 UTC db_1 | 2020-05-28 01:21:45.735 UTC [1] LOG: database system is ready to accept connectionsデータベースへの接続はこれで完了です。
アプリケーションの動作確認
ここまでの状態で localhost:3000 にアクセスすると
ActiveRecord::NoDatabaseError
になります。データベースの環境に接続できる状態ではあるものの、このアプリケーション用のデータベースを作っていないからですね。ドキュメントに従って以下を実行しましょう(アプリケーションを起動したターミナルとは別のターミナルで実行して下さい)。
データベースが作成されます。$ docker-compose run web rake db:create Starting docker-compose-rails-sample_db_1 ... done Created database 'myapp_development' Created database 'myapp_test'改めて localhost:3000 にアクセスするとお馴染みのこの画面が出るはずです。
環境構築は以上です!
まとめ
今回はQuickstart: Compose and Rails | Docker Documentationに沿ってRuby2.7とRails6の環境を作る方法についてまとめました。参考になれば幸いです。
なお、この記事の続編として以下のような記事を書いていこうかなと思っています。
- Docker Composeのvolumesを使ってもっと効率的に
- 初期装備なRails6にVue.jsを導入する
- Docker Composeでwebpack-dev-serverを動かしてもっと快適に
(予定は未定です)
ではまた〜
- 投稿日:2020-05-28T10:51:40+09:00
Kubernetesコマンド
Pod
Pot List
kubectl get pods kubectl get pods -o wide kubectl get pods -n kube-system // namespace指定 kubectl get pods --selector app=app1,env=prod // labelフィルタリング kubectl get pods --all-namespacesPot Status
kubectl describe pod pod-nameCreate Pod
kubectl run pod-name --image nginxEdit Pod
kubectl edit pod pod-name kubectl get pod pod-name -o yaml > pod.yamlCreate Pot By YML
kubectl create -f pod-difinition.yml kubectl apply -f pod-difinition.ymlDelete Pod
kubectl delete pod pod-nameReplicaSet
Get Replicaset
kubectl get replicasetDelete Replicaset
kubectl delete replicaset replicaset-nameScale
kubectl replace -f replicaset-definition.yml kubectl scale --replicas=6 -f replicaset-definition.yml kubectl scale --replicas=6 replicaset myapp-replicasetGenerate Deployment YAML file (-o yaml)
kubectl create deployment --image=nginx nginx --replicas=4 --dry-run -o yaml > nginx-deployment.yamlNamespace
Get Pods
kubectl get pods --namespace=stg kubectl get pods --all-namespacesChange Defualt Namespace
kubelctl config set-context $(kubectl config current-context) --namespace=devScheduling
Taints | Tolerations -Node
kubectl taint nodes node1 app=blue:NoSchedule // NoSchedule | PreferNoSchedule | NoExecute // YAML側の設定は以下 spec: tolerations: - key: "app" operator: "Equal" value: "blue" effect: "NoSchedule"Remove Taints
kubectl taint nodes node1 app=blue:NoSchedule-Kubemaster
kubectl describe node kubemaster | grep TaintNode Slector | Label Nodes
kubectl label nodes node-name label-key=label-name // YAML側の設定は以下 spec: nodeSelector: label-key: label-nameNode Affinity
apiVersion: v1 kind: Pod metadata: name: with-pod-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: security operator: In values: - S1 containers: - name: with-pod-affinity image: k8s.gcr.io/pause:2.0Get Events
kubectl get events | grep scheduleGet Logs
kubectl get logs | grep schedule
- 投稿日:2020-05-28T02:13:20+09:00
Windows 10 homeでDocker Desktopを利用する。【初心者】
Windows 10 homeでDocker Desktopを利用してみたい!!
Docker DesktopがWindows 10 homeでも利用できるようになっていました!
Windows 10 homeでDocker Desktopを利用するには
- 必要な環境
- Windows Subsystem for Linux 2(WSL2)
しかし、Microsoftの公式サイトによると、WSL2を利用するには、Windows 10 home, version 2004 (Build 19041)以上でなければならない。
Windows 10 home, version 2004 (Build 19041)へのアップデートの仕方
Windows 10 home, version 2004 (Build 19041)はWindows Insider programに参加することで手に入るらしいので、さっそく参加してみる。(無料)
Windows Insider programに参加する方法
こちらの公式サイトからSettings > Update & Security > Windows Insider Programをクリック。
設定画面が開くのでMicrosoft Accountを登録、そして参加。
Windows 10 home, version 2004 (Build 19041)へのアップデート
公式サイトのSettings > Update & Security > Windows Updateをクリックすると、設定画面が開く。
そして、Windows Updateを選択してWindows 10 home, version 2004 (Build 19041)のインストールとダウンロードをしばし待ちます。
再起動を促されるので、再起動するとWindowsのアップデートがはじまる。
これが終わればWindows 10 home, version 2004 (Build 19041)にアップデートされていると思います。
WSL2のインストール
まずはWSL1を利用できるようにします。
まずは、PowerShellを管理者権限で開きます。
管理者権限での開き方は、タスクバーの検索に"PowerShell"と入力し、"Windows PowerShell"を右クリックして"管理者として実行"を選択すると開けます。次に、Microsoft公式サイトのあるようにPowerShellで次のように入力して実行。(~>は入力しない)
~> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartMicrosoft Storeで好きなLinux Distributionをインストールします。
これでWSL1は利用できるようになったと思います。
※WSLの設定を反映するために再起動が必要かもしれません。
※Windowsの設定->更新とセキュリティ->開発者向けから開発者モードをオンにしないといけないかもしれません。
WSL2へアップデートの仕方
まずは、WSL2へアップデートする前に'Virtual Machine Platform' optional componentを利用できるようにしなければいけません。
公式サイトのように、再びPower Shellを管理者権限で実行し、次のように入力して、実行します。
~> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart※再び設定変更を反映させるために再起動が必要かもしれません。先ほどのコマンドとこのコマンドを実行してから再起動した方がいいかもしれません。(時短)
WSL2を利用するにはLinux kernelのアップデートが必要
公式サイトからご自身のPCのアーキテクチャにあった更新プログラムをダウンロードします。
そして実行。
ご自身のPCアーキテクチャが異なっていればエラーが出るのですぐにわかると思います。
アップデートが終われば再起動。
最後にPower Shellを管理者権限で開いてWSL2をデフォルトに設定します。
~> wsl --set-default-version 2最後にDocker Desktopをインストール
dockerhubからDocker Desktop for Windows(stable)をダウンロード!
ダウンロードしたDocker Desktop Installer.exeを実行してインストールすると、晴れてWindows 10 homeでDocker Desktopを利用できるようになります。
※Docker Desktopの画面が立ち上がらないときはWindowsタスクバーの^マークをクリックして、白いクジラにカーソルを合わせるとDocker Desktop is runningが表示されるので、白いクジラをクリックしてDashboardをクリックすると立ち上がると思います。
最後に動作確認
画面の通り、コマンドプロンプトで
~> docker run -dp 80:80 docker/getting-startedと実行すると、
コンテナが立ち上がりました。
やったね!
- 投稿日:2020-05-28T01:49:05+09:00
Docker Desktopインストール後WSL2でもつまずいたのでメモ
以前、Dockerのインストールでつまずいたのでメモ
という記事を投稿したが、その後も実際にDockerを使えるまでにいろいろとつまずいたので自分用の備忘録。ではいこう!
【環境】
Windows HOME(64bit)【流れ】
基本的には公式の手順に従ってやった。
WindowsホームにDockerデスクトップをインストールするWindows HOMEはWSL2を使ってDockerを扱う。
なんでWSL2の設定やらなんやらしないといけないわけで、こっちも公式(MicroSoft)の手順に従ってやった
Windows 10 用 WSL のインストール ガイド手順をもらうと分かるが、MicroSoft Storeからお好きなLinux ディストリビューションをインストールすることになっている。
自分はUbuntuをインストールしたが、そのあとが問題だった。つまずいたトコ
その1.0x80370102 エラー
初めての起動だとコンソール ウィンドウが開き、もろもろ自動で設定されたのちに、ログインユーザとパスワードを設定しろといわれるはずなのだが、
Setting...
という画面で数秒固まったあと出てきたのは
0x80370102
というエラー。原因
コンピューターの BIOS 内部で仮想化が有効になっていなかった。
Windows 10 用 WSL のインストール ガイドにもこのエラーについては書いてあったけど普通に読み飛ばしてた。対処方法
BIOSを起動して仮想化を有効にする。
BIOSの起動方法はメーカーによって若干異なる。
自分のはLenovo製だったのでこっちも公式に則ってやった。
BIOSの入り方(でもこの手順、他メーカーでもいけそう。。。)BIOSに入ったら
「UEFI firmware settings」選んで
↓
configurationのIntel Virtual Technologyをenableへその2.0xC03A001A エラー
その1のエラーが解決して、「よろしくおねがいしまーーす!!」とばかりに意気揚々とEnterを押してUbuntoを起動させた。(気分はサマーウォーズのラストシーン)
しかし
Setting...
という画面で数秒固まったあと出てきたのは
0xC03A001A
というエラー。
(サマーウォーズだったら死んでた)原因
WSLのフォルダが圧縮対象になっていた
対処方法
これに関してはQiitaで別に記事を上げているお方がいるのでそっち参照。
WSL2 にしたいのにエラーが出る問題その3.0x80370109エラー
その2のエラーが解決して、再度、「よろしくおねがいしまーーす!!」とばかりに意気揚々とEnterを押してUbuntoを起動させた。(気分はサマーウォーズのラストシーン)
しかし、またもや
Setting...
という画面で数秒固まったあと出てきたのは
0x80370109
というエラー。
(サマーウォーズだったらまた死んでた)対処方法
再起動したら治った。
(原因はようわからん)エンドロール
こうしてようやくUbuntoも正常に立ち上がり、Dockerの起動までもっていくことができた。
無事、「よろしくおねがいしまーーす!!」とばかりに意気揚々とEnterを押してもUbuntoが起動するようになった(サマーウォーズだったら彼女できてた。。。)
- 投稿日:2020-05-28T00:20:50+09:00
個人でRedmine環境用意する
Redmine構築手順
個人のタスク管理にもRedmine使ってみたくなった。
最初はローカルのMacで起動させてたけどちゃんとサーバ用意して動かしたくなったのでやってみた。0. サーバの用意
dockerコンテナを動かすサーバを用意する。
- 自由にできるサーバを手に入れる
- さくらVPSサーバを申し込んだ
- とりあえず有名なところかつお財布にダメージが少なめな月額800円のやつ
- 2週間お試しなのでひよこエンジニアにはちょうど良さそうだった
- OSインストール
- デフォルトがCentosなのでそのままでいい場合は不要
- 今回はCentos7を使った
1. dockerのインストール
今回、Redmineはdockerイメージで配布されているものを使用するのでサーバにdockerをインストールする。
(bitnami Redmineでも良かったかも)
- sshでサーバにログイン
- 今回はパスワード認証で進める(公開鍵認証の設定は割愛)
- rootでやってるんかいというのも一旦置いておく
# ログイン ssh root@[各自のドメイン].vs.sakura.ne.jp
- yumの更新とリポジトリの設定(念為)
# 更新 yum update yum upgrade # yumリポジトリの設定 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- dockerのインストールと設定
yum install -y docker-ce docker-ce-cli containerd.io
- dockerの起動と自動起動の設定
# 起動 systemctl start docker # サーバ起動時に自動で起動する設定 systemctl enable docker2. Redmineの導入
公式のdockerイメージを使ってRedmineを構築する。
- dockerイメージの入手と起動
- 引き続きsshでログインした状態で作業
# イメージの入手 docker pull redmine # コンテナの起動(バックグラウンドで実行) docker run -p 3000:3000 --name redmine redmine & # 確認 docker ps curl http://localhost:3000/3. プラグインの適用
かんばんを使いたかったのでAgilePluginをRedmineに導入する。
不要な場合はここはスキップして問題ない。
- プラグインをローカルで入手、解凍する
- 公式からダウンロード
- ローカル → サーバにプラグインを転送
- 転送用のディレクトリをサーバに用意
# (サーバにログインした状態で)任意のディレクトリで作成 mkdir tmp cd tmp # 確認 pwd
- プラグインの転送
- サーバではなくローカルのシェルで実行
scp -r [ダウンロードしたプラグインのパス] root@[各自のドメイン].vs.sakura.ne.jp:[作成したtmpディレクトリのパス]
- サーバに転送したプラグインをコンテナに持っていく
- 最終的にプラグインを持っていくコンテナ上のディレクトリを確認する
# (サーバにログインした状態で)コンテナに入る docker exec -i -t redmine bash # プラグインを入れるディレクトを確認する cd plugins/ pwd # コンテナから出る exit
- Redmineを動かしているコンテナにプラグインを持ち込む
# 作成したtmpディレクトリの1つ上のディレクトリで実行 docker cp ./tmp/. redmine:[コンテナ上のプラグインを入れるディレクトリのパス/]
- プラグインをコンテナ上にインストールする(インストール後再起動)
# コンテナに入る docker exec -i -t redmine bash # プラグインのインストール bundle install bundle exec rake redmine:plugins NAME=redmine_agile RAILS_ENV=production # コンテナから出てコンテナ再起動 exit docker restart redmine
ブラウザから以下にアクセスしてRedmineのトップページが表示されればOK
- http://[各自のドメイン].vs.sakura.ne.jp:3000/
- お試し期間終わったらhttpsにします
おわり
割とあっさり用意できたので満足。
いくつか課題も残ってるのでその辺りは使いながらおいおい対応。