前言
前几天受老师影响,打算去瞧瞧这个docker到底怎么样,我心想虚拟机性能应该不咋地,但是百度上说很强。于是我破天荒的在香橙派安装了docker,从而开启了我的docker的魔法世界。这个香橙派就是图下的东东,没想到他也能运行docker!!!
Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,容器性能开销极低。这对树莓派非常有用,本教程将介绍 Docker 这个工具以及如何在 Raspbian 上安装 Docker。
Docker 的应用场景
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 的优点
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。方便快捷已经是 Docker 的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
第一步安装Docker
安装方法百度上都有,我就不重复说了,但是树莓派、香橙派这些armV7处理器的建议脚本安装。部分文章说道,部分派性能太差或缺失指令集(?) 虽然能成功安装docker但是运行不起来,如树莓派zero。万幸的是我的香橙派完美运行。
安装方法(脚本安装)
sudo curl -sSL https://get.docker.com | sh
国内可以使用阿里云加速
sudo curl https://get.docker.com/ > ./docker_install.sh
sudo sh docker_install.sh –mirror Aliyun
常用的Docker命令
#查看 Docker 版本
docker -v
sudo docker pull 仓库/镜像:版本(留空的话默认为 latest)
sudo docker run 加参数,用来创建容器
#查看运行容器
sudo docker ps
#查看所有下载的镜像
sudo docker images
#进入容器终端
sudo docker exec -i -t ha /bin/bash
#实时查看10行的 ha 日志
sudo docker logs -f -t --tail 10 ha
#重启 systemctl 守护进程
sudo systemctl daemon-reload
#设置 Docker 开机启动
sudo systemctl enable docker
#开启 Docker 服务
sudo systemctl start docker
第一个docker镜像-nginx-rtmp
由于树莓派,香橙派这些是armv7处理器,大部分百度找到的nginx-rtmp镜像都是只支持x86 x64平台,所以我们需要去docker hub看看有没有自己能用的配好的镜像,不然得完全自己配置(悲)。
好在找到了 适合armv7 的 vallahaye/nginx-rtmp 镜像。,可以看到支持arm平台。当然我们可以自己直接做镜像也是没问题的。然后把镜像下载到香橙派中。
docker pull vallahaye/nginx-rtmp
执行docker images 可以看到镜像已经下载到本机了。
通过docker run 可以开启这个镜像,-p就是物理机的端口映射到容器里对应端口,--name就是启动的容器名字,可以自定义,-d就是后台运行的意思,后面就是运行的镜像名称。
docker run -p 1935:1935 -p 8080:80 --name rtmp -d vallahaye/nginx-rtmp
如果你运行成功了,执行docker ps 可以看到容器在跑,就已经搭好了 直播服务器啦!为什么呢?因为这个镜像是别人做好的直播服务器镜像。
镜像的使用方法这里就不再赘述,在镜像作者的github上已经有详细的readme.md文档介绍。vallahaye/nginx-rtmp
修改他人的镜像
在使用这个镜像中,发现只能支持rtmp推流和播放,不支持hls,stat查询推流信息等功能。所以我们需要对镜像进行修改。那么我们怎么进入容器里面的shell呢。执行下面的命令可以进入到容器的bash。(部分镜像没有bash)
docker exec -it 运行的容器id bash
进入后我们可以对容器的一些配置文件修改,修改后执行exit退出。如对nginx配置hls、stat功能。
load_module modules/ngx_rtmp_module.so;
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp {
access_log /var/log/nginx/access.log;
server {
listen 1935;
chunk_size 4096;
listen [::]:1935 ipv6only=on;
application push {
live on;
push rtmp://127.0.0.1:1935/live;
push rtmp://127.0.0.1:1935/hls;
}
application live {
live on;
record off;
}
application hls {
live on;
hls on;
hls_fragment 3s;
hls_path /opt/data/hls;
}
}
}
http{
server
{
listen 80 default_server;
server_name _;
index index.html index.htm index.php;
root /var/www/hlstest;
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /opt/data/hls;
expires -1;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /var/www/stat;
}
}
}
提交修改后的容器
容器发生了变化,并不是保存了,需要commit才是保存到镜像。
docker commit -m="提交信息" -a="作者" 运行的容器id 要保存的容器名称
执行了上面的代码,我们执行 docker images 可以看到我们commit 好的镜像。
运行自己的镜像
在运行自己的镜像之前,需要把先前的容器停止,移除,从而对应的监听端口释放。容器名称换成自己commit的。
docker run -p 1935:1935 -p 8080:80 --name rtmp -d xiaoxi-stat/nginx-rtmp
保存镜像到本地
为了方便,或者在其他服务器部署自己的镜像,可以保存自己的镜像。
docker save 镜像id > /opt/rtmp.tar(保存的位置)
以上就是docker的魔法世界。