docker1.12安裝配置及使用筆記

官方安裝手冊地址: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;"]
相關文章
相關標籤/搜索