by Kyle Drake on 2015-07-11node
In recent years, Docker and a few other projects have redefined how we run server applications. In the future, we might be running containerized apps in our personal devices. At its core, this fast-paced improvement is a combination of good interfaces to standardize how to do things, and great tooling to make using containers easy.git
The IPFS Project has many things planned for the world of containers. The most interesting is using IPFS to distribute containers hyper efficiently across data-centers and the internet. We will be discussing many of these things in upcoming posts, but first things first. This post is a quick guide for running an IPFS node directly within Docker.github
The IPFS team has provided an IPFS Docker image, which is syncronized with the latest commits to go-ipfs. It only takes a few commands to try it out!docker
> mkdir /tmp/ipfs-docker-staging > mkdir /tmp/ipfs-docker-data > docker run -d --name ipfs-node \ -v /tmp/ipfs-docker-staging:/export -v /tmp/ipfs-docker-data:/data/ipfs \ -p 8080:8080 -p 4001:4001 -p 127.0.0.1:5001:5001 \ openthings/go-ipfs:latest faa8f714398c7a1a5a29adc2aed01857b41444ed53ec11863a3136ad37c8064c
Port 8080
is the HTTP Gateway, which allows you to query ipfs data with your browser (see this example), port 4001
is what swarm port IPFS uses to communicate with other nodes, and port 5001
is used for the local API. We bind 5001
only on 127.0.0.1
because it should not be exposed to the outside world. The faa8f7143...
is the docker container id.瀏覽器
We’ve mounted a data and staging volume. The data
volume is used to store the IPFS local repo (config and database), and staging
is a directory you can use for staging files for command line usage (such as ipfs add
). If you’re only using the API, you can omit the staging directory volume. And of course, feel free to put those directories somewhere other than /tmp
.app
Now what? Your node is running. You can issue commands directly to the containerized ipfs with docker exec <container-id> <ipfs-cmd>
. For example, you can try ipfs swarm peers
to see who you are connected to:curl
# let's set $cid = <container-id> for easy access > cid=faa8f714398c7a1a5a29adc2aed01857b41444ed53ec11863a3136ad37c8064c > docker exec $cid ipfs swarm peers /ip4/104.236.179.241/tcp/4001/ipfs/QmSoLpPVmHKQ4XTPdz8tjDFgdeRFkpV8JgYq8JVJ69RrZm /ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu /ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm /ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3
固然,如今能夠使用 add
或 cat
來添加或獲取內容:tcp
> echo "hello from dockerized ipfs" >/tmp/ipfs-docker-staging/hello > docker exec $cid ipfs add /export/hello added QmcDge1SrsTBU8b9PBGTGYguNRnm84Kvg8axfGURxqZpR1 /export/hello > docker exec $cid ipfs cat /ipfs/QmSvCqazpuuib8qyRyddyFemLc2qmRukLLy8YfkdRPEXoQ hello there!
容器化的 IPFS 如今運行了一個網關,在 http://<ip-address-of-the-computer>:8080
,實現HTTP協議與IPFS協議的轉換,嘗試 curl
, 或者在瀏覽器中就能夠訪問到IPFS連接到的任何資源:ide
> curl http://localhost:8080/ipfs/QmcDge1SrsTBU8b9PBGTGYguNRnm84Kvg8axfGURxqZpR1 hello from dockerized ipfs
Kubernetes 1.9 已經來到, 咱們能夠基於Kubernetes構建 IPFS 節點的集羣,能夠存儲任何數據,能夠從任何 IPFS 集羣中的節點上快速提取數據, 任何人均可以參與!post