管理docker容器

上一篇介绍了安装和启动一个容器,并通过端口绑定成功访问到启动的nginx服务。
然而围住一想,还是什么也做不了:
1.nginx的根目录在哪,我们怎么更改它,怎么让它访问我们想它它访问的文件?
2.nginx的配置文件在哪。怎么加一个服务?或者怎么修改配置文件?

带着这些疑问往下说

一,绑定本地目录到容器目录
和绑定端口一样,子可以绑定本地的目录到容器中,这样可以在本地编辑文件,通过容器中的服务来访问。
首先把昨天创建的容器删除

$ docker rm webserver
webserver

重新生成并启动容器

$ docker run -d -p 80:80 -v /web:/var/www/html –name webserver nginx
289bce1943a57011e7f9cf7f2925390aa0e7b874a9e9930c17429a7dc78f346f

通过-v命令,可以把本地的目录绑定到容器中,上面命令是把本地的 /web目录绑定到/var/www/html。
为什么要绑定到/var/www/html目录,好吧,后台看配置文件的时候会看到,当然可以绑定到别的目录,到时候改nginx的配置文件即可。

通过绑定后,就可以在你本地 /web下加任务你想加html文件,就可以通过浏览器访问了。就和编辑你本地的服务器文件一样。

二,登录到容器
运行起来的nginx容器,其它就是一个linux系统,当然也可以登录上去。
通过命令

$ docker exec -u root -it webserver bash
root@289bce1943a5:/#

就可以登录到正在运行的webserver容器了。命令行也已经切换到了容器里面。
-u 是指定登录的用户名
webserver 是当前运行的容器实例
bash 是登录上去运行的命令

登录上去后,这就是一个linux系统,可以查看系统信息

# uname -a
Linux 289bce1943a5 4.9.8-moby #1 SMP Wed Feb 8 09:56:43 UTC 2017 x86_64 GNU/Linux

可以

apt-get update

还可以

apt-get install XXX

不过安装软件前先apt-get update

当然也可以登录上去后运行任何命令,比如 ls 命令

docker exec -u root -it webserver ls
bin  boot  dev     etc  home  lib     lib64  media  mnt  opt     proc  root  run  sbin  srv  sys  tmp  usr  var

这条命令的意思是登录到webserver容器上执行 ls 命令,执行完后就退出了

三,修改容器上的文件
1,直接在服务器上修改
既然已经登录到容器上了,就像使用linux系统一样,怎么改都可以。
但当你很高兴地打出vi /etc/nginx/nginx.conf的时候,会发现

vi /etc/nginx/nginx.conf
bash: vi: command not found

啥?vi都没有,是的,vi也没有,这是一个相当干净的系统。
你只有自己装个vim再修改

apt-get update
apt-get install vim

安装完成后就可以用vi /etc/nginx/nginx.conf来修改配置文件了

2.在本地和容器间拷贝文件

docker的拷贝命令

docker cp <container>:/path/to/file.ext .

这个命令和scp命令有点像

现在拷贝webserver容器中的/etc/nginx/nginx.conf文件 到当前目录

docker cp web:/etc/nginx/nginx.conf .

拷贝下来后,在你本地修改这个配置文件

修改完成后,再拷贝到容器中
拷贝当前目录下的nginx.conf文件到web容器的/etc/nginx/目录下

docker cp nginx.conf sebserver:/etc/nginx/

同理也可以用这种方式修改其它的文件和文件夹

好了,有时候光有了nginx还不行,还需要php,mysql等等。
下一篇打算写写如何打造真正的开发环境

开发人员打开docker的方式

以前写过一篇mac下利用docker搭建开发环境的文,但那时是用的boot2docker作为客户端搭建的,现在docker原生支持mac了,方便了许多。
首先,我是不建议直接在macOS系统中直接搭建各种开发环境的,一来会把软件装多了会把mac系统扰乱。会出现各种莫名其妙的环境问题。二来如果遇到环境要升级的问题也会很乱,三来macOS系统基本上也是一年升级一次,也会使各种搭好的环境出现问题。
一个解决办法是用VirtualBox来装虚拟机来解决,以前我也是这么干的,但虚拟机很重,想重新搭个环境要花比较长的时间,比如突然想下ubuntu16.10系统搭个开发环境。先下载系统,安装系统进虚拟机,然后再启动系统装环境。
现在有了docker一切问题都得到解决了欧耶。
就像船和集装箱一样。只要符合标准的集装箱,不用处理都可以直接往轮船上搬。而docker就是轮船这样的一种角色。一个装容器的容器,只是符合它的标准的容器都可以往上面装。
如果你想装个python环境,直接放个已经装好python环境的容器去运行起来,就是一个现成的python环境;
如果你想装一个nginx来运行web,直接放个已经装好nginx环境的容器。就是一个nginx环境了。
如果你现在用的是python2.7的环境,突然要用到python3,也可以直接装个python3的环境就是了,还避免了环境干扰。而且用完即删。
docker的发明最大的意义就是用于运维,但对于一个开发人员,也同样需要。

一.mac上装docker
到这里去下载安装即可
安装完成后运行,在右上角有一个小鲸鱼图标,docker就正常启动了,可以在终端里使用docker命令。

二.列出本地镜像
1.列出已存在本地的镜像

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

 

现在是空的,一个镜像也没有
假如我要装个nginx环境。怎么办?先去搜索一下吧

2.搜索镜像

$ docker search nginx
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                     Official build of Nginx.                        5470      [OK]
jwilder/nginx-proxy       Automated Nginx reverse proxy for docker c…   957                  [OK]
richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable …   353                  [OK]
million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS…   75                   [OK]
webdevops/php-nginx       Nginx with PHP-FPM                              71                   [OK]
h3nrik/nginx-ldap         NGINX web server with LDAP/AD, SSL and pro…   36                   [OK]
bitnami/nginx             Bitnami nginx Docker Image                      23                   [OK]
evild/alpine-nginx        Minimalistic Docker image with Nginx            14                   [OK]
million12/nginx           Nginx: extensible, nicely tuned for better…   9                    [OK]
maxexcloo/nginx           Framework container with nginx installed.       7                    [OK]
webdevops/nginx           Nginx container                                 7                    [OK]
blacklabelops/nginx       Dockerized Nginx Reverse Proxy Server.          4                    [OK]
1science/nginx            Nginx Docker images that include Consul Te…   4                    [OK]
frekele/nginx             docker run –rm –name nginx -p 80:80 -p 4…   3                    [OK]
ixbox/nginx               Nginx on Alpine Linux.                          3                    [OK]
drupaldocker/nginx        NGINX for Drupal                                2                    [OK]
servivum/nginx            Nginx Docker Image …

树莓派 自动发布天气信息到QQ空间/微博

转载至raspberry pi 自动发布天气信息到QQ空间/微博

说明:

天气信息来自于百度地图API,历史上的今天来自于网络API(见上).

准备工作:

安装python(没有的,自行下载安装)

安装requests:

git clone git://github.com/kennethreitz/requests.git
cd requests
python3 setup.py install

安装python-rsa

git clone https://github.com/sybrenstuvel/python-rsa.git
cd python-rsa
python3 setup.py install

安装qqlib

git clone https://github.com/JetLua/qqlib.git
cd qqlib
python3 setup.py install
主要脚本:

备注:红色字体根据自己实际修改.

  main.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import os
import urllib.request
import sys
import json
import time
import qqlib

def get_weather(city):
api_key=”you api key”
weather_url=”http://api.map.baidu.com/telematics/v3/weather?location=”+city+”&output=json&ak=”+api_key

res = urllib.request.urlopen(weather_url)
json_data = http://www.cnblogs.com/tianzhenyun/p/res.read().decode(‘utf-8’)
#print(json_data)
json_data = http://www.cnblogs.com/tianzhenyun/p/json.loads(json_data)
#get json data
#check result status

树莓派 之 dnsmasq搭建DNS服务器

转载至树莓派 之 dnsmasq搭建DNS服务器

Dnsmasq是一款高性能的DNS缓存软件,可以使用它来搭建一个小型的DNS服务器。在使用时,由于dnsmasq可以将域名缓存下来,这样下次就不用再次请求上游的DNS服务器,使用时极大的加快了上网速度,从而提升了上网体验。如果你有树莓派在闲置,那就赶快利用起来吧,使用你手里的树莓派来搭建一个自己的DNS服务器吧。

配件:
树莓派 一片 即可

安装Dnsmasq

sudo apt-get install dnsmasq

安装DNSMASQ.png

配置Dnsmasq

Dnsmasq的配置文件为 /etc/dnsmasq.conf ,使用vim 打开配置文件

sudo vim /etc/dnsmasq.conf

去掉strict-order前面的#号
设置listen-address,配置如下:

listen-address=127.0.0.1,192.168.1.103

如果只加上127.0.0.1,表示只能为本机提供dns服务,如果需要为局域网的其他电脑提供dns服务,需要再加上树莓派在局域网内的IP地址。

修改缓存大小

cache-size=10000

保存dnsmasq.conf文件
修改resolv.conf文件,添加以下几行:

nameserver 127.0.0.1
nameserver 223.5.5.5
nameserver 114.114.114.114

第一行是自动生成的,表示查询DNS时首先从本地查找,找不到了才从下面的上游DNS服务器查找。

保存resolv.conf文件
重启dnsmasq

sudo service dnsmasq restart

查看服务状态

sudo service dnsmasq status

输出信息如下:

dnsmasq.service – A lightweight DHCP and caching DNS server
Loaded: loaded (/lib/systemd/system/dnsmasq.service; disabled)
Drop-In: /run/systemd/generator/dnsmasq.service.d
└─50-dnsmasq-$named.conf, 50-insserv.conf-$named.conf
Active: active (running) since 四 2016-06-16 17:54:50 CST; 4h 21min ago
Process: 21161 ExecStop=/etc/init.d/dnsmasq systemd-stop-resolvconf (code=exited, status=0/SUCCESS)
Process: 21225 ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf (code=exited, status=0/SUCCESS)
Process: …

树莓派3开无线热点变身为智能无线网关(IPv4+IPv6)

转载这篇文章树莓派3开无线热点变身为智能无线网关(IPv4+IPv6),感谢作者

 

准备工作

整个过程分为两步,先开IPv4的热点access point,再共享IPv6的热点access point,热点都不是采用bridge方式进行的连接。

固定IP(IPv4)

后面的树莓派默认使用dhcpcd进行ip的配置,因此网上好多关于配置树莓派固定IP的方法都是有点问题(很早的时候是配置/etc/network/interfaces),我们现在配置dhcpcd的配置文件进行固定IP的配置,打开配置文件/etc/dhcpcd.conf

1

sudo vim /etc/dhcpcd.conf

里面内容不少,感兴趣可以查一下,这里直接拖到最下,根据自己的情况加入下面的内容

1
2
3
4

interface eth0
static ip_address=211.187.224.79/24
static routers=211.187.224.16
static domain_name_servers=114.114.114.114

其中ip_address后面接的是CIDR格式的ip地址,/24是指的netmask是255.255.255.0,地址根据自己的情况填一下即可。
重启就可以上网了。ping一下外网看一下是不是已经通了,IPv6是用ping6。

配置IPv4热点access point

这里使用的是NAT转发
先装依赖

1

sudo apt-get install dnsmasq hostapd

之所以使用dnsmasq是因为配置简单,而hostapd是必不可少的虚拟热点的程序,hostapd对ipv4和ipv6都支持。
配置的时候要给我们的wlan0一个固定的内网IP,再次编辑我们的dhcpcd.conf,在最后接上下面的内容

1
2

interface wlan0
static ip_address=10.0.0.1/24

继续配置dnsmasq,在/etc/dnsmasq.conf的最后加上下面一段(此文件内容很多,但都被注释掉了)

1
2

interface=wlan0
dhcp-range=10.0.0.2,10.0.0.5,255.255.255.0,12h

编辑/etc/hostapd/hostapd.conf文件(新文件),加上下面的内容

1
2
3
4
5
6
7
8
9
10

interface=wlan0
hw_mode=g
channel=10
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
wpa_passphrase=密码
ssid=名称

把密码和名称替换成自己想设置的就可以了。接着修改/etc/sysctl.conf文件,找到下面一行去掉#

1

net.ipv4.ip_forward=1

继续,更新下iptables的规则:

1
2
3
4
5

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state –state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

sudo sh -c “iptables-save > /etc/iptables.ipv4.nat”

最后一句的目的是将我们执行的三句iptable设置保存下来,以后能直接使用,我们保存到了/etc/iptables.ipv4.nat位置。编辑/etc/network/interfaces,最后加上下面这句话,每次开机都会配置好iptables的内容了

1

up iptables-restore < /etc/iptables.ipv4.nat

既然打开这个文件了,可以把上面的几句wlan的interface注释一下,反正这些话也没用了,即变成这样:

1
2
3
4
5
6
7

allow-hotplug wlan0
iface wlan0 inet manual
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#allow-hotplug wlan1
#iface wlan1 inet manual
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

为了能够每次开机自动运行hostapd,我们还要修改/etc/rc.local文件,在exit 0 前加上下面这句话

1

hostapd -B /etc/hostapd/hostapd.conf & > /dev/null 2>&1

重启,就可以看到热点了。至此IPv4部分完成。

参考资料:

树莓派3内置WIFI无线路由器AP热点: https://item.congci.com/-/content/shu-mei-pai-3-neizhi-wifi-wuxian-luyouqi-ap-redian
这个文章还提到了桥接方式进行连接的方法: http://wangye.org/blog/archives/845/

配置IPv6热点access point

前面的配置方法网上一搜一大把,这里其实就是记录一下,真正花了我两天时间的是配置IPv6的无线热点。。类似IPv4的配置方法,这里主流配置有两种,一种是使用桥接把无线的IPv6流量转到有线的IPv6上,这种方法配置简单,但我用上后只能坚持几十秒,整个树莓派就再也不能上网,只能重启(非常怀疑学校里在配置了交换机,不让使用桥接),另一种就是我最后成功的使用radvd+npd6+DHCPv6+hostapd的这种NDP连接。
这里也写一下第一种方法,毕竟曾让我高兴了几十秒,本着记录为目的的话还是要记一下。两种方法只能选一种,强烈建议使用第二种方法

IPv6 桥接

编辑配置文件/etc/sysctl.conf,把下面一行的注释去掉

1

net.ipv6.conf.all.forwarding=1

用ifconfig看一下自己的ipv6的地址,注意Scope:Global的那个地址是你的IPv6外网地址,Scope:Link的那个地址应该是你的上级地址。我们这里只关注Global那一项,安装radvd

1
2
3
4
5
6
7
8
9
10
11
12

sudo apt-get …

树莓派raspbian安装samba共享

安装了owncloud后,各终端就可以同步了,pc,mac,android,ios都是对应客户端,但是没有电视客户端,比如服务器上的相片和下载的视频就不能在小米电视里看,于是就想到了用samba来实现共享,一来电视上可播放共享内容,各种设备音也方便文件管理。
想法是把owncloud中某些数据用来共享给电视使用,比如把音乐,视频,和相片共享。这样来实现手机上当天拍的照片和视频,在手机上同步一下就可以在电视上播放了,备份和共享两不误。
当然连接到局域网wifi下的所有设备都能看到共享,每个来到家玩的来只要连接了wifi,就能看到你共享的相片,怎么办呢?
一个办法是设置个用共享用户,另一个方法是通过连接的mac地址来区分。

一,安装samba

sudo apt-get install samba samba-common-bin

二,配置samba
养成好习惯,先把配置文件备份一下
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

修改配置文件

sudo vi /etc/samba/smb.conf

在其最后添加以下命令:

[share]                                   #共享文件的名称,将在网络上以此名称显示
 
        path = /share                     #共享文件的路径
        browseable = yes                  #允许浏览
        public = yes                      #共享开放
        writable = yes                    #可写
        guest ok = yes            #允许客人访问

保存退出

重启samba服务

/etc/init.d/samba restart

这样共享目录就可访问了

mac下用finder的 前往 —> 连接服务器

输入smb://ip/share就可访问了(ip是树莓派地址)

还可以添加其它目录,配置/etc/samba/smb.conf文件,末尾添加

[NAS-Data]
 
     comment = nas data
     path = /home/pi/nas-data/
     browseable = yes
     writable = yes
     valid users = pi   #允许访问的用户,这里我用的pi 用户

 

要添加共享用户:

smbpasswd -a pi

重启samba就可以了

树莓派raspbian安装owncloud私有云

owncloud是一个开源的私有云系统,类似于国外的Google Drive、Dropbox、SkyDrive,和国内的百度云等网盘一样。在家庭搭建私有云来管理和分享家庭成员的各种照片,音乐,文档等各种文件,即保证速度又比百度云等网盘安全。
一,更新系统

sudo apt-get update
sudo apt-get upgrade

二,安装LAMP套件

1.安装apache2

sudo apt-get install apache2

 

2.安装mysql

sudo apt-get install mysql-server

 

3.安装php和依赖

sudo apt-get install php5 php5-gd php-xml-parser php5-intl php5-sqlite php5-mysql smbclient curl libcurl3 php5-curl

4.从 https://owncloud.org/install/ 下载最新的ownCloud Server,并解压到web根目录(/var/www/html)

cd /var/www/html  #(网页目录)
tar -xzvf owncloud-9.0.1.tar.bz2 -C  /var/www/html   #(解压至web目录)
cd /var/www/html/owncloud         #(进入owncloud web目录)
mkdir data          #(建立数据库目录)

6.OwnCloud在安装的过程中需要对一些目录有写的权限,为此,web服务器用户(www-data对于基于Debian的系统)必须要拥有apps、data、config目录的权限。运行以下命令完成:

#owncloud 目录下
sudo chown -R www-data:www-data data
sudo chown -R www-data:www-data config
sudo chown -R www-data:www-data apps

7.打开浏览器,输入 http://IP/owncloud ,进入设置安装界面,根据提示安装填写新用户名,密码;数据库用户名,密码等,即可安装完成。(IP为树莓派的地址)

将系统挂载到usb硬盘

       系统装好在sd卡启动正常后,就可以将移动硬盘通过usb接口接入并挂载来用了。由于原来系统装在SD卡上,由于SD卡读写速度原因,导致系统有些卡。特别在读写系统文件的时候特别卡。我想将整个raspbian系统都转移到移动硬盘上。以便提高系统性能。
      首先准备一块移动硬盘,通过usb接入到树莓派上来(注意移动硬盘要单独供电),分好区后格式化。由于我的硬盘是从之前电脑来折下来的,原来装的ubuntutxxy,原本已经分好区了,也有好多数据在硬盘上,为了使数据不丢失,就不再重新分区了。

一,将系统从SD卡拷贝到硬盘上

1.把硬盘插入到树莓派,使用lsblk命令查看设备名:

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 232.9G  0 disk
├─sda1        8:1    0   1.9G  0 part
├─sda2        8:2    0     1K  0 part
├─sda5        8:5    0 209.6G  0 part
├─sda6        8:6    0  18.6G  0 part
└─sda7        8:7    0   2.8G  0 part
mmcblk0     179:0    0   7.3G  0 disk
├─mmcblk0p1 179:1    0    63M  0 part
└─mmcblk0p2 179:2    0   7.2G  0 part

这是我的硬盘信息,sda是硬盘,mmcblk0是sd卡,我的硬盘分成4个区,sad1作为boot目录,sda6作为根目录,sda7作为swap,sda5作为主数据存储。

2.创建boot文件系统和root文件系统:

sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda6

3.把当前Raspbian系统从SD卡拷贝到USB设备

sudo mkdir /mnt/target
sudo mount /dev/sda6 /mnt/target/  # 挂载分区
 
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/  # 挂载分区
 
sudo apt-get update
sudo apt-get install rsync   # rsync命令用于同步数据
sudo rsync -ax –progress / /boot /mnt/target   # 把系统拷贝到U盘

4.刷新SSH密

cd /mnt/target
sudo mount –bind /dev dev
sudo mount –bind /sys sys
sudo mount –bind /proc proc
sudo chroot /mnt/target
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit

 

sudo umount dev
sudo umount sys
sudo umount …

mac安装树莓派系统

我的电脑是mac,其它window和linux系统的看官方的安装文档

一.下载系统

到树莓派官网下载raspbian系统,我下的是最新的版本2017-01-11-raspbian-jessie-lite

二.安装系统

1,把sd卡用读卡器插入mac,在mac磁盘工具中把它格式化。(其实用android手机当读卡器也可以,我刚拿到板的时候手上没有读卡器,就用android手机代替读卡器了)

2.在Mac命令行输入df -h,找到挂载的SD卡,我的sd卡挂载信息如下

/dev/disk4s1   7.3Gi  1.1Gi  6.2Gi    16%       0          0  100%   /Volumes/NO NAME

3.卸载分区
使用diskutil unmount将这些分区卸载

$ sudo diskutil unmount /dev/disk4s1
Volume NO NAME on disk4s1 unmounted

4.找到设备
通过diskutil list的输出来找到设备,我这里找到的设备是

/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.8 GB     disk4
   1:             Windows_FAT_32 NO NAME                 7.8 GB     disk4s1

5.开始写入系统镜像

sudo dd bs=4m if=2017-01-11-raspbian-jessie-lite.img of=/dev/rdisk4

if参数为镜像文件,of参数为设备名称
等待写入成功

6.用diskutil unmountDisk卸载设备

diskutil unmountDisk

三,启动系统

将SD卡插入树莓派中,连接显示器,鼠标,键盘,网线,最后接入电源启动树莓派。红色电源灯是一直亮的,绿色的状态灯系统刚启动时是很快地一闪一闪的,系统启动完成后闪动频率会很低,不动的时候是基本不闪的

正常的话,屏幕上会输出树莓派启动信息。启动完成后,登录进入系统。树莓派系统默放的用户名是pi,默认的密码是raspberry。

登录进入系统后,为了能远程登录。需要打开ssh登录(raspbian系统默认是不开启ssh的)。运行raspi-config 进入设置允许ssh登录。打开后就可以用ssh客户端登录树莓派了。

入手树莓派

决定入手一个树莓派3(Raspberry Pi 3)来替换掉原来家用的服务器,原来的服务器是用一台老笔记本来搭建的,跑的是ubuntu系统。由于笔记本要7 X 24小时开机,经常半夜会听到它风扇在转,有点吵。而且对于长时间开的服务器,x86架构的电脑也不够省电。

我对于一个家庭服务器的需求是:
1.一个NAS服务器,存储并共享家各种照片,视频,文档,并在各个终端能打开(电视,手机),家人手机拍的照片也经常要导出上传。
 2.一个下载机,家里的小朋友有时候要看着电视才肯吃饭,而且很多优酷上还不能放,只好将一些早教视频下载到本地服务器。
3.一个家庭私有云owncloud。管理各种文档
4.一个音乐播放器,将自己喜欢的音乐下载并播放
5.一个7 x 24 小时运转。省电,安静
6.一个git服务器,存储一些自己的代码项目

这些都是我一些基本需求。网上还有人接下摄像头作监控,接上温度感应器来作温度和干湿度提醒,制作一个时钟等。我是一个程序员,没学过硬件,这些就暂不折腾了。