- 投稿日:2020-10-12T17:09:29+09:00
Windows10 HomeでDocker + VSCodeによるhaskellの環境構築
はじめに
いままでインタプリタ型・動的型付けの言語を使う機会の方が多かったです。
ただ、触っていくうちに「かっちりさ」に欠ける 気がしてしまったんです。
「70%の完成度でリリースできる」という言葉を聞いたことがあるくらいですからそれほど厳密さには焦点を絞っていないのだと思います。もちろん、それがいいところだし、実社会ではその方がスピード感のあるリリースが可能になる分強いと思います。
ただ、コンパイラ型・静的型付けの言語も触ってみて両者の違いをつかんでみたいなという気持ちが湧いてきたんです。
(かっちりしてるものの方が扱いやすい気がするという好みの問題もあるんですが)しかも、オブジェクト指向に関してもJavaScript, Python, PHPと触っていくうちに雰囲気がつかめてきた(分かったとは言ってない)ので関数型なるものを触ってみたいという好奇心もあります。
そこでHaskellを勉強してみることにしました。
コードも綺麗になるというし、嬉しい副作用にも期待ですね。
しかし、いざ始めようとすると意外とWindows10 Homeでの環境構築の記事が断片的にしかありませんでした(Proは結構あったんですけど)。
ということで、Windows10 Homeでのhaskell環境構築についてまとめていきます。
環境
- Windows10 Home
- Docker (インスト―ルから合わせて紹介します)
Dockerを使った場合
まずはDockerでhaskellイメージをプルしてコマンドプロンプトから実行できるやり方を説明します。
Windows10 HomeでDockerを使う手順から始めます。そのまま一気にhaskellを実行できるところまでいきますね。
①「Windows用Linuxサブシステム」の有効化
コントロールパネル → プログラム → Windowsの機能の有効化または無効化
で「Windows用Linuxサブシステム」を有効化します。(その後PCを再起動します)
②Docker Desktop on Windows Homeをインストール
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
「Get stable」をクリック。
③Dockerを起動
Dockerを起動すると「Linuxカーネルをアップデートしろ」と叱られるので、
https://docs.microsoft.com/en-us/windows/wsl/install-win10
の手順4に従って、アップデート。晴れてDockerが動くようになります。
(※別の環境構築の際にいじっていてぼくだけこの操作で済んだ可能性があります。でも、上のページは分かりやすくまとまっているのでそれを順番に実行していけばいい気がします)
④Haskellイメージをpullする
コマンドプロンプトを開き、適当なディレクトリで次を実行。
$ docker pull haskellでhaskellイメージをもらってきます。
その後、
$ docker run -it haskellでコンテナを起動すると、勝手にコンテナの中に入ってくれます。(要するにすぐhaskell使える状態になります)
こんな感じで Prelude> と出れば成功。
すぐに実行できます。
Docker + VSCodeを使った方法
実はVSCodeを使えばエディタを使ってhaskellをいじることができます。
つまり、コマンドプロンプトを使わずしてVSCode上からコンテナ内のhsファイルを編集したり、ターミナルを立ち上げたりできます。
①VSCodeをインストール
https://azure.microsoft.com/ja-jp/products/visual-studio-code/
上記のリンクからVSCodeをインストールします。
②Remote-Containersをインストール
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers
上記のリンクからVSCodeの拡張機能「Remote-Containers」をインストールします。
③コンテナを立ち上げる
適当なディレクトリを作って、VSCodeで開きます。
そこで「.devcontainer.json」というファイルを作り、以下の記載をします。
.devcontainer.json{ "name" : "haskell", "images" : "haskell", "extensions" : "haskell.haskell" }このファイルでpullするDockerイメージやその設定を管理しています。要するにDockerfileの代わりですね。
VSCodeは設定系をjsonファイルで管理するようですね。
その後、画像の順に「左下の緑のボタン」->「Remote-Containers: Open Folder Container...」と押します。
これで勝手にDockerイメージをpullするところからコンテナを立ち上げるところまで勝手にやってくれます。
2回目以降は右下でコンテナを立ち上げるか聞いてきます。「Reopen in Container」を押せばまた再開できます。
以上を実行すると、勝手にコンテナに入ってしかもターミナルまで勝手に立ち上げてくれます。VSCode便利ですね。
(最初かなり混乱したんですが、コマンドプロンプトはWindowsの、ターミナルはLinuxのCLIですね。ややこしや。Windowsのパワーシェルはコマンドプロンプトを基礎に機能を拡張したものだそうですね)
④haskellを実行
ここまでくるともうhaskellを使えます。
下に出てきたターミナルで、
$ stack ghciを実行します。これで、コマンドプロンプトでやった時と同じように対話式でhaskellを実行できます。
ちなみに、ghciは「Glasgow Haskell Compiler Interface」の略だそうです。haskellはグラスゴー大学というイギリス北部にある大学で開発されたそうですね。
⑤hsファイルを編集&実行
対話形式で実行するのもいいですが、せっかくエディタを使ってるんですからファイルにコードを書いて読み込みたいですね。
haskellではhsファイルにコードを書いて管理します。
たとえば、「hello_world.hs」というファイルを作って以下のコードを書き込みます。
hello_world.hsmain = putStrLn "Hello world!"その後、ターミナルにて
$ stack runghc hello_world.hsを実行します。そうすると、コンパイルから実行まで勝手にやってくれます。
これで晴れてhaskellを実行できましたね!
さいごに
今回はhaskellをWindows10 Homeで実行する手順についてでした。ほぼDockerの動かし方でしたね。
これから趣味でいじっていくと思うんで、haskellネタはちょくちょく書くかもです。
そのうち数学ネタも書きたいな~
- 投稿日:2020-10-12T16:51:21+09:00
golandとDocker設定
golandを使う人への参考記事まとめです。
GolandでDockerを使う
Docker - 公式ヘルプ | GoLand
公式ページ。これだけでもいい人もいるはず。日本語が少し不自然。GolandでDocker上のサーバーをRemote Debug - Qiita
リモートデバッグの解説が日本語で書かれていて読みやすい。Docker上のGo製Webアプリケーションをリモートデバッグする - Qiita
実際に使用しているコードがわかります。golandの設定
GoglandでオススメのGo快適開発環境構築方法 - Qiita
基本的なgolandの使い方、dockerはの解説はありません。【Go言語】Airでホットリロードをする方法 | Awesome Blog
golandでホットリロードってなによ?ってときに読みましょうDockerでGo言語の開発環境
DockerでGoの開発環境を構築する - Qiita
dockerのみでgolandの解説はありませんが、基本を振り返る時に最適
- 投稿日:2020-10-12T16:07:34+09:00
DynamoDB localをDockerで構築する
背景
現在担当しているプロダクトではAppSyncを使っており、バックエンドにLambdaを使うことが多いです。その際にLambdaのロジックに対する単体テストを書くのですがDynamoDBとのやり取りについては保留していました。
開発が進むにつれていろんな処理が入ってきたこともあり、「実際にアクセスしてみないと分からない」という状況では色々不都合が出てきたのでそろそろテストを入れようと思って調べたことをまとめています。この記事に掲載しているコードの全体はyu-croco/DynamoDB-local-Sampleにアップロードしていますので、ご自由にお使いください。
追記
投稿後に気づいたので追記です。
Circle CI上に建てたDockerコンテナに対して、Circle CIのローカル上からアクセスする(例:http://localhost:8000 )のは無理っぽいので、Circle CI上でこの記事のようにDocker化したDynamoDB localを使う場合には、GolangのリソースもDocker化してください。DynamoDB local
DynamoDB localとはAWSが提供しているローカル上で起動できるDynamoDBのことです。
AWS公式のSetting Up DynamoDB Localによると、ダウンロード可能なバージョンの Amazon DynamoDB では、DynamoDB ウェブサービスにアクセスせずに、アプリケーションを開発してテストすることができます。代わりに、データベースはコンピュータ上で自己完結型となります。アプリケーションを本番稼働環境にデプロイする準備ができたら、コード内のローカルエンドポイントを削除します。その後、これは DynamoDB ウェブサービスを指します。
このローカルバージョンを使用することで、スループットやデータストレージ、データ転送料金を節約しやすくなります。また、アプリケーションを開発している間インターネットに接続しておく必要はありません。
とのことです。
「いちいちDynamoDB叩くと面倒だよね」というので、よりハンディなものを提供してくれている感じです。今回はこれを使います。
Docker化してみる
CI上で利用したいこともあり、毎回DynamoDB localを直接インストールしたくはありません。幸い、DynamoDB localはAWSが公式でDocker Hubにイメージを公開しているので今回はこれを使います。
amazon/dynamodb-local - Docker HubDockerfileはこんな感じです。オプションなどは公式を参照頂くとよいかと思います。
DynamoDB Local Usage NotesFROM amazon/dynamodb-local CMD ["-jar", "DynamoDBLocal.jar", "-sharedDb", "-dbPath", ".", "-optimizeDbBeforeStartup"]$ docker build -t dynamodb_sample . $ docker run -p 8000:8000 -v dynamodb:/home/dynamodblocal dynamodb_sampleみたいにすれば、ざっと動きます。
DynamoDBにデータを入れる
起動したDynamoDB localにテーブル作成やデータ投入をします。
このためにわざわざコードを書くのは面倒なので、今回はAWS CLI経由でデータを入れます。
AWS CLI用のコンテナを起動し、以下のようなスクリプトを実行することでDynamoDB localのコンテナに対してテーブル操作を行います。テーブル作成用
#!/usr/bin/env bash aws dynamodb \ --region ap-northeast-1 \ --endpoint-url http://dynamodb:8000 \ create-table \ --table-name SampleTable \ --attribute-definitions \ AttributeName=userId,AttributeType=N \ AttributeName=userName,AttributeType=S \ --key-schema \ AttributeName=userId,KeyType=HASH AttributeName=userName,KeyType=RANGE \ --billing-mode PAY_PER_REQUESTデータ投入用
#!/usr/bin/env bash aws dynamodb \ --region ap-northeast-1 \ --endpoint-url http://dynamodb:8000 \ put-item \ --table-name SampleTable \ --item ' { "userId": { "N": "1" }, "userName": { "S": "山田太郎" }, "age": { "N": "29" }, "contactNumber": { "S": "080-1234-5678" } } 'およその全体像
最終的にはざっくり以下の感じになります。
Dockerfile(AWS CLI用)
FROM amazon/aws-cli:2.0.56 ENV AWS_ACCESS_KEY_ID=fake_access_key\ AWS_SECRET_ACCESS_KEY=fake_secret_access_key\ DYNAMODB_REGION=ap-northeast-1 # AWS CLIから実行したい処理をbin配下にshellscriptで作っておく COPY bin bindocker-compose.yml
version: '3' services: dynamodb: image: amazon/dynamodb-local command: -jar DynamoDBLocal.jar -sharedDb -dbPath . -optimizeDbBeforeStartup volumes: - dynamodb:/home/dynamodblocal ports: - 8000:8000 awscli: build: . entrypoint: [""] tty: true command: - /bin/sh volumes: dynamodb: driver: localこれでdocker-compose upしてDynamoDB localとAWS CLIのそれぞれのコンテナを起動します。その後binファイルに入っているshellscriptを叩いてテーブル作成などを行います。
コンテナ起動後に自動でテーブル作成などできればいいですが、それはまた別の機会にでも。
セッションの設定
Golangの場合ではDynamoDBへのセッションを定義する処理でEndpointを
http://0.0.0.0:8000
とすれば既存のDynamoDBの処理が動くようになるかと思います。const region = "ap-northeast-1" var svc = dynamodb.New(session.New(&aws.Config{ Region: aws.String(region), Endpoint: aws.String("http://0.0.0.0:8000"), }) )まとめ
DynamoDBへのアクセス処理に関するテストを行うためにDynamoDB localを使いました。DynamoDB localへのテストデータの投入は面倒なので、AWS CLI用のDockerを起動してそこからDynamoDB localへデータを投入するのがおすすめです(CI上とかでも使えるので)。
それでは幸せなDynamoDB生活を!
- 投稿日:2020-10-12T15:15:57+09:00
今更ansible+dockerを始めたら最初からつまづいたけど、何とか起動出来た話
概要
Excelの手順書通りに操作せよ!という現実を変えるのに、ansibleが使えそうだとどこかのサイトで見たので、dockerとの組み合わせで検証してみた。
そしてコンテナへの接続方法に「Docker connection plugin for Ansible」ってのを使えばssh不要と検証途中で知ったので、変更した上で接続出来るようになるまでのメモ。環境
os: centos7
ansible: 2.9.13
docker: 19.03.13
docker-compose: 1.26.2各ミドルのインストールは色んな方が公開されているので割愛。
失敗してた時の設定
コンテナ側
- DockerFile
# OS FROM centos:centos7 # pkg install RUN yum install -y epel-release && \ yum update -y && \ yum install -y openssh-server openssh-clients sshpass && \ yum install -y net-tools vim ENV LANG ja_JP.UTF-8 # root password RUN echo password | passwd --stdin root # # sshd_config edit RUN sed -ri "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config RUN systemctl enable sshd.service CMD ["/sbin/init"]ansibleで接続用のコンテナを準備する(最初はssh使おうとしてたので作った)
- docker-compose
version: '3.7' services: srv1: build: context: . dockerfile: srv-dockerfile hostname: srv1 container_name: srv1 environment: - TZ=Asia/Tokyo restart: always tty: true networks: app_net: ipv4_address: 172.16.238.101 srv2: build: context: . dockerfile: srv-dockerfile hostname: srv2 container_name: srv2 environment: - TZ=Asia/Tokyo restart: always tty: true networks: app_net: ipv4_address: 172.16.238.102 # 固定IP付与用のNW設定 networks: app_net: driver: bridge ipam: driver: default config: - subnet: 172.16.238.0/24sshするのに便利そうだなと 固定IP を付与した。
コンテナ起動
# docker-compose up -d Starting srv1 ... done Starting srv2 ... doneansible側
- hosts
[testGrp] 172.16.238.101 172.16.238.102
- yaml
- name: start up a docker container hosts: localhost tasks: - name: start up a docker container by running bash command: docker-compose -f /srv/ansible/docker-compose.yml up -d tags: - never # docker-composeで「alwaus: restart」としているので、普段は動作しないようにした - name: connection test hosts: testGrp connection: docker #connection plugin利用の指定 tasks: - name: ping ping:playbook実行結果
# ansible-playbook -i hosts test-ansible.yml --check --diff PLAY [start up a docker container] *********************************************************************************************************************************** PLAY [connection test] *********************************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************************************** fatal: [172.16.238.101]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp-1602479114.98-3164-90901945313893 `\" && echo ansible-tmp-1602479114.98-3164-90901945313893=\"` echo ~/.ansible/tmp/ansible-tmp-1602479114.98-3164-90901945313893 `\" ), exited with result 1", "unreachable": true} fatal: [172.16.238.102]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp-1602479115.05-3165-268763785818242 `\" && echo ansible-tmp-1602479115.05-3165-268763785818242=\"` echo ~/.ansible/tmp/ansible-tmp-1602479115.05-3165-268763785818242 `\" ), exited with result 1", "unreachable": true} PLAY RECAP *********************************************************************************************************************************************************** 172.16.238.101 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0 172.16.238.102 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0無事失敗した。
エラーメッセージにtmpフォルダの権限が無いかもってあったけど、pingで権限不足とかそんなことはあるまい、、、と放置。# docker-compose ps Name Command State Ports --------------------------------- srv1 /sbin/init Up srv2 /sbin/init Up # docker inspect srv1 | grep IPv4Address "IPv4Address": "172.16.238.101" # ping 172.16.238.101 PING 172.16.238.101 (172.16.238.101) 56(84) bytes of data. 64 bytes from 172.16.238.101: icmp_seq=1 ttl=64 time=0.133 ms 64 bytes from 172.16.238.101: icmp_seq=2 ttl=64 time=0.134 ms念の為、ping単体で実行したが、こっちは成功したので、コンテナ自体は問題ないと判断。
成功時の設定
- hosts
[testGrp] #172.16.238.101 #172.16.238.102 srv1 srv2参考になる記事を色々見ていたら、どの記事もプラグインを利用するときは「ホスト名」で指定していることに今更ながらに気付く(この時点で半日経過)。
ので、ターゲットの指定方法を「IP」から「コンテナ名」に変更。
※他にもdockerfileからssh消したりしてますが、成功には関係ないので割愛実行結果
# ansible-playbook -i hosts test-ansible.yml --check --diff PLAY [start up a docker container] *********************************************************************************************************************************** PLAY [connection test] *********************************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************************************** ok: [srv2] ok: [srv1] TASK [ping] ********************************************************************************************************************************************************** ok: [srv2] ok: [srv1] PLAY RECAP *********************************************************************************************************************************************************** srv1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 srv2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0成功!
まとめ
- 「Docker connection plugin for Ansible」を利用するとコンテナ内にsshdが要らない
- pluginを利用して接続する場合は、playbookで「connection: docker」を指定する
- ホストの指定方法は必ず「コンテナ名」で指定する
よくよく見なくてもと公式も含め「コンテナ名」とか「ホスト名」って書いてあるんですよね。
ssh接続の検証から入って、ひとまずIP固定化したしIP指定接続出来るなって思い込みで進めてた結果の失敗でした。。。残課題
- ansibleのコンテナ化
ホントはansibleも含めて全部コンテナで起動させたかったんですが、コンテナ化すると該当のプラグインを経由して他のコンテナにアクセスできず、ひとまずホストに直接インストールしているため。
DooD使えば出来るって記事があったんですが、なぜかコンテナに認識されず、dockerコマンドが利用できなかったんですよね。。。
まあメインはそこじゃないので、後々ですが。参考
- 投稿日:2020-10-12T10:21:38+09:00
docker経由でMinecraft資源(Spigot)サーバーを立てる
WSL2の真骨頂
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 余談はここから ↓-------------------
Minecraft触るのは何年ぶりだろう。
(ボートがぶつかるとすぐ壊れてた頃)
創った建築物をクリーパーに破壊されて辞めたのは覚えてる。久々に触ってみようということになり、
どうせなら複数サーバーでサーバー間移動できるようにしておきたいと、
Minecraftサーバーを立てる遊びを始める
(なにやってんねん (・ω・) )折角WSL2が入ってるし、
Linux上にインストールしてみよう。
ビルドがいるらしいからdocker使おう。
MODも使えるようにしよう。
サーバーも複数立てれるようにしよう。
と仕様が欲張りになり、
時間だけが過ぎていくことに。なんとか形になったからここに残す。
------------------- ↓ 本題はここから ↓-------------------
事前準備
Minecraftをインストールするのは当然。
Java Edition(Windows版)でいいと思う。
(無料じゃないよ!)WSL2とUbuntu、dockerが入ってるのが前提
この辺でも見て入れといて。WSL2+docker+PHPのWindows開発環境構築(1) WSL2編
WSL2+docker+PHPのWindows開発環境構築(2) docker編PowerShellから以下のようにコマンドが通れば成功
PS C:\> wsl -d Ubuntu-20.04 $ docker --version Docker version 19.03.13, build 4484c46d9dデータ保存用にディレクトリを切っておく
$ mkdir ~/minecraft_datadockerからコンテナ生成
SpigotというサーバーMODがあるそうな。
(よくわかってない)
spigotのdockerは別のが見つかるが、
よく使われる方にパラメータだけで設定できそうだからこちらを採用$ docker run -d -v ~/minecraft_data:/data -p 25565:25565 -e TYPE=SPIGOT -e EULA=TRUE --name mc itzg/minecraft-server起動はすぐだけど、
追加のダウンロードとかバイオーム生成とか諸々かかるので、
3分ぐらい待つ
( ˘ω˘ )スヤァ…起動確認
Minecraftを起動してMultiplayerから「Direct Connection」で接続を試す。
接続を確認してみる。
よしログインでけた (`・ω・´)キリッ
別ワールド生成
プラグイン追加
プラグインに関する詳細説明は後書きにするとして、
ここでは必要な分だけ書いておこう。$ docker stop mc $ cd ~/minecraft_data/plugins $ wget http://ci.onarandombox.com/job/Multiverse-Core/Release%20Build/artifact/target/Multiverse-Core-4.2.2.jar # マルチワールド管理 $ wget http://ci.onarandombox.com/job/Multiverse-Portals/Release%20Build/artifact/target/Multiverse-Portals-4.2.0.jar # ワールド間移動 $ wget https://ci.lucko.me/job/LuckPerms/lastStableBuild/artifact/bukkit/build/libs/LuckPerms-Bukkit-5.1.107.jar # プラグイン権限管理 $ docker start mc( ˘ω˘ )スヤァ…
( ゚д゚)ハッ!
プラグイン権限調整
ユーザー名をDozoとすると
$ docker exec -i mc rcon-cli > lp user Dozo permission set luckperms.* true > lp user Dozo permission set minecraft.command.* true > lp user Dozo permission set multiverse.* true > ^C (ctrl+c)コンソールからは無反応だがユーザー名さえ間違ってなければこれでよい
マイクラにログインして以下のコマンドを実行
/gamerule doDaylightCycle false実行できていれば成功
これは時間停止コマンドで作業中に夜が来てゾンビにやられることを防げるワールド生成
すべての準備ができたのでワールド生成といこう。
rcon-cli上でも生成はできるが、
実感が薄いのでマイクラ上で行う/mv create asset NORMAL Starting creation of world 'asset'... Complete!これでassetという名称の新しいワールドが生成された
移動は以下のコマンド/mvtp asset試しにネザーを創って移動してみると
よし!成功だ! (`・ω・´)キリッ
------------------- ↓ 後書はここから ↓-------------------
プラグイン設定
保存用ディレクトリにpluginsというのがあるが、
ここにビルド済みのプラグインファイル(jar)を置くことで、
プラグインを追加することができる
記事の頭の方にちょろっとあったデータ保存用ディレクトリがここで利いてくる。cloneしてmavenでビルドという流れだが、
ビルド済みなものを直接使う方が簡単でいい。書くプラグイン製作者はJenkinsを公開しているようで、
そちらから拝借しよう。
その際、最新のビルドではなく安定のビルドから取得マルチワールド
Multiverse
Multiverse was created at the dawn of Bukkit multiworld support. It has since then grown into a complete world management solution including special treatment of your nether worlds with Multiverse NetherPortals.
In the second delivery of Multiverse, we've broken it up into several smaller plugins that are each feature packed but not bloated! Multiverse provides the easiest to use world management solution for your Minecraft server, big or small, and with great addons like Portals and NetherPortals, what's not to love!
Multiverse is here and works for the latest server build! Is your server a Multiverse?
https://dev.bukkit.org/projects/multiverse-core/複数のサーバーを管理するプラグイン。ワールドの作成、再生成、サーバー間の移動など複数サーバーによるメリットを享受することができる。
各種プラグインは
名称 詳細 Jenkins URL Multiverse-core マルチサーバーのコアシステム http://ci.onarandombox.com/view/Multiverse/job/Multiverse-Core/ Multiverse-Portals サーバー間移動のポータルを構築 http://ci.onarandombox.com/view/Multiverse/job/Multiverse-Portals/ Multiverse-NetherPortals 上記のネザー用 http://ci.onarandombox.com/view/Multiverse/job/Multiverse-NetherPortals/ Multiverse-Inventories サーバー間のインベントリ管理 http://ci.onarandombox.com/view/Multiverse/job/Multiverse-Inventories/ どうせなら全部入れとくか。
$ cd ~/minecraft_data/plugins $ wget http://ci.onarandombox.com/job/Multiverse-Core/Release%20Build/artifact/target/Multiverse-Core-4.2.2.jar $ wget http://ci.onarandombox.com/job/Multiverse-Portals/Release%20Build/artifact/target/Multiverse-Portals-4.2.0.jar $ wget http://ci.onarandombox.com/job/Multiverse-NetherPortals/Release%20Build/artifact/target/Multiverse-NetherPortals-4.2.1.jar $ wget http://ci.onarandombox.com/job/Multiverse-Inventories/Release%20Build/artifact/target/Multiverse-Inventories-4.2.1.jarワールド生成のパラメータはこちら
https://github.com/Multiverse/Multiverse-Core/wiki/World-propertiesコマンドはマイクラ上かRCON上で。
$ docker exec -i mc rcon-cli > mvlist §d====[ Multiverse World List ]==== §fworld§f§f - §aNORMAL §fworld_the_end§f§f - §bTHE_END §fworld_nether§f§f - §cNETHER > mv create asset NORMAL Starting creation of world 'asset'... Complete! > mv modify set weather false asset §aSuccess!§f Property §bweather§f was set to §afalse > mv modify set time false asset §cSet the time to whatever you want! (Will NOT freeze time) > mv modify add creeper monsters asset §aSuccess! §bcreeper§f was §cremoved from §amonsters > mv create farm NORMAL -t FLAT Starting creation of world 'farm'... Complete! > mv modify set gamemode creative farm §aSuccess!§f Property §bgamemode§f was set to §acreative > mv modify set difficulty hard farm §aSuccess!§f Property §bdifficulty§f was set to §ahard > mv modify set hunger false farm §aSuccess!§f Property §bhunger§f was set to §afalseサーバー管理
LuckPerms
LuckPerms is a permissions plugin for Minecraft servers. It allows server admins to control what features players can use by creating groups and assigning permissions.
https://luckperms.netサーバーの権限などを管理するプラグイン
名称 詳細 Jenkins URL LuckPerms https://ci.lucko.me/job/LuckPerms/ $ cd ~/minecraft_data/plugins $ wget https://ci.lucko.me/job/LuckPerms/lastStableBuild/artifact/bukkit/build/libs/LuckPerms-Bukkit-5.1.107.jarLuckPermsプラグインはデフォルトで管理ユーザーを設定していないので、
再起動後、minecraftコンソールにアクセスしてユーザー登録をする。
ユーザー名をDozoとすると$ docker restart mc $ docker exec -i mc rcon-cli > lp user Dozo permission set luckperms.* true ctrl+Cバグなのかわからないが入力しても反応はないが、
ちゃんと機能はしている。
動作確認をするためクライアントで接続する/lp editor記載のURLをクリックしてアクセスするとパーミッション変更のWeb UIに移動するので、
各種設定を行うことができる。
とりあえずこのぐらい設定して微調整という感じで。
グループ名 権限 Admin minecraft.command.ban minecraft.command.pardon some.cool.admin.perm someplugin.vanish Mod minecraft.command.mute minecraft.command.unmute some.cool.mod.perm chatcolor.bold Default minecraft.command.say minecraft.command.me 参考:
Using WSL2 in a Docker Linux container on Windows to run a Minecraft Java Edition
- 投稿日:2020-10-12T09:51:20+09:00
INTERNAL ERROR: cannot create temporary directory! : Docker環境
RubyとRspecを学習中のゆーたです!
久しぶりに、自身のポートフォリオサイトを開いてみたら、本番環境で見たくない画面になっていました。
ただ、githubのdockerのissueにこの問題が上がっていたので、割と簡単に問題解決できました。また、AWSでRDSを使っていたので、データベースは安全でした。
RDSは、コストが高いですが、精神的によろしいですね!!環境
- Docker 19.03.5
- docker-compose 1.25.2
- nginx 1.15.8
解決方法
解決方法は、コンテナのイメージを削除することです。
ただ、コンテナの中身の情報は、消えるかもしれないです...
そこは、情報があいまいでした。$ docker rm $(docker ps -a -q) $ docker rm -f $(docker ps -a -q) $ docker-compose build --no-cache原因
docker-composeのディスクのスペースが少なくなってくるとdocker-composeが起動しなくなるようです。
つまり、docker-composeファイルで、データを維持したり、処理をまとめすぎるとキャッシュが溜まっていき、docker-composeのディスク領域がなくなり、
INTERNAL ERROR: cannot create temporary directory!
が起きるみたいです。参照
- 投稿日:2020-10-12T09:10:16+09:00
【ミライトデザイン社内勉強会#5】docker-compose.ymlとDockerFileを一行づつ読んでみる
最強のLaravel開発環境をDockerを使って構築する【新編集版】 - Qiita
で使用されているdocker-composer.yml
とdockerfile
が何をしているのかを一行づつ見てみるhttps://github.com/ucan-lab/docker-laravel
docker-compose.yml
version: "3.8" # ① docker file で使用するバージョンを指定 volumes: # ② VMの中にボリュームする領域を確保している db-store: php-fpm-socket: services: # ③ サービス1つ1つがコンテナ app: # ④ サービスの名前(任意でつけて大丈夫) build: ./docker/php # ⑤ ここにあるdockerファイルでビルドしろっていってる volumes: - php-fpm-socket:/var/run/php-fpm # ⑥ VM本体の領域に、コンテナの中の/var/run/php-fpmがマウントしている - ../backend:/work/backend web: build: ./docker/nginx ports: - 80:80 volumes: - php-fpm-socket:/var/run/php-fpm - ../backend:/work/backend db: build: ./docker/mysql volumes: - db-store:/var/lib/mysql ports: - 3306:3306① ファイルバージョン3リファレンスを作成する| Dockerドキュメント
このバージョンの指定によってファイルの書き方が変わってくる② Docker for mac の中にVMがありコンテナのデータをマウントする領域を確保している
VMにマウントすることでコンテナを削除してもデータが消えない
名前は任意につけて大丈夫。
- サービス
docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------- docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp docker-laravel_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp docker-laravel_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcpDockerFile
MySQL
https://github.com/ucan-lab/docker-laravel/blob/master/infra/docker/mysql/Dockerfile
# ① dockerhub からmysql8.0のイメージを取得している FROM mysql:8.0 # ② LABELを設定している LABEL maintainer="ucan-lab <yes@u-can.pro>" # ③ OSの環境変数に値を追加している ENV TZ=UTC \ # タイムゾーン # MYSQLが指定している環境変数を指定している MYSQL_DATABASE=laravel_local \ MYSQL_USER=phper \ MYSQL_PASSWORD=secret \ MYSQL_ROOT_PASSWORD=secret # ④ ホストのファイルをコンテナにコピーしている COPY ./my.cnf /etc/my.cnf
- ①
https://hub.docker.com/_/mysql
からimageを取得している
- :8.0 を記述しないとlatestのバージョンを持ってくる
- ② Fromの後にlabelでmaintainerをかく観衆があるよ
- ③ mysqlのイメージに環境変数を渡せば、公式のイメージが勝手に設定してくれる
- https://hub.docker.com/_/mysql の
Environment Variables
に記載がある- ④ 左がホストで右がコンテナのパス
- ホストに存在するファイルをコンテナの指定したパスにコピーしてる
buildする
13:01:24 ❯ docker build -t mysql_image . Sending build context to Docker daemon 2.56kB Step 1/4 : FROM mysql:8.0 ---> 0d64f46acfd1 Step 2/4 : LABEL maintainer="ucan-lab <yes@u-can.pro>" ---> Using cache ---> ef5acb641867 Step 3/4 : ENV TZ=UTC MYSQL_DATABASE=laravel_local MYSQL_USER=phper MYSQL_PASSWORD=secret MYSQL_ROOT_PASSWORD=secret ---> Using cache ---> 3eb31d9f4c84 Step 4/4 : COPY ./my.cnf /etc/my.cnf ---> Using cache ---> c064e3fa414a Successfully built c064e3fa414a Successfully tagged mysql_image:latest
- buildに成功すると、dockerimageができる
13:08:35 ❯ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql_image latest f9666eb795b6 8 seconds ago 544MB
- imageを元にコンテナが作成される
- imageを使っているコンテナがあるとimage消せない
コンテナを立ち上げてみる
docker hub の ubuntu を立ち上げてみる
13:08:43 ❯ docker run -it ubuntu bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 54ee1f796a1e: Pull complete f7bfea53ad12: Pull complete 46d371e02073: Pull complete b66c17bbf772: Pull complete Digest: sha256:31dfb10d52ce76c5ca0aa19d10b3e6424b830729e32a89a7c6eee2cda2be67a5 Status: Downloaded newer image for ubuntu:latest root@d9d9fe415292:/# exit exit
- コンテナの削除
$ docker rm <CONTAINER ID>
- imageの削除
$ docker rmi <IMAGE ID>参考記事
- 投稿日:2020-10-12T09:10:16+09:00
【ミライトデザイン社内勉強会#5】docker-compose.ymlとDockerfileを一行づつ読んでみる
最強のLaravel開発環境をDockerを使って構築する【新編集版】 - Qiita
で使用されているdocker-composer.yml
とDockerfile
が何をしているのかを一行づつ見てみるhttps://github.com/ucan-lab/docker-laravel
docker-compose.yml
version: "3.8" # ① docker file で使用するバージョンを指定 volumes: # ② VMの中にボリュームする領域を確保している db-store: php-fpm-socket: services: # ③ サービス1つ1つがコンテナ app: # ④ サービスの名前(任意でつけて大丈夫) build: ./docker/php # ⑤ ここにあるdockerファイルでビルドしろっていってる volumes: - php-fpm-socket:/var/run/php-fpm # ⑥ VM本体の領域に、コンテナの中の/var/run/php-fpmがマウントしている - ../backend:/work/backend web: build: ./docker/nginx ports: - 80:80 volumes: - php-fpm-socket:/var/run/php-fpm - ../backend:/work/backend db: build: ./docker/mysql volumes: - db-store:/var/lib/mysql ports: - 3306:3306① ファイルバージョン3リファレンスを作成する| Dockerドキュメント
このバージョンの指定によってファイルの書き方が変わってくる② Docker for mac の中にVMがありコンテナのデータをマウントする領域を確保している
VMにマウントすることでコンテナを削除してもデータが消えない
名前は任意につけて大丈夫。
- サービス
docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------- docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp docker-laravel_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp docker-laravel_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcpDockerfile
MySQL
https://github.com/ucan-lab/docker-laravel/blob/master/infra/docker/mysql/Dockerfile
# ① dockerhub からmysql8.0のイメージを取得している FROM mysql:8.0 # ② LABELを設定している LABEL maintainer="ucan-lab <yes@u-can.pro>" # ③ OSの環境変数に値を追加している ENV TZ=UTC \ # タイムゾーン # MYSQLが指定している環境変数を指定している MYSQL_DATABASE=laravel_local \ MYSQL_USER=phper \ MYSQL_PASSWORD=secret \ MYSQL_ROOT_PASSWORD=secret # ④ ホストのファイルをコンテナにコピーしている COPY ./my.cnf /etc/my.cnf
- ①
https://hub.docker.com/_/mysql
からimageを取得している
- :8.0 を記述しないとlatestのバージョンを持ってくる
- ② Fromの後にlabelでmaintainerをかく観衆があるよ
- ③ mysqlのイメージに環境変数を渡せば、公式のイメージが勝手に設定してくれる
- https://hub.docker.com/_/mysql の
Environment Variables
に記載がある- ④ 左がホストで右がコンテナのパス
- ホストに存在するファイルをコンテナの指定したパスにコピーしてる
buildする
13:01:24 ❯ docker build -t mysql_image . Sending build context to Docker daemon 2.56kB Step 1/4 : FROM mysql:8.0 ---> 0d64f46acfd1 Step 2/4 : LABEL maintainer="ucan-lab <yes@u-can.pro>" ---> Using cache ---> ef5acb641867 Step 3/4 : ENV TZ=UTC MYSQL_DATABASE=laravel_local MYSQL_USER=phper MYSQL_PASSWORD=secret MYSQL_ROOT_PASSWORD=secret ---> Using cache ---> 3eb31d9f4c84 Step 4/4 : COPY ./my.cnf /etc/my.cnf ---> Using cache ---> c064e3fa414a Successfully built c064e3fa414a Successfully tagged mysql_image:latest
- buildに成功すると、dockerimageができる
13:08:35 ❯ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql_image latest f9666eb795b6 8 seconds ago 544MB
- imageを元にコンテナが作成される
- imageを使っているコンテナがあるとimage消せない
コンテナを立ち上げてみる
docker hub の ubuntu を立ち上げてみる
13:08:43 ❯ docker run -it ubuntu bash Unable to find image 'ubuntu:latest' locally latest: Pulling from library/ubuntu 54ee1f796a1e: Pull complete f7bfea53ad12: Pull complete 46d371e02073: Pull complete b66c17bbf772: Pull complete Digest: sha256:31dfb10d52ce76c5ca0aa19d10b3e6424b830729e32a89a7c6eee2cda2be67a5 Status: Downloaded newer image for ubuntu:latest root@d9d9fe415292:/# exit exit
- コンテナの削除
$ docker rm <CONTAINER ID>
- imageの削除
$ docker rmi <IMAGE ID>参考記事
- 投稿日:2020-10-12T01:47:50+09:00
GitLab構築
DockerForWindowsでGitLab・Mattermostを構築する
はじめに
MattermostAPIを使って色々試してみたいと思い、サクッとGitLab環境を構築しようと思ったら思いの外ハマりまくったので、やったことを残しておきます。
やりたいこととしては、DockerForWindowsを用いてGitLab環境を構築する、です。動くもの
GitHub上に置いています。(https://github.com/shimi58/CentOS8_GitLab)
ただし、Mattermost設定に関しては構築する毎に変わってくるので後述の手順が必要。
動作確認環境 バージョン Windows10 Home Edition バージョン2004 Docker for Windows 2.4.0.0 ※GitLabのDockerは、DockerForWindows公式サポート外なんですよねぇ。。ポートフォワーディングがうまく行かず(80→80はうまくいくけど、8080→80とかだと繋がらなくなる)、そういうことかなぁと。
環境構築
Docker上でCentOS8構築
Dockerfileに記述していきます。
出来上がりは以下のとおり。FROM centos:8 # 日本語化 RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial && \ dnf -y upgrade && \ dnf -y install glibc-locale-source && \ dnf clean all && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # Gitlabインストール用にLANGをC.UTF-8に変更しておく ENV LANG="C.UTF-8" \ LANGUAGE="ja_JP:ja" \ LC_ALL="ja_JP.UTF-8" # rootパスワード設定 RUN echo "root:root" | chpasswd # ===== # BASE packages # ===== RUN dnf install -y openssl openssl-devel openssh openssh-server wget sudo unzip which tree git firewalld # ===== # GitLab CEをインストール # ===== RUN curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash RUN dnf install -y gitlab-cedocker-compose.ymlversion: '3' services: centos8: container_name: "centos8" build: ./ tty: true privileged: true command: /sbin/init ports: - "2222:22" - "9080:9080" #GitLab用 - "9081:9081" #GitLabMattermost用 - '10443:443' volumes: # 公式に則って永続化 - './srv/gitlab/config:/etc/gitlab' #GitLab定義ファイルを配置 - './srv/gitlab/logs:/var/log/gitlab' #GItLabログファイル出力 - './srv/gitlab/data:/var/opt/gitlab' #GItLabデータ格納補足
日本語環境設定
# 日本語化 RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial && \ dnf -y upgrade && \ dnf -y install glibc-locale-source && \ dnf clean all && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # Gitlabインストール用にLANGをC.UTF-8に変更しておく ENV LANG="C.UTF-8" \ LANGUAGE="ja_JP:ja" \ LC_ALL="ja_JP.UTF-8"こちら(https://qiita.com/polarbear08/items/e5c00869c7566db5f7b8 )を参考にさせていただきました。
LANGをC.UTF-8にしておかないと、「gitlab-ctl reconfigure」のDBマイグレーションあたりで止まるので要注意。GitLab CEをインストール
RUN curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash RUN dnf install -y gitlab-ceこちらは公式にある手順の通りです。(公式だとサンプルはgitlab-eeになっているので注意)
データ永続化
docker-compose.ymlvolumes: # 公式に則って永続化 - './srv/gitlab/config:/etc/gitlab' #GitLab定義ファイルを配置 - './srv/gitlab/logs:/var/log/gitlab' #GItLabログファイル出力 - './srv/gitlab/data:/var/opt/gitlab' #GItLabデータ格納こちらを設定しておくと、コンテナを落としてもデータが保持された状態になる
構築手順
前述のDockerfile、docker-compose.ymlを任意のディレクトリに配置する
配置したディレクトリに移動し、コンテナを起動する
docker-compose up -dgitlab.rbを所定のフォルダに配置する
srv └─gitlab ├─config │ gitlab.rb │ ├─data └─logsこのファイルはこちら(https://github.com/shimi58/CentOS8_GitLab )に。
※最初は後述のMattermostの設定をコメントアウトしたほうがいいかも。(Applicationsに出てこなくなったり、手順通りできなくなる可能性あり)GitLabのポートを設定する
gitlab.rbexternal_url 'http://localhost:9080'GitLab Mattermostを有効化する
gitlab.rbmattermost_external_url 'http://localhost:9081' mattermost['enable'] = trueコンテナにログインする
docker exec -it centos8 bash※DockerForWindowsのCLIからログインすると、LANG設定まわりが反映されないので、powershellからログインしている
※LANG設定が期待通りGitLab設定を反映する
sudo /opt/gitlab/embedded/bin/runsvdir-start & gitlab-ctl reconfigure※「gitlab-ctl reconfigure」単独だと途中で止まるので、こちら(https://teratail.com/questions/229107 )を参考に、runsvdir-start をバックグラウンド実行してから reconfigure。
初回は5分弱はかかります。反映が終わったら、GitLabにアクセス
http://localhost:9080※ログインできることを確認する
- このタイミングでMattermostも表示できる ```url http://localhost:9081 ```補足
- 以降はMattermostのSSO連携の手順となる
パスワード初期設定を終え、ログイン
Mattermostの設定を確認する
- 「Admin Area」→「Applications」に移動
- すでにMattermost用の定義があればそれを使用し、なければ新規に作成する(手順通りやると最初から項目が出てくるはず、、)
※こちら(https://qiita.com/TomoyukiSugiyama/items/0d828ee2325095a7f247 )を参考にさせていただきました。
上述で確認した、「Application ID」、「Secret」をgitlab.rbに反映する
あわせて、必要な設定を追加するgitlab.rbmattermost['gitlab_enable'] = true #SSO有効化 mattermost['gitlab_id'] = "5e7f43cdf588e92c8b0ca589832c64dd5094969c5848667a09e50ffe4834c065" #Application ID mattermost['gitlab_secret'] = "23791f7219f6782f38c9c1f462c5e715e88216ee13d3513a122dc9c302ba130b" #secret mattermost['gitlab_auth_endpoint'] = "http://localhost:9080/oauth/authorize" #GitLabのURLを記載する mattermost['gitlab_token_endpoint'] = "http://localhost:9080/oauth/token" #GitLabのURLを記載する mattermost['gitlab_user_api_endpoint'] = "http://localhost:9080/api/v4/user" #GitLabのURLを記載するGitLab設定を反映する
gitlab-ctl reconfigureMattermostから、「Sign in with GitLab」を選択し、ログインする
Mattermost画面に遷移することを確認する
さいごに
今回構築したGitLabですが、COREi7、メモリ16Gでもめちゃんこ重たいです。
※CPUメモリともにめっちゃ頑張ってます。。
ということで、ようやくMattermostAPIが触れる下地ができたので、次はAPI触っていきたいと思います。
- 投稿日:2020-10-12T01:47:50+09:00
DockerForWindowsでGitLab・Mattermostを構築する
DockerForWindowsでGitLab・Mattermostを構築する
はじめに
MattermostAPIを使って色々試してみたいと思い、サクッとGitLab環境を構築しようと思ったら思いの外ハマりまくったので、やったことを残しておきます。
やりたいこととしては、DockerForWindowsを用いてGitLab環境を構築する、です。動くもの
GitHub上に置いています。(https://github.com/shimi58/CentOS8_GitLab)
ただし、Mattermost設定に関しては構築する毎に変わってくるので後述の手順が必要。
動作確認環境 バージョン Windows10 Home Edition バージョン2004 Docker for Windows 2.4.0.0 ※GitLabのDockerは、DockerForWindows公式サポート外なんですよねぇ。。ポートフォワーディングがうまく行かず(80→80はうまくいくけど、8080→80とかだと繋がらなくなる)、そういうことかなぁと。
環境構築
Docker上でCentOS8構築
Dockerfileに記述していきます。
出来上がりは以下のとおり。FROM centos:8 # 日本語化 RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial && \ dnf -y upgrade && \ dnf -y install glibc-locale-source && \ dnf clean all && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # Gitlabインストール用にLANGをC.UTF-8に変更しておく ENV LANG="C.UTF-8" \ LANGUAGE="ja_JP:ja" \ LC_ALL="ja_JP.UTF-8" # rootパスワード設定 RUN echo "root:root" | chpasswd # ===== # BASE packages # ===== RUN dnf install -y openssl openssl-devel openssh openssh-server wget sudo unzip which tree git firewalld # ===== # GitLab CEをインストール # ===== RUN curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash RUN dnf install -y gitlab-cedocker-compose.ymlversion: '3' services: centos8: container_name: "centos8" build: ./ tty: true privileged: true command: /sbin/init ports: - "2222:22" - "9080:9080" #GitLab用 - "9081:9081" #GitLabMattermost用 - '10443:443' volumes: # 公式に則って永続化 - './srv/gitlab/config:/etc/gitlab' #GitLab定義ファイルを配置 - './srv/gitlab/logs:/var/log/gitlab' #GItLabログファイル出力 - './srv/gitlab/data:/var/opt/gitlab' #GItLabデータ格納補足
日本語環境設定
# 日本語化 RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial && \ dnf -y upgrade && \ dnf -y install glibc-locale-source && \ dnf clean all && \ localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 && \ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # Gitlabインストール用にLANGをC.UTF-8に変更しておく ENV LANG="C.UTF-8" \ LANGUAGE="ja_JP:ja" \ LC_ALL="ja_JP.UTF-8"こちら(https://qiita.com/polarbear08/items/e5c00869c7566db5f7b8 )を参考にさせていただきました。
LANGをC.UTF-8にしておかないと、「gitlab-ctl reconfigure」のDBマイグレーションあたりで止まるので要注意。GitLab CEをインストール
RUN curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash RUN dnf install -y gitlab-ceこちらは公式にある手順の通りです。(公式だとサンプルはgitlab-eeになっているので注意)
データ永続化
docker-compose.ymlvolumes: # 公式に則って永続化 - './srv/gitlab/config:/etc/gitlab' #GitLab定義ファイルを配置 - './srv/gitlab/logs:/var/log/gitlab' #GItLabログファイル出力 - './srv/gitlab/data:/var/opt/gitlab' #GItLabデータ格納こちらを設定しておくと、コンテナを落としてもデータが保持された状態になる
構築手順
前述のDockerfile、docker-compose.ymlを任意のディレクトリに配置する
配置したディレクトリに移動し、コンテナを起動する
docker-compose up -dgitlab.rbを所定のフォルダに配置する
srv └─gitlab ├─config │ gitlab.rb │ ├─data └─logsこのファイルはこちら(https://github.com/shimi58/CentOS8_GitLab )に。
※最初は後述のMattermostの設定をコメントアウトしたほうがいいかも。(Applicationsに出てこなくなったり、手順通りできなくなる可能性あり)GitLabのポートを設定する
gitlab.rbexternal_url 'http://localhost:9080'GitLab Mattermostを有効化する
gitlab.rbmattermost_external_url 'http://localhost:9081' mattermost['enable'] = trueコンテナにログインする
docker exec -it centos8 bash※DockerForWindowsのCLIからログインすると、LANG設定まわりが反映されないので、powershellからログインしている
※LANG設定が期待通りGitLab設定を反映する
sudo /opt/gitlab/embedded/bin/runsvdir-start & gitlab-ctl reconfigure※「gitlab-ctl reconfigure」単独だと途中で止まるので、こちら(https://teratail.com/questions/229107 )を参考に、runsvdir-start をバックグラウンド実行してから reconfigure。
初回は5分弱はかかります。反映が終わったら、GitLabにアクセス
http://localhost:9080※ログインできることを確認する
- このタイミングでMattermostも表示できる ```url http://localhost:9081 ```補足
- 以降はMattermostのSSO連携の手順となる
パスワード初期設定を終え、ログイン
Mattermostの設定を確認する
- 「Admin Area」→「Applications」に移動
- すでにMattermost用の定義があればそれを使用し、なければ新規に作成する(手順通りやると最初から項目が出てくるはず、、)
※こちら(https://qiita.com/TomoyukiSugiyama/items/0d828ee2325095a7f247 )を参考にさせていただきました。
上述で確認した、「Application ID」、「Secret」をgitlab.rbに反映する
あわせて、必要な設定を追加するgitlab.rbmattermost['gitlab_enable'] = true #SSO有効化 mattermost['gitlab_id'] = "5e7f43cdf588e92c8b0ca589832c64dd5094969c5848667a09e50ffe4834c065" #Application ID mattermost['gitlab_secret'] = "23791f7219f6782f38c9c1f462c5e715e88216ee13d3513a122dc9c302ba130b" #secret mattermost['gitlab_auth_endpoint'] = "http://localhost:9080/oauth/authorize" #GitLabのURLを記載する mattermost['gitlab_token_endpoint'] = "http://localhost:9080/oauth/token" #GitLabのURLを記載する mattermost['gitlab_user_api_endpoint'] = "http://localhost:9080/api/v4/user" #GitLabのURLを記載するGitLab設定を反映する
gitlab-ctl reconfigureMattermostから、「Sign in with GitLab」を選択し、ログインする
Mattermost画面に遷移することを確認する
さいごに
今回構築したGitLabですが、COREi7、メモリ16Gでもめちゃんこ重たいです。
※CPUメモリともにめっちゃ頑張ってます。。
ということで、ようやくMattermostAPIが触れる下地ができたので、次はAPI触っていきたいと思います。追記
永続化効かないかも。。また調べます。
- 投稿日:2020-10-12T01:44:43+09:00
docker-composeでホストのネットワークの好きなIPを指定して立ち上げる
やりたいこと
docker-compose up
ホストのネットワークの好きなIPアドレスを指定して立ち上げるなんの意味があるの?
基本は不要でnginx-proxyやtreafikなどのサービスディスカバリを使うのが正しい方法だと思う。
とはいえ、それじゃできないまれな↓みたいなユースケースもあると思うので備忘録として残しておく。
- 社内インフラなどIPを固定にしたいとき
- IPをずらして、ポートのブッキングを回避したいとき
- 8080,8081,8082...みたく、どのポートが空いているのかバトルにならないように
やりかた
macvlan
のnetwork driverを使う。docker-compose.ymlversion: "3.8" services: web01: image: nginx networks: macvlan: ipv4_address: 192.168.1.10 # ports # - "80:80" dockerのhostネットワークみたく、指定したIPでポートが全開放なので基本は不要 ...etc web01: image: nginx networks: macvlan: ipv4_address: 192.168.1.20 # ports # - "80:80" IPが違うのでポートがブッキングしない ...etc ...etc networks: macvlan: driver: macvlan driver_opts: parent: eno1 # 端末のネットワーク・インターフェースを指定する ipam: config: - subnet: 192.168.1.0/24 gateway: 192.168.1.1
- 投稿日:2020-10-12T01:43:27+09:00
【Docker】dockerのコンテナからホストにファイルをコピーする
はじめに
dockerのコンテナからファイルをローカルに持ってきたい場面があった。そこで調査したことをメモとして残しておく。
手順
- docker psコマンドを使用し、ファイルをコピーしたいdockerコンテナを調べる
- docker cpコマンドを使用し、コンテナからホストにファイルをコピーする
実際にhttpdコンテナの設定ファイルであるhttpd.confをコンテナからローカル(ホスト)にコピーする手順を例として示す。
1.ファイルをコピーしたいdockerコンテナを調べる。
以下のコマンドを実行し、コンテナIDを調べる。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c8caa876b98 httpd:2-alpine "httpd-foreground" 24 hours ago Up 24 hours 0.0.0.0:8080->80/tcp fluentd_docker_httpd_1上記コマンドより、コンテナIDが
1c8caa876b98
とわかった。2. コンテナからホストにファイルをコピーする
以下のコマンドを実行し、ファイルをコピー
//docker cp [コンテナID]:[コピーしたいファイルパス] [ローカルにコピーしたいパス] $ docker cp 1c8caa876b98:/usr/local/apache2/conf/httpd.conf conf/ $ ls conf/ ./ ../ httpd.confコピーできた!
まとめ
- dockerコンテナからホストにコピーする
- docker cpコマンドを使用する
docker cp [コンテナID]:[コピーしたいファイルパス] [ローカルにコピーしたいパス]
- 投稿日:2020-10-12T00:48:03+09:00
Dockerで[An HTTP request took too long to complete.]のエラーが出た際の対処法。
はじめに
Dockerを使用しており、
docker-compose up -d
でコンテナを起動しようとした際に、[An HTTP request took too long to complete.]のエラーが出た際の解決法です。エラー文
今まではコンテナを起動させてもエラーは出なかったが、いきなり同じコマンドでエラーが出た。
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information. If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).解決方法
結論から言うと、Docker for Windowsを再起動すれば直りました。
・画面右上のDockerのアイコン(クジラのアイコン)をクリック。
・Quit Docker Desktopをクリック。
・アプリが終了したら、Docker for Windowsを再起動させます。
・docker-compose up -d
でコンテナの起動。
無事、Dockerが起動しました。最後に
最近Dockerを使いはじめたばかりだったので、少し焦りましたが冷静に対処すれば簡単な解決方法でした。備忘録として載せておきます。最後まで読んでいただきありがとうございます
- 投稿日:2020-10-12T00:47:48+09:00
DockerのMySQLでdumpファイルを読み込む
目的
- DockerのMySQLにdumpファイルを読み込む方法をまとめる
実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) プロセッサ 2 GHz クアッドコアIntel Core i5 メモリ 32 GB 3733 MHz LPDDR4 グラフィックス Intel Iris Plus Graphics 1536 MB
- ソフトウェア環境
項目 情報 備考 dumpファイル作成MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする dumpファイル読み込みMySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする 前提条件
- dumpファイルが自分のPCのローカルに用意されていること。
- MySQLのコンテナが起動していること。
前提情報
- dumpファイルを読み込むDockerのMySQLは自分の先輩に用意していただいた環境のものとする。
概要
- dumpファイルの移動
- 読み込み
- 確認
詳細
dumpファイルの移動
- dumpファイルが設置されているディレクトリまで
$ cd
コマンドで移動する。下記コマンドを実行してdockerコンテナの中にdumpファイルをコピーする。
$ docker cp dumpファイル名 コンテナ名:/コピー先のdumpファイル名例えばローカルの
~/Downloads
直下にあるmy_dump.sqlをコンテナ名「docker_mysql_1」のルートディレクトリ直下にコピーしたい場合は下記のようになる。$ docker cp ~/Downloads/my_dump.sql docker_mysql_1:/my_dump.sql読み込み
下記コマンドを実行してMySQLのコンテナに入る。
$ docker exec -it コンテナ名 bash下記コマンドを実行してdumpファイルを読み込ませる。
$ mysql -u MySQLユーザ名 -pMySQLのユーザ名に紐付いたパスワード dumpファイルを読み込むDB名 < dumpファイル名確認
MySQLのコンテナ内で下記コマンドを実行してMySQLにログインする。
$ mysql -u root -p下記SQLを実行してdumpファイルの内容が正常に読み込まれテーブルなどが存在していることを確認する。
use dumpを読み込んだDB名; show tables;
- 投稿日:2020-10-12T00:11:31+09:00
docker環境構築してUbuntuコンテナを起動・停止するまで
環境構築がめんどくさいし、仮想環境はISO落としたりインストールしたりめんどくさいし
vagrantというので簡単に仮想環境も作れるみたいなんだけど
Hyper-VとかVM wareとか重いしどうしようと思っているときに
dockerの話を聞いたのでとりあえず入れてみようと思いました。わりとコンテナ化というワードをきくし、
わざわざリソース割り振るのも面倒なのでWindowsにdocker入れてコンテナの勉強。困ったことがあればquora( https://jp.quora.com/ )とかで聞けばいいのかな。
ゴール
- ubuntuをdockerで立ち上げる
インストール
https://www.docker.com/why-docker
+ Download Docker Desktopをクリック
+ DockerDesktop for windowsをクリック
+ GetStableをクリック
・・・407MBダウンロード・・・結局重い。
私のゴミみたいなネットワーク環境では環境ではダウンロードに5分。
- OKクリック
- インストール待ち(時間かかる)
再起動したらエラーが出ました。Linuxのカーネルがインストールされていないようです。
dockerはubuntuやnginx、nodejsなどが動くコンテナを作れるが、それを動かすベースとなるLinuxのカーネルが必要という認識です。
リンクからWSL2 Linuxカーネル更新プログラム
wsl_update_x64.msi
をダウンロードしてインストール。ついでに、Linuxカーネルと仮想マシン機能を有効にしておきます。以下のコマンドです。(参考:https://docs.microsoft.com/ja-jp/windows/wsl/install-win10
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartubuntuインストール
作ったイメージを上げることも想定していないので、dockerHUBアカウントは作らない。PowerShellやコマンドプロンプトを使いながら以下の流れでコンテナを作って操作
- ubuntuのイメージをDLコマンド
- コンテナの作成コマンド
- コンテナ操作コマンド
dockerにイメージがあるかを確認
docker imagesubuntuのイメージをDL
docker pull ubuntudockerのコンテナを作成
docker run -it --name test ubuntuコンテナの一覧を表示
docker ps -aコンテナの停止
docker stop testコンテナの開始
docker start testコンテナの中に入ってコマンドを打つ
docker exec -it test bashコンテナを削除
docker rm testubuntuをつかえたけど。
ifconfig
もip address show
も使えなかった。
イメージで何ができるかは明確にしておく必要がある。まとめ
- dockerのざっくりしたコマンドは理解。オプションはひとまず
pull
,run
,exec
,start
,stop
を覚える。- 落してきたイメージはできること、できないことが決まっている。