diff --git a/.config/mongo_initdb_example.js b/.config/mongo_initdb_example.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7e7321f3531cd085fb36b5d126012912683cbbe
--- /dev/null
+++ b/.config/mongo_initdb_example.js
@@ -0,0 +1,13 @@
+var user = {
+	user: 'example-misskey-user',
+	pwd: 'example-misskey-pass',
+	roles: [
+	    {
+		    role: 'readWrite',
+		    db: 'misskey'
+	    }
+	]
+};
+
+db.createUser(user);
+
diff --git a/.dockerignore b/.dockerignore
new file mode 100755
index 0000000000000000000000000000000000000000..a25d4e571827fba23c37c8aa7a3fb250665da632
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,12 @@
+.autogen
+.git
+.github
+.travis
+.vscode
+Dockerfile
+build/
+docker-compose.yml
+node_modules/
+mongo/
+redis/
+elasticsearch/
diff --git a/.gitignore b/.gitignore
index 2cea822c18fb7c581a82f9cfd94b51bfbe0e0ce6..1e12e20de273e46d1c447434d7c95ea02f8abe1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 /.config/*
 !/.config/example.yml
+!/.config/mongo_initdb_example.js
 /.vscode
 /node_modules
 /build
@@ -12,3 +13,6 @@ npm-debug.log
 run.bat
 api-docs.json
 *.log
+/redis
+/mongo
+/elasticsearch
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..64c0b8b589fd714a1e802e630021a80baa1bf61f
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,28 @@
+FROM alpine:latest AS base
+
+ENV NODE_ENV=production
+
+RUN apk add --no-cache nodejs nodejs-npm
+RUN apk add vips fftw --update-cache --repository https://dl-3.alpinelinux.org/alpine/edge/testing/
+WORKDIR /misskey
+COPY . ./
+
+FROM base AS builder
+
+RUN apk add --no-cache	gcc g++ python autoconf automake file make nasm
+RUN apk add vips-dev fftw-dev --update-cache --repository https://dl-3.alpinelinux.org/alpine/edge/testing/
+RUN npm install \
+    && npm install -g node-gyp \
+    && node-gyp configure \
+    && node-gyp build \
+    && npm run build
+
+FROM base AS runner
+
+COPY --from=builder /misskey/built ./built
+COPY --from=builder /misskey/node_modules ./node_modules
+
+RUN apk add --no-cache tini
+ENTRYPOINT ["/sbin/tini", "--"]
+
+CMD ["npm", "start"]
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1b2e6c9fc3c8f588b83fa5d2b96af94d5f87ec41
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,52 @@
+version: "3"
+
+services:
+  web:
+    build: .
+    restart: always
+    links:
+      - mongo
+      - redis
+#      - es
+    ports:
+      - "127.0.0.1:3000:3000"
+    networks:
+      - internal_network
+      - external_network
+
+  redis:
+    restart: always
+    image: redis:4.0-alpine
+    networks:
+      - internal_network
+### Uncomment to enable Redis persistance
+#    volumes:
+#      - ./redis:/data
+
+  mongo:
+    restart: always
+    image: mongo:4.1-bionic
+    networks:
+      - internal_network
+    environment:
+      MONGO_INITDB_DATABASE: "misskey"
+    volumes:
+      - ./.config/mongo_initdb.js:/docker-entrypoint-initdb.d/mongo_initdb.js:ro
+### Uncomment to enable MongoDB persistance
+#      - ./mongo:/data
+
+#  es:
+#    restart: always
+#    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
+#    environment:
+#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
+#    networks:
+#      - internal_network
+#### Uncomment to enable ES persistence
+##    volumes:
+##      - ./elasticsearch:/usr/share/elasticsearch/data
+
+networks:
+  internal_network:
+    internal: true
+  external_network:
diff --git a/docs/docker.en.md b/docs/docker.en.md
new file mode 100644
index 0000000000000000000000000000000000000000..d0546c0a2a07e93eeb7f0de1fd7696605782ed2e
--- /dev/null
+++ b/docs/docker.en.md
@@ -0,0 +1,47 @@
+Docker Guide
+================================================================
+
+This guide describes how to install and setup Misskey with Docker.
+
+[Japanese version also available - 日本語版もあります](./docker.ja.md)
+
+----------------------------------------------------------------
+
+*1.* Make configuration files
+----------------------------------------------------------------
+1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
+2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` Copy the `.config/mongo_initdb_example.js` and rename it to `mongo_initdb.js`.
+2. Edit `default.yml` and `mongo_initdb.js`.
+
+*2.* Configure Docker
+----------------------------------------------------------------
+Edit `docker-compose.yml`.
+
+*3.* Build Misskey
+----------------------------------------------------------------
+Build misskey with the following:
+
+`docker-compose build`
+
+*4.* That is it.
+----------------------------------------------------------------
+Well done! Now, you have an environment that run to Misskey.
+
+### Launch normally
+Just `docker-compose up -d`. GLHF!
+
+### Way to Update to latest version of your Misskey
+1. `git fetch`
+2. `git stash`
+3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
+4. `git stash pop`
+5. `docker-compose build`
+6. Check [ChangeLog](../CHANGELOG.md) for migration information
+7. `docker-compose stop && docker-compose up -d`
+
+### Way to execute cli command:
+`docker-compose run --rm web node cli/mark-admin @example`
+
+----------------------------------------------------------------
+
+If you have any questions or troubles, feel free to contact us!
diff --git a/docs/docker.ja.md b/docs/docker.ja.md
new file mode 100644
index 0000000000000000000000000000000000000000..e38f3e91a6c60e06c79bd4f0ad62b68c9ec7656f
--- /dev/null
+++ b/docs/docker.ja.md
@@ -0,0 +1,48 @@
+Dockerを使ったMisskey構築方法
+================================================================
+
+このガイドはDockerを使ったMisskeyセットアップ方法について解説します。
+
+[英語版もあります - English version also available](./docker.en.md)
+
+----------------------------------------------------------------
+
+*1.* 設定ファイルを作成する
+----------------------------------------------------------------
+1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする
+2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` `.config/mongo_initdb_example.js`をコピーし名前を`mongo_initdb.js`にする
+3. `default.yml`と`mongo_initdb.js`を編集する
+
+*2.* Dockerの設定
+----------------------------------------------------------------
+`docker-compose.yml`を編集してください。
+
+*3.* Misskeyのビルド
+----------------------------------------------------------------
+次のコマンドでMisskeyをビルドしてください:
+
+`docker-compose build`
+
+*4.* 以上です!
+----------------------------------------------------------------
+お疲れ様でした。これでMisskeyを動かす準備は整いました。
+
+### 通常起動
+`docker-compose up -d`するだけです。GLHF!
+
+### Misskeyを最新バージョンにアップデートする方法:
+1. `git fetch`
+2. `git stash`
+3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
+4. `git stash pop`
+5. `docker-compose build`
+6. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
+7. `docker-compose stop && docker-compose up -d`
+
+### cliコマンドを実行する方法:
+
+`docker-compose run --rm web node cli/mark-admin @example`
+
+----------------------------------------------------------------
+
+なにかお困りのことがありましたらお気軽にご連絡ください。
\ No newline at end of file