官方安裝手冊地址:https://docs.docker.com/engine/installation/linux/ubuntulinux/html
更多筆記:http://dockerpool.com/static/books/docker_practice/java
kubernetes(k8s)的yml+dockerfile如何編寫參考:https://github.com/xiaoyawl/docker-nginx/blob/master/Dockerfilelinux
compose+swarm不錯的筆記:http://www.jianshu.com/p/54b1b0a098c3nginx
使用的操做系統是是ubuntu14.04,按照官方的推薦的配置(其餘操做系統,多少有點區別請參考官方文檔)。安裝步驟以下:git
一、檢查內核版本github
uname -r #把linux內核升級到3.10以上
二、apt的證書驗證和keydocker
apt-get update apt-get install apt-transport-https ca-certificates apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
三、添加源shell
vim /etc/apt/sources.list.d/docker.list deb https://apt.dockerproject.org/repo ubuntu-trusty main apt-get update apt-get purge lxc-docker #若是已經安裝了,或者安裝的是更老的docker.io卸載掉 apt-get install linux-p_w_picpath-extra-$(uname -r) linux-p_w_picpath-extra-virtual #安裝aufs存儲必須包
四、安裝dockerbootstrap
apt-get install docker-engine service docker start
五、配置國內鏡像ubuntu
關於docker必定要按照官方安裝文檔來,特別是ubuntu14.04默認apt安裝的是1.9比較老的版本,若是使用國內鏡像就會報什麼亂七八糟的的錯誤,升級到最新版,問題解決
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://8db7f41f.m.daocloud.io #檢查下是否成功添加了一行:DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://8db7f41f.m.daocloud.io" vim /etc/default/docker
六、Docker經常使用命令講解
a.鏡像:
鏡像位置:/var/lib/docker/aufs
docker commit #容器名 centos:v1 ,建立鏡像,-a做者信息 -m鏡像信息 docker version #查看版本 docker search centos #搜索可用docker鏡像 docker p_w_picpaths #查看當前docker全部鏡像 docker pull centos #下載鏡像(會把全部相關tag都下載下來,建議仍是加上:tag少下載點) docker push 名稱+tag #上傳鏡像 cat centos.tar | docker import - centos6 #Docker導入鏡像 docker export id > cenos6.tar #Docker導出鏡像 docker rmi p_w_picpaths #刪除鏡像,最好是倉庫名+TAG(若是要多個就空格開就行),這樣其餘標籤相同id的文件就不會刪除(只是刪除標籤),若是要刪除全部標籤同一個id,那就 直接輸入id,就會都刪除
b.容器部分:
docker run centos echo "hello word" #在docker容器中運行hello world! docker run centos yum install ntpdate #在容器中安裝ntpdate的程序 #建立一個後臺運行的80端口映射的,本地掛載目錄的ubuntu系統 docker run -itd --name -p 80:80 -v /opt/tomcat:/opt ubuntu_nginx ubuntu:14.04 /bin/bash docker ps -l #命令得到最後一個容器的id docker ps -a #查看全部的容器。 docker commit 容器名稱 #提交剛修改的容器,例如: docker run -i -t centos /bin/bash #在容器裏啓動一個/bin/bash shell環境,能夠登陸進入操做,其中-t 表示打開一個終端的意思,-i表示能夠交互輸入。 docker run -d -i -t centos /bin/bash #在後臺啓動,退出要ctrl+P、Q才能繼續後臺,不能exit,exit就至關於關閉容器 docker attach CONTAINER ID #進入在後臺啓動後的這個容器 docker exec -it <CONTAINER ID> /bin/bash #這樣你就進到這個container 裏面了,這個bash退出也不會影響以前 docker run 啓動的 bash/ docker run -d centos:v1 /bin/bash #-d表示在後臺啓動,以daemon方式啓動。 docker run -d -p 80:80 -p 8022:22 centos:latest /usr/bin/sshd -D #端口映射 docker port 容器名 #查看端口映射狀況 docker stop 容器名 #正常關閉容器 docker kill 容器名 #直接kill掉進程 docker start id # 啓動某個容器,也能夠改成docker start -i 容器名稱 docker rm id #刪除容器
d.排bug經常使用:
docker inspect id #查看容器、鏡像狀態 docker logs -tf --tail 10 容器名 #最近10行容器內部運行狀況 docker top 容器名 #查看運行中容器的進程
七、Docker獨立IP及容器互聯
Ubuntu部分
apt-get install bridge-utils #安裝brctl安裝包 service docker stop #中止docker ifconfig docker0 down #中止網卡 brctl show #查看物理機上有哪些網橋 brctl delbr docker0 #刪除docker的默認網橋 brctl addbr br0 #自定義網橋 ifconfig br0 192.168.180.22 netmask 255.255.255.0 #給網橋指定IP和子網 vim /etc/default/docker #修改docker啓動橋接 DOCKER_OPTS="$DOCKER_OPTS -b=br0" service docker start #啓動docker brctl show #查看是否生效
Centos部分
service docker stop
ifconfig docker0 down
brctl delbr docker0
cd /etc/sysconfig/network-scripts/
vi ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
BRIDGE="br0"
BOOTPROTO=static
vi ifcfg-br0
DEVICE="br0"
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
TYPE=bridge
IPADDR=192.168.1.165
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS=192.168.1.50
vi /etc/sysconfig/docker
other_args="-b=br0"
service docker start
[root@localhost ~]# ps -ef|grep docker
root 5502 1 0 01:23 pts/3 00:00:00 /usr/bin/docker -d -b=br0
root 5800 5311 0 01:47 pts/3 00:00:00 grep docker
service network restart
可能會報如下錯誤:
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface br0: Determining if ip address 192.168.1.161 is already in use for device br0...
[ OK ]
Bringing up interface eth0: Error: Connection activation failed: Master connection not found or invalid
[FAILED]
解決方法:
此時,當前網卡也是能夠通訊的,可是經過網絡管理工具修改IP以後,當前修改操做是不會生效的。那如何消除這個提示呢?
其實,問題的緣由是RedHat本身開發的NetworkManager管理工具和/etc/sysconfig/network-scripts/ifcfg-ethx配置不一樣步形成的。若是要消除這個提示,請關閉NetworkManager
服務便可:
chkconfig NetworkManager off
service NetworkManager stop
Stopping NetworkManager daemon: [ OK ]
此時,再從新加載network服務便可:
service network restart
Shutting down interface br0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface br0: Determining if ip address 192.168.1.161 is already in use for device br0...
[ OK ]
Bringing up interface eth0: device eth0 is already a member of a bridge; can't enslave it to bridge br0.
[ OK ]
八、爲容器手動配置靜態ip
安裝新的 iproute 包:
wget https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
yum localinstall iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
安裝pipework:
git clone https://github.com/jpetazzo/pipework
cp ~/pipework/pipework /usr/local/bin/
啓動Docker容器:
docker run -itd --net=none jdeathe/centos-ssh:latest /bin/bash
pipework br0 <CONTAINER ID> 192.168.1.170/24@192.168.1.1
九、製做能夠ssh登陸的本地Docker鏡像
安裝製做CentOS鏡像的工具:
yum -y install febootstrap
製做CentOS鏡像文件centos6-p_w_picpath目錄:
febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim-minimal -i openssh-server -i openssh-clients centos6 centos6-p_w_picpath
http://mirrors.aliyun.com/centos/6/os/x86_64/
製做Docker鏡像,鏡像名字是centos6-base:
cd centos6-p_w_picpath && tar -c .|docker import - centos6-base
製做能夠ssh登錄的Docker鏡像,名字是centos6-ssh:
docker build -t centos6-ssh https://git.oschina.net/feedao/Docker_shell/raw/start/Dockerfile
通過前面的六個步驟,一個能夠登錄的本地docker鏡像就製做好了。
用戶名是:root,密碼是:123456
十、dockerfile
參考連接:http://www.blogjava.net/yongboy/archive/2013/12/16/407643.html
#執行,千萬別忘記後面的點號 docker build -f /opt/testfile -t ubuntu_14.04_autostart_nginx .
#指定鏡像版本 FROM ubuntu:14.04 #指定做者 maintainer lulinyi #鏡像生成過程當中執行的命令 RUN echo "deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted" > /etc/apt/sources.list && \ echo "deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted" >> /etc/apt/sources.list && \ echo "deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted" >> /etc/apt/sources.list && \ echo "deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted" >> /etc/apt/sources.list && \ echo "deb http://cn.archive.ubuntu.com/ubuntu/ trusty universe" >> /etc/apt/sources.list && \ echo "deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty universe" >> /etc/apt/sources.list && \ echo "deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates universe" >> /etc/apt/sources.list && \ echo "deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-updates universe" >> /etc/apt/sources.list && \ echo "deb http://cn.archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/sources.list && \ echo "deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/sources.list && \ echo "deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates multiverse" >> /etc/apt/sources.list && \ echo "deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-updates multiverse" >> /etc/apt/sources.list && \ echo "deb http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list && \ echo "deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list && \ apt-get update && \ apt-get install -y nginx #端口映射,run時-p 80對應!可是還不如直接run的時候指定呢! EXPOSE 80 #改命令爲nginx的前臺模式,CMD run的時候不要再加/bin/bash不然會被覆蓋!exec的時候加就行! CMD ["nginx","-g","daemon off;"]