在树莓派上使用 Docker
2016-09-15
安装 Docker
Dell Inspiron 14 + Windows10 && 树莓派一代B+ + raspbian 4.10
在树莓派的比较新的版本里官方源中 Docker
, 可以通过 sudo apt-get install docker.io
下载,对的,它在源里并不叫 docker
,因为已经有一个文件系统应用叫 docker
,但是我的 树莓派二代B
的源里并没有 Docker
,不知道为什么,可以通过 sudo apt-cache search docker
来查看自己的源里有没有 Docker
然后我就想在官网下下载二进制软件安装,可惜需要 Linux
3.10 及以上的内核,可以通过 file /sbin/init
查看内核版本,我的内核版本是 2.6.6 ,并不能安装。
在此处就曾想过算了,于是想在 Windows 上试一下 Docker 好了,下载了 Docker 安装包结果需要 Hyper-V
的支持,并不知道这个是什么,于是安装 Docker-Toolbox ,跟 Docker 一样的,安装好之后桌面上出现三个新的图标 Docker Quickstart Terminal
, Kitematic (Alpha)
和 Oracle VM VirtualBox
。
打开 Docker Quickstart Terminal
一开始就是 Docker 自动配置,其实就是它去下载一个叫做boot2docker.iso文件,就是 default
的镜像,然后在自己下载其他镜像的时候,不知道为什么连接 docker 的官方源的时候总会出问题,就无法下载新的镜像,这样肯定不行吖,就先搁置一边,继续折腾树莓派。
这个 default 的镜像同时也在你的 Oracle VM VirtualBox
里自动运行,直接进去不用密码,但是 ssh 上去需要用户名和密码
user: docker
pass: tcuser
于是想升级树莓派内核,看了一下网上的教程,还是挺复杂的。结果找到一个外国的把 Docker 移植到 树莓派上的系统 hypriot ,在 这篇文章 中提到了将 Docker 安装到树莓派上,其实是它的系统自带 Docker ,最后就换了这个系统就好了。
这个 hypriot 的默认用户名和密码是 , 但是我登陆的时候用的用户名是 root
user: pirate
pass: hypriot
装好之后的效果。
一些 Docker 指令
docker version
查看 Docker 版本号docker info
查看 Docker 信息docker images
查看 Docker 镜像,在 Windows 上使用 Docker 会自带一个default
的镜像,但是树莓派上不自带镜像uname -a
查看操作系统版本docker ps
查看所有在运行的 Docker 容器docker ps -a
查看所有的 Docker 容器docker search ubuntu
在 Docker 官方镜像源https://hub.docker.com/
中寻找镜像docker pull ubuntu
在 Docker 官方镜像源中下载 Ubuntu 镜像,一般是作者名/镜像名
的格式,但是像 Ubuntu 这种大众的不指定作者就用官方源docker run -d -p 80:80 hypriot/rpi-busybox-httpd
在本地镜像中寻找 hypriot/rpi-busybox-httpd 或者在远程官方镜像中寻找并下载,然后运行,同时将容器的 80 端口映射到本地的 80 端口-
cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
官方推荐是从网上 pull 下来镜像,但是有时候太慢了,也可以自己先下载下来,然后再这样 import 进去 docker rm 8c342c0c275c
删除 容器ID 为 8c342c0c275c 的容器docker start 256d7bdde650
开启已经停止的容器docker stop 256d7bdde650
关闭容器docker attach 256d7bdde650
连接到一个已经存在的容器,只有当另一个打开的时候docker exec -t -i 256d7bdde650 /bin/bash
连接到一个已经存在的容器,比 attach 好用docker rm 'docker ps -a -q'
删除所有的容器docker rm 256d7bdde650
删除容器docker rmi sdhibit/rpi-raspbian
删除镜像docker logs 256d7bdde650
查看容器的日志docker inspect 256d7bdde650
查看日志的实例属性docker top 256d7bdde650
显示容器的进程信息docker port 256d7bdde650
查看容器的端口映射情况docker diff 256d7bdde650
显示容器文件系统的前后变化docker pause 256d7bdde650
停止一个容器docker unpause 256d7bdde650
启动一个容器docker commit –m 'add game 2048' 4807f56bb576 2048game
将容器打包为镜像-
docker exec <containerid> ip addr
查看容器IP地址,默认采用网桥连接方式 docker login
登陆 Docker 官方镜像源,需要先在https://hub.docker.com/
注册docker push learn/ping
发布自己的镜像docker export XXX.tar
将容器整个文件系统导出为一个tar包,不带layers、tag等信息docker build .
在当前目录下通过 Dockerfile 定制镜像docker cp <containerId>:/file/path/within/container /host/path/target
将容器中的文件拷贝到本地docker create <imageid>
创建一个新的容器,同 run,但不启动容器docker exec <containerid> ls -al
在已存在的容器上运行命令docker kill 256d7bdde650
杀死指定 docker 容器docker load
从一个 tar 包中加载一个镜像[对应 save]docker restart
重启运行的容器docker save
保存一个镜像为一个 tar 包[对应 load]docker tag
给源中镜像打标签docker inspect jekyll
查看某个容器或者镜像的信息docker cp windard:/root/windard.com/index.md ./
将容器内的文件复制到主机上docker cp ./index.md windard:/root/windard.com/
将主机上的文件复制到容器内docker top <containerid>
查看容器使用情况docker stats <containerid>
动态的查看容器使用情况,不带容器ID则查看所有运行中容器docker system df
查看 docker 占用空间大小-
docker system prune
删除未使用的 images 和 container docker run -e MYSQL_ROOT_PASSWORD=123 -p 3306:3306 -t -i mysql
创建并进入一个 MySQL 的容器
在进入容器之后,exit
可以退出容器,或者是 Ctrl + P
和 Ctrl + Q
Docker 运行
HypriotOS: root@black-pearl in ~
$ docker version
Client version: 1.6.0
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 4749651
OS/Arch (client): linux/arm
Server version: 1.6.0
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): 4749651
OS/Arch (server): linux/arm
HypriotOS: root@black-pearl in ~
$ docker info
Containers: 3
Images: 6
Storage Driver: overlay
Backing Filesystem: extfs
Execution Driver: native-0.2
Kernel Version: 3.18.11-hypriotos+
Operating System: Raspbian GNU/Linux 7 (wheezy)
CPUs: 1
Total Memory: 434.2 MiB
Name: black-pearl
ID: 4UW5:N2GV:LGTL:UDM5:MCRB:O3CO:RVVH:YEXS:D4I5:EPWT:A6Z6:Y2JZ
Debug mode (server): true
Debug mode (client): false
Fds: 15
Goroutines: 80
System Time: Thu Sep 15 10:14:07 CEST 2016
EventsListeners: 0
Init SHA1: 9183200cc532e132ff6eac70172636ccc5a33724
Init Path: /usr/lib/docker/dockerinit
Docker Root Dir: /var/lib/docker
HypriotOS: root@black-pearl in ~
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hypriot/rpi-busybox-httpd latest d0cb6fa4fa79 15 months ago 2.156 MB
sdhibit/rpi-raspbian latest e3ce6097d741 16 months ago 121.5 MB
HypriotOS: root@black-pearl in ~
$ uname -a
Linux black-pearl 3.18.11-hypriotos+ #1 PREEMPT Sun Apr 12 16:26:34 UTC 2015 armv6l GNU/Linux
HypriotOS: root@black-pearl in ~
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9ccede2524d sdhibit/rpi-raspbian:latest "/bin/bash" 14 minutes ago Exited (127) 5 minutes ago prickly_turing
256d7bdde650 sdhibit/rpi-raspbian:latest "/bin/bash" About an hour ago Exited (0) 15 minutes ago sad_galileo
60ca9b6c5c97 hypriot/rpi-busybox-httpd:latest "/bin/busybox httpd 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp angry_euclid
HypriotOS: root@black-pearl in ~
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 4707 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 66 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 41 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components... 27 [OK]
torusware/speedus-ubuntu Always updated official Ubuntu docker imag...
docker run 的参数
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
OPTIONS
-p 80:80
前一个为本地端口号,后一个为容器内端口号-P
自动映射端口,映射的端口将会从没有使用的端口池中 (49000..49900) 自动选择-t
分配一个(伪)tty (link is external)-i
交互模式 (so we can interact with it)-d
后台运行--name
给容器设定别名--link <imagesid>:<imagename>
连接另一个容器并设置别名-e
设定环境变量-w
设定工作目录-v
设定磁盘挂载,需为绝对路径
本文固定链接:https://windard.com/blog/2016/09/15/Use-Docker-In-Raspberry
原创文章,转载请注明出处:在树莓派上使用 Docker By Windard