系统信息

Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 8.0 (jessie)
Release:        8.0
Codename:    jessie

安装步骤

1、配置源地址

vi /etc/apt/sources.list 我配置的源地址如下:

deb http://mirrors.zju.edu.cn/raspbian/raspbian/ jessie main contrib non-free rpi
deb-src http://mirrors.zju.edu.cn/raspbian/raspbian/ jessie main contrib non-free rpi

2、更新

sudo apt-get update

3、安装一些工具包

sudo apt-get install 
     apt-transport-https  
     ca-certificates  
     curl 
     software-properties-common

4、安装docker

apt安装各种失败,直接下载package安装了。

wget https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_17.03.0~ce-0~raspbian-jessie_armhf.deb

sudo dpkg -i docker-engine_17.03.0~ce-0~raspbian-jessie_armhf.deb

5、安装完成

root@raspberrypi:/u02/docker# docker version
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   60ccb22
 Built:        Thu Feb 23 11:32:23 2017
 OS/Arch:      linux/arm

Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   60ccb22
 Built:        Thu Feb 23 11:32:23 2017
 OS/Arch:      linux/arm
 Experimental: false

使用过程中遇到的问题

###1、运行sudo docker run hello-world

报错:docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

解决办法:检查docker有没有启动

service docker start
发现报错:Job for docker.socket failed. See 'systemctl status docker.socket' and 'journalctl -xn' for details.
A dependency job for docker.service failed. See 'journalctl -xn' for details.
root@raspberrypi: journalctl -xn
Mar 18 23:43:10 raspberrypi systemd[1]: Unit docker.socket entered failed state.
Mar 18 23:43:10 raspberrypi sudo[28389]: pam_unix(sudo:session): session closed for user root
Mar 18 23:43:23 raspberrypi oray_serve[689]: 2017-03-18 23:43:23                0x00000001        [ddns] OnStatusChanged -> okKeepAliveRecved
Mar 18 23:43:23 raspberrypi oray_serve[689]: status:4
根据文档提示:https://docs.docker.com/engine/installation/linux/linux-postinstall/
创建docker用户组, sudo groupadd docker
sudo usermod -aG docker $USER

2、继续启动,发现还是报错

Mar 18 23:47:49 raspberrypi dockerd[28527]: /usr/bin/dockerd: error while loading shared libraries: libapparmor.so.1: cannot open shared object file: No such file or d

解决办法:缺少依赖包,继续安装

apt-get install libapparmor1

###3、docker run hello-world发现timeout

Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io: net/http: TLS handshake timeout.

解决办法:改用国内镜像

vi /etc/docker/daemon.json
# 内容如下,新版使用这种方式配置,和之前的有区别,参考这个https://docs.docker.com/engine/reference/commandline/dockerd/#/daemon-configuration-file
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
sudo service docker restart

4、docker run hello-world 此处报错

standard_init_linux.go:178: exec user process caused "exec format error"

解决方案:原因是镜像版本不对,树莓派需要使用docker run armhf/hello-world

###5、运行简单的jar java源码

public class DockerTest{
        public static void main(String[] args) throws Exception{
                System.out.println("hello world");
        }
}

经过编译,打包为dockerjava.jar dockerfile文件内容:

# java版本必须是armhf,否则会提示异常standard_init_linux.go:178: exec user process caused "exec format error"
FROM armhfbuild/java 
VOLUME /tmp
ADD dockerjava.jar /app.jar
CMD java -jar /app.jar

大功告成

root@raspberrypi:/u02/docker#  docker build -t hello-java .
Sending build context to Docker daemon 9.216 kB
Step 1/4 : FROM armhfbuild/java
latest: Pulling from armhfbuild/java
a3ed95caeb02: Pull complete 
cc755030d803: Pull complete 
45cef0a2caa7: Pull complete 
e9fb2d3feaa1: Pull complete 
01896f522502: Pull complete 
b79812d20a3d: Pull complete 
f4de4a92a47d: Pull complete 
69a8f602f62d: Pull complete 
Digest: sha256:e32fd699d42d09e049ded4624f0a9c50b1237853859b3e658dc9f5c5b544ab4b
Status: Downloaded newer image for armhfbuild/java:latest
 ---> 2c4f3e2b6be5
Step 2/4 : VOLUME /tmp
 ---> Running in 1937881bc764
 ---> bcebdbde871e
Removing intermediate container 1937881bc764
Step 3/4 : ADD dockerjava.jar /app.jar
 ---> a63205b5b6cb
Removing intermediate container f4c3c891e76c
Step 4/4 : CMD java -jar /app.jar
 ---> Running in 2a2540964e7f
 ---> b6bec8602898
Removing intermediate container 2a2540964e7f
Successfully built b6bec8602898
root@raspberrypi:/u02/docker#  docker run hello-java
hello world

总结

树莓派是arm处理器,所以在下载镜像的时候一定要注意。