SlideShare a Scribd company logo
1 of 38
Download to read offline
Develop QNAP NAS App
by Docker
Terry Chen 陳彥村
Engineer @ QNAP
Who am I?
https://tw.linkedin.com/in/seterrychen
https://github.com/seterrychen
https://twitter.com/seterrychen
● Backend engineer : Java, Python, Linux
● QNAP Container Station/Linux Station
Outline
● How to develop QNAP NAS App
● Base knowledge of Docker
● Create Docker App on QNAP NAS in QPKG format
NAS - Network attached storage
From : http://www.slideshare.net/QNAP_Inc/general-tech-trainingstorageabcqnap20140302compressed-copy
Network
QNAP AppCenter
● Customize your QNAP NAS with Apps
QPKG
● QNAP package, like deb(Debian/Ubuntu),
rpm(Red Hat/CentOS)
● QNAP tool-chain:
https://sourceforge.net/projects/qosgpl/files/QNAP%20NAS%20Tool%20Chains/
● QPKG format:
[/share/CACHEDEV3_DATA/.qpkg/QDK/tester] # ls
arm-x09/ arm-x31/ config/ package_routines shared/
x86_64/ arm-x19/ arm-x41/ icons/
qpkg.cfg x86/ x86_ce53xx/
Package application by QDK/QDK2
● QDK
http://www.qnap.com.tw/event/dev/cht/p_qdk.php
● QDK2
https://github.com/qnap-dev/qdk2
● QDK2 with Docker
https://github.com/fcwu/docker-qdk2
QDK
http://download.qnap.com/dev/QDK_Quick_Start_Guide_v4_eng.pdf
QDK2
● https://github.com/qnap-dev/qdk2
● Debian/Ubuntu base tool
● Support various source
Docker review
What is Docker?
● Docker allows you to package an application
with all of its dependencies into a standardized
unit for software development.
Others
App
image
Images center - Docker Hub
How to ship application by Docker
892607a8d00b 0 B
0b10aa9d5e8a 0 B
f4e6d72dbf27 22 B
9c6eed7ce0e9 57.66 MB
2eda4505e518 0 B
2a6ec6bae792 0 B
32f2a4cccab8 0 B
70e9a6907f10 125.1 MB
nginx:1.10
Image
Layer
$ docker pull nginx:1.10
Docker storage (version: 1.9.1)
vagrant@test:~$ sudo docker info
Containers: 0
Images: 2
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
………
892607a8d00b 0 B
0b10aa9d5e8a 0 B
f4e6d72dbf27 22 B
9c6eed7ce0e9 57.66 MB
2eda4505e518 0 B
2a6ec6bae792 0 B
32f2a4cccab8 0 B
70e9a6907f10 125.1 MB
Nginx:1.10
vagrant@test:~$ sudo ls -l /var/lib/docker/aufs/diff
total 32
drwxr-xr-x 2 root root 4096 May 1 07:40 0b10aa9d5e8a3dd8de176539bd...
drwxr-xr-x 2 root root 4096 May 1 07:39 2a6ec6bae79235ea27adcceff6...
drwxr-xr-x 2 root root 4096 May 1 07:39 2eda4505e518d08147e4fab915...
drwxr-xr-x 2 root root 4096 May 1 07:15 32f2a4cccab87ff519e17c9cf4...
drwxr-xr-x 21 root root 4096 May 1 07:15 70e9a6907f1068b3e08a9e6357...
drwxr-xr-x 2 root root 4096 May 1 07:40 892607a8d00ba2ad196a7d8a43...
drwxr-xr-x 7 root root 4096 May 1 07:40 9c6eed7ce0e9c7f8ab8e95d2f7...
drwxr-xr-x 3 root root 4096 May 1 07:40 f4e6d72dbf272d7e2ba0ef48f7...
Docker storage (version: 1.9.1)
vagrant@test:~$ sudo docker info
Containers: 0
Images: 2
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
………
892607a8d00b 0 B
0b10aa9d5e8a 0 B
f4e6d72dbf27 22 B
9c6eed7ce0e9 57.66 MB
2eda4505e518 0 B
2a6ec6bae792 0 B
32f2a4cccab8 0 B
70e9a6907f10 125.1 MB
Nginx:1.10
root@test:/var/lib/docker/aufs/diff/70e9a6907f1068b3e08a9e...# ls
bin boot dev etc home lib lib64 media mnt opt
proc root run sbin srv sys tmp usr var
root@test:/var/lib/docker/aufs/diff/9c6eed7ce0e9c7f8ab8e95...# ls
etc lib tmp usr var
AUFS – Another Union File System
From : https://docs.docker.com/engine/userguide/storagedriver/aufs-driver/
Run container (version: 1.9.1)
$ docker run -d -p 80:80 nginx:1.10
Docker
Client
Docker
Daemon
Send Request
892607a8d00b 0 B
0b10aa9d5e8a 0 B
f4e6d72dbf27 22 B
9c6eed7ce0e9 57.66 MB
2eda4505e518 0 B
2a6ec6bae792 0 B
32f2a4cccab8 0 B
70e9a6907f10 125.1 MB
Read/Writer Container Layer
Nginx:1.10
Send Response
Image read only
Simplified diagram
copy-on-write strategy
892607a8d00b 0 B
0b10aa9d5e8a 0 B
f4e6d72dbf27 22 B
9c6eed7ce0e9 57.66 MB
2eda4505e518 0 B
2a6ec6bae792 0 B
32f2a4cccab8 0 B
70e9a6907f10 125.1 MB
Read/Writer
Image read only
Nginx:1.10
Read/Writer
Read/Writer
Container-1
Container-2
Container-3
Basic isolation of Linux
● chroot – change root directory
root@test:/var/lib/docker/aufs/diff/70e9a6907f1068b3e08a9e...# ls
bin boot dev etc home lib lib64 media mnt opt
proc root run sbin srv sys tmp usr var
root@test:/var/lib/docker/aufs/diff/70e9a6907f1068b3e08a9e...# chroot .
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
root@test:/# ls -al
bin boot dev etc home lib lib64 media mnt opt
proc root run sbin srv sys tmp usr var
root@test:/# ls -al ../
bin boot dev etc home lib lib64 media mnt opt
proc root run sbin srv sys tmp usr var
Basic isolation of Linux
● chroot – change root directory
Filesystem Isolation
root@test:/# mount -t proc proc /proc
vagrant@test:~$ ps -ef
root 2192 906 0 02:54 ? 00:00:00 docker-proxy -proto ...
root 2215 906 0 02:54 ? 00:00:00 docker-proxy -proto ...
......
vagrant 2275 1915 0 03:03 pts/5 00:00:00 ps -ef
# using chroot
root@test:/# ps -ef
root 2192 906 0 02:54 ? 00:00:00 docker-proxy -proto ...
root 2215 906 0 02:54 ? 00:00:00 docker-proxy -proto ...
......
root 2277 2269 0 03:03 ? 00:00:00 ps -ef
How to isolate by Docker
● Linux Kernel feature:
– Cgroups
– Namespaces
● Mount namespaces
● UTS namespaces
● IPC namespaces
● PID namespaces
● Network namespaces
● User namespaces
Process namespace
From : http://dockone.io/article/783
Stop container
From : http://dockone.io/article/783 From:
https://twitter.com/turnoff_us/status/710736561676132352/photo/1
Docker on Linux
From : https://en.wikipedia.org/wiki/Docker_(software)
libcontainer
libvirt
systemd-
nspawnLXC
cgroups namespaces
SELinux
AppArmor
Netfilter
Netlink
capabilities
Docker
Linux kernel
VM vs Container
From : https://www.docker.com/what-docker
The power of Docker
From:https://yq.aliyun.com/articles/32071
Back to docker-qdk2
https://github.com/fcwu/docker-qdk2
Dockerize App by Dockerfile
From : https://github.com/nginxinc/docker-nginx/blob/41aa13f7d2c24407e483c40fb1e8b33e73462ff1/mainline/jessie/Dockerfile
Build and Ship
● Build
– docker build -t your_account/app_name .
● Ship
– docker login --username=yourname
--email=youremail@company.com
– docker push your_account/app_name
Start/Stop script
#!/bin/sh
...
case "$1" in
start)
ENABLED=$(/sbin/getcfg $QPKG_NAME Enable -u -d FALSE -f $CONF)
if [ "$ENABLED" != "TRUE" ]; then
echo "$QPKG_NAME is disabled."
exit 1
fi
: ADD START ACTIONS HERE
;;
stop)
: ADD STOP ACTIONS HERE
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
Example: ghost
● Just a blogging platform https://ghost.org
Build qpkg
$ git clone https://github.com/fcwu/docker-qdk2.git
$ cd docker-qdk2
$ docker run -it --rm 
-v ${PWD}/example:/example 
dorowu/qdk2 bash -c "cd /example; make"
$ ls -l example/ghost/build/ghost_0.7.4_x86_64.qpkg
-rw-r--r-- 1 u u 24242 Dec 30 13:10 example/ghost/build/ghost_0.7.4_x86_64.qpkg
Container Station API
● Version 1.6
- qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "install"}'
- qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "start"}'
- qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "stop"}'
- qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "remove"}'
docker-compose
● docker-compose.yml of Online-document
app:
image: dorowu/online-document.amd64:0.8.111
ports:
- "127.0.0.1:10001:5000"
volumes:
- /share:/share
- /mnt/rf/cd:/mnt/rf/cd
- /var/run/qbus.sock:/var/run/qbus.sock
● Read more: https://docs.docker.com/compose/
Apache config
● online-document.conf
ProxyPass /online-document/ws ws://127.0.0.1:10001/online-document/ws retry=0
ProxyPass /online-document/ http://127.0.0.1:10001/online-document/ retry=0
Create Issues/Pull Request
● https://github.com/fcwu/docker-qdk2
● https://github.com/qnap-dev/container-station-api
How to debug (In my case)
From : http://9gag.com/gag/anYZ9Eo/my-code-works-but-i-don-t-know-why
How to Learn (In my case)
“Try to learn something about everything and
everything about something.”
Thomas Huxley Quotes
Read more : 陈天:如何快速掌握一门技术? (http://blog.jobbole.com/77712/)
Thank you

More Related Content

What's hot

PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!株式会社クライム
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤Yu Otsubo
 
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)NTT DATA Technology & Innovation
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド崇介 藤井
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座Samir Hammoudi
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService PrincipalToru Makabe
 
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajpストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajpYahoo!デベロッパーネットワーク
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)NTT DATA Technology & Innovation
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性Ohyama Masanori
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
怖くないAzure Landing Zone
怖くないAzure Landing Zone怖くないAzure Landing Zone
怖くないAzure Landing ZoneAtsushi Kojima
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyTakakiyo Tanaka
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 

What's hot (20)

PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
PostgreSQLからのデータ連携/同期も完全対応!DBを『活かす』なら、Syniti DR 9.7!
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
 
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)
プロセスマイニングとソースコード解析を用いたマイクロサービス分割(ソフトウェアエンジニアリングシンポジウム2021 発表資料)
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
 
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajpストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
ストリーム処理プラットフォームにおけるKafka導入事例 #kafkajp
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
監査要件を有するシステムに対する PostgreSQL 導入の課題と可能性
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
怖くないAzure Landing Zone
怖くないAzure Landing Zone怖くないAzure Landing Zone
怖くないAzure Landing Zone
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere Liberty
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
Oracle Analytics Server のご紹介【2021年3月版】
Oracle Analytics Server のご紹介【2021年3月版】Oracle Analytics Server のご紹介【2021年3月版】
Oracle Analytics Server のご紹介【2021年3月版】
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 

Viewers also liked

Using docker to develop NAS applications
Using docker to develop NAS applicationsUsing docker to develop NAS applications
Using docker to develop NAS applicationsTerry Chen
 
QNAP COSCUP Container Station
QNAP COSCUP Container StationQNAP COSCUP Container Station
QNAP COSCUP Container StationWu Fan-Cheng
 
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP DockerQNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP DockerWu Fan-Cheng
 
Moment Co-efficient Method
Moment Co-efficient MethodMoment Co-efficient Method
Moment Co-efficient MethodYousuf Bin Aziz
 
Docker - Demo on PHP Application deployment
Docker - Demo on PHP Application deployment Docker - Demo on PHP Application deployment
Docker - Demo on PHP Application deployment Arun prasath
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionShingo Omura
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with dockerRuoshi Ling
 

Viewers also liked (7)

Using docker to develop NAS applications
Using docker to develop NAS applicationsUsing docker to develop NAS applications
Using docker to develop NAS applications
 
QNAP COSCUP Container Station
QNAP COSCUP Container StationQNAP COSCUP Container Station
QNAP COSCUP Container Station
 
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP DockerQNAP MOPCON 2015 -  輕鬆打造持續整合開發環境,使用 QNAP Docker
QNAP MOPCON 2015 - 輕鬆打造持續整合開發環境,使用 QNAP Docker
 
Moment Co-efficient Method
Moment Co-efficient MethodMoment Co-efficient Method
Moment Co-efficient Method
 
Docker - Demo on PHP Application deployment
Docker - Demo on PHP Application deployment Docker - Demo on PHP Application deployment
Docker - Demo on PHP Application deployment
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In Production
 
How to deploy PHP projects with docker
How to deploy PHP projects with dockerHow to deploy PHP projects with docker
How to deploy PHP projects with docker
 

Similar to Develop QNAP NAS App by Docker

Docker and friends at Linux Days 2014 in Prague
Docker and friends at Linux Days 2014 in PragueDocker and friends at Linux Days 2014 in Prague
Docker and friends at Linux Days 2014 in Praguetomasbart
 
Automate drupal deployments with linux containers, docker and vagrant
Automate drupal deployments with linux containers, docker and vagrant Automate drupal deployments with linux containers, docker and vagrant
Automate drupal deployments with linux containers, docker and vagrant Ricardo Amaro
 
Why you’re going to fail running java on docker!
Why you’re going to fail running java on docker!Why you’re going to fail running java on docker!
Why you’re going to fail running java on docker!Red Hat Developers
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xrkr10
 
Dockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and NovaDockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and Novaclayton_oneill
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)Soshi Nemoto
 
Check the version with fixes. Link in description
Check the version with fixes. Link in descriptionCheck the version with fixes. Link in description
Check the version with fixes. Link in descriptionPrzemyslaw Koltermann
 
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDrupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDropsolid
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 applicationRoman Rodomansky
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionBen Hall
 
Docker module 1
Docker module 1Docker module 1
Docker module 1Liang Bo
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesJérôme Petazzoni
 
codemotion-docker-2014
codemotion-docker-2014codemotion-docker-2014
codemotion-docker-2014Carlo Bonamico
 

Similar to Develop QNAP NAS App by Docker (20)

Docker and friends at Linux Days 2014 in Prague
Docker and friends at Linux Days 2014 in PragueDocker and friends at Linux Days 2014 in Prague
Docker and friends at Linux Days 2014 in Prague
 
Automate drupal deployments with linux containers, docker and vagrant
Automate drupal deployments with linux containers, docker and vagrant Automate drupal deployments with linux containers, docker and vagrant
Automate drupal deployments with linux containers, docker and vagrant
 
Why you’re going to fail running java on docker!
Why you’re going to fail running java on docker!Why you’re going to fail running java on docker!
Why you’re going to fail running java on docker!
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12x
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
From zero to Docker
From zero to DockerFrom zero to Docker
From zero to Docker
 
Dockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and NovaDockerizing the Hard Services: Neutron and Nova
Dockerizing the Hard Services: Neutron and Nova
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)
 
Docker practice
Docker practiceDocker practice
Docker practice
 
Check the version with fixes. Link in description
Check the version with fixes. Link in descriptionCheck the version with fixes. Link in description
Check the version with fixes. Link in description
 
Docker as an every day work tool
Docker as an every day work toolDocker as an every day work tool
Docker as an every day work tool
 
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google CloudDrupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
Drupaljam 2017 - Deploying Drupal 8 onto Hosted Kubernetes in Google Cloud
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Docker module 1
Docker module 1Docker module 1
Docker module 1
 
Introducing Docker
Introducing DockerIntroducing Docker
Introducing Docker
 
App container rkt
App container rktApp container rkt
App container rkt
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
codemotion-docker-2014
codemotion-docker-2014codemotion-docker-2014
codemotion-docker-2014
 

Recently uploaded

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 

Recently uploaded (20)

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 

Develop QNAP NAS App by Docker

  • 1. Develop QNAP NAS App by Docker Terry Chen 陳彥村 Engineer @ QNAP
  • 2. Who am I? https://tw.linkedin.com/in/seterrychen https://github.com/seterrychen https://twitter.com/seterrychen ● Backend engineer : Java, Python, Linux ● QNAP Container Station/Linux Station
  • 3. Outline ● How to develop QNAP NAS App ● Base knowledge of Docker ● Create Docker App on QNAP NAS in QPKG format
  • 4. NAS - Network attached storage From : http://www.slideshare.net/QNAP_Inc/general-tech-trainingstorageabcqnap20140302compressed-copy Network
  • 5. QNAP AppCenter ● Customize your QNAP NAS with Apps
  • 6. QPKG ● QNAP package, like deb(Debian/Ubuntu), rpm(Red Hat/CentOS) ● QNAP tool-chain: https://sourceforge.net/projects/qosgpl/files/QNAP%20NAS%20Tool%20Chains/ ● QPKG format: [/share/CACHEDEV3_DATA/.qpkg/QDK/tester] # ls arm-x09/ arm-x31/ config/ package_routines shared/ x86_64/ arm-x19/ arm-x41/ icons/ qpkg.cfg x86/ x86_ce53xx/
  • 7. Package application by QDK/QDK2 ● QDK http://www.qnap.com.tw/event/dev/cht/p_qdk.php ● QDK2 https://github.com/qnap-dev/qdk2 ● QDK2 with Docker https://github.com/fcwu/docker-qdk2
  • 9. QDK2 ● https://github.com/qnap-dev/qdk2 ● Debian/Ubuntu base tool ● Support various source
  • 11. What is Docker? ● Docker allows you to package an application with all of its dependencies into a standardized unit for software development. Others App image
  • 12. Images center - Docker Hub
  • 13. How to ship application by Docker 892607a8d00b 0 B 0b10aa9d5e8a 0 B f4e6d72dbf27 22 B 9c6eed7ce0e9 57.66 MB 2eda4505e518 0 B 2a6ec6bae792 0 B 32f2a4cccab8 0 B 70e9a6907f10 125.1 MB nginx:1.10 Image Layer $ docker pull nginx:1.10
  • 14. Docker storage (version: 1.9.1) vagrant@test:~$ sudo docker info Containers: 0 Images: 2 Server Version: 1.9.1 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs ……… 892607a8d00b 0 B 0b10aa9d5e8a 0 B f4e6d72dbf27 22 B 9c6eed7ce0e9 57.66 MB 2eda4505e518 0 B 2a6ec6bae792 0 B 32f2a4cccab8 0 B 70e9a6907f10 125.1 MB Nginx:1.10 vagrant@test:~$ sudo ls -l /var/lib/docker/aufs/diff total 32 drwxr-xr-x 2 root root 4096 May 1 07:40 0b10aa9d5e8a3dd8de176539bd... drwxr-xr-x 2 root root 4096 May 1 07:39 2a6ec6bae79235ea27adcceff6... drwxr-xr-x 2 root root 4096 May 1 07:39 2eda4505e518d08147e4fab915... drwxr-xr-x 2 root root 4096 May 1 07:15 32f2a4cccab87ff519e17c9cf4... drwxr-xr-x 21 root root 4096 May 1 07:15 70e9a6907f1068b3e08a9e6357... drwxr-xr-x 2 root root 4096 May 1 07:40 892607a8d00ba2ad196a7d8a43... drwxr-xr-x 7 root root 4096 May 1 07:40 9c6eed7ce0e9c7f8ab8e95d2f7... drwxr-xr-x 3 root root 4096 May 1 07:40 f4e6d72dbf272d7e2ba0ef48f7...
  • 15. Docker storage (version: 1.9.1) vagrant@test:~$ sudo docker info Containers: 0 Images: 2 Server Version: 1.9.1 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs ……… 892607a8d00b 0 B 0b10aa9d5e8a 0 B f4e6d72dbf27 22 B 9c6eed7ce0e9 57.66 MB 2eda4505e518 0 B 2a6ec6bae792 0 B 32f2a4cccab8 0 B 70e9a6907f10 125.1 MB Nginx:1.10 root@test:/var/lib/docker/aufs/diff/70e9a6907f1068b3e08a9e...# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@test:/var/lib/docker/aufs/diff/9c6eed7ce0e9c7f8ab8e95...# ls etc lib tmp usr var
  • 16. AUFS – Another Union File System From : https://docs.docker.com/engine/userguide/storagedriver/aufs-driver/
  • 17. Run container (version: 1.9.1) $ docker run -d -p 80:80 nginx:1.10 Docker Client Docker Daemon Send Request 892607a8d00b 0 B 0b10aa9d5e8a 0 B f4e6d72dbf27 22 B 9c6eed7ce0e9 57.66 MB 2eda4505e518 0 B 2a6ec6bae792 0 B 32f2a4cccab8 0 B 70e9a6907f10 125.1 MB Read/Writer Container Layer Nginx:1.10 Send Response Image read only Simplified diagram
  • 18. copy-on-write strategy 892607a8d00b 0 B 0b10aa9d5e8a 0 B f4e6d72dbf27 22 B 9c6eed7ce0e9 57.66 MB 2eda4505e518 0 B 2a6ec6bae792 0 B 32f2a4cccab8 0 B 70e9a6907f10 125.1 MB Read/Writer Image read only Nginx:1.10 Read/Writer Read/Writer Container-1 Container-2 Container-3
  • 19. Basic isolation of Linux ● chroot – change root directory root@test:/var/lib/docker/aufs/diff/70e9a6907f1068b3e08a9e...# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@test:/var/lib/docker/aufs/diff/70e9a6907f1068b3e08a9e...# chroot . bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) root@test:/# ls -al bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@test:/# ls -al ../ bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
  • 20. Basic isolation of Linux ● chroot – change root directory Filesystem Isolation root@test:/# mount -t proc proc /proc vagrant@test:~$ ps -ef root 2192 906 0 02:54 ? 00:00:00 docker-proxy -proto ... root 2215 906 0 02:54 ? 00:00:00 docker-proxy -proto ... ...... vagrant 2275 1915 0 03:03 pts/5 00:00:00 ps -ef # using chroot root@test:/# ps -ef root 2192 906 0 02:54 ? 00:00:00 docker-proxy -proto ... root 2215 906 0 02:54 ? 00:00:00 docker-proxy -proto ... ...... root 2277 2269 0 03:03 ? 00:00:00 ps -ef
  • 21. How to isolate by Docker ● Linux Kernel feature: – Cgroups – Namespaces ● Mount namespaces ● UTS namespaces ● IPC namespaces ● PID namespaces ● Network namespaces ● User namespaces
  • 22. Process namespace From : http://dockone.io/article/783
  • 23. Stop container From : http://dockone.io/article/783 From: https://twitter.com/turnoff_us/status/710736561676132352/photo/1
  • 24. Docker on Linux From : https://en.wikipedia.org/wiki/Docker_(software) libcontainer libvirt systemd- nspawnLXC cgroups namespaces SELinux AppArmor Netfilter Netlink capabilities Docker Linux kernel
  • 25. VM vs Container From : https://www.docker.com/what-docker
  • 26. The power of Docker From:https://yq.aliyun.com/articles/32071
  • 28. Dockerize App by Dockerfile From : https://github.com/nginxinc/docker-nginx/blob/41aa13f7d2c24407e483c40fb1e8b33e73462ff1/mainline/jessie/Dockerfile
  • 29. Build and Ship ● Build – docker build -t your_account/app_name . ● Ship – docker login --username=yourname --email=youremail@company.com – docker push your_account/app_name
  • 30. Start/Stop script #!/bin/sh ... case "$1" in start) ENABLED=$(/sbin/getcfg $QPKG_NAME Enable -u -d FALSE -f $CONF) if [ "$ENABLED" != "TRUE" ]; then echo "$QPKG_NAME is disabled." exit 1 fi : ADD START ACTIONS HERE ;; stop) : ADD STOP ACTIONS HERE ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0
  • 31. Example: ghost ● Just a blogging platform https://ghost.org Build qpkg $ git clone https://github.com/fcwu/docker-qdk2.git $ cd docker-qdk2 $ docker run -it --rm -v ${PWD}/example:/example dorowu/qdk2 bash -c "cd /example; make" $ ls -l example/ghost/build/ghost_0.7.4_x86_64.qpkg -rw-r--r-- 1 u u 24242 Dec 30 13:10 example/ghost/build/ghost_0.7.4_x86_64.qpkg
  • 32. Container Station API ● Version 1.6 - qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "install"}' - qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "start"}' - qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "stop"}' - qbus post com.qnap.dqpkg/qpkg '{"qpkg": "online-document", "action": "remove"}'
  • 33. docker-compose ● docker-compose.yml of Online-document app: image: dorowu/online-document.amd64:0.8.111 ports: - "127.0.0.1:10001:5000" volumes: - /share:/share - /mnt/rf/cd:/mnt/rf/cd - /var/run/qbus.sock:/var/run/qbus.sock ● Read more: https://docs.docker.com/compose/
  • 34. Apache config ● online-document.conf ProxyPass /online-document/ws ws://127.0.0.1:10001/online-document/ws retry=0 ProxyPass /online-document/ http://127.0.0.1:10001/online-document/ retry=0
  • 35. Create Issues/Pull Request ● https://github.com/fcwu/docker-qdk2 ● https://github.com/qnap-dev/container-station-api
  • 36. How to debug (In my case) From : http://9gag.com/gag/anYZ9Eo/my-code-works-but-i-don-t-know-why
  • 37. How to Learn (In my case) “Try to learn something about everything and everything about something.” Thomas Huxley Quotes Read more : 陈天:如何快速掌握一门技术? (http://blog.jobbole.com/77712/)