docker基本操做

Docker是基於Linux 64bit的,沒法在windows/unix或32bit的linux環境下使用.
因此docker只能在64的系統裏面。容器虛擬化,比傳統的虛擬化輕量。易遷移,平臺依賴性不強。只算是系統的一個服務或模塊。
docker核心概念
1.  鏡像,只讀模版,像咱們裝系統的一個iso文件。
2.  容器 , 鏡像相似虛擬機自己,因此咱們說容器裝載鏡像。
3.倉庫,存放鏡像的一個地方,分爲私有倉庫和公有倉庫。最大的公開倉庫是Docker hub(hub.docker.com),國內公開倉庫(dockerpool.com)。
4.安裝docker(以centos爲列,分爲centos6,7)
 centos6 安裝
yum install -y epel-release
yum install -y docker-io
centos7 上安裝
yum install -y docker
啓動dockerl
/etc/init.d/docker start

5.docker基本操做
docker pull  centos   //從docker.com獲取centos鏡像
docker p_w_picpaths  //查看本地都有哪些鏡像
docker tag centos liu123  //爲centos鏡像設置標籤爲liu123,再使用docker p_w_picpaths查看會多出來一行,改行的p_w_picpathid和centos的同樣
docker search [p_w_picpath-name]   //從docker倉庫搜索docker鏡像,後面是關鍵詞
docker run -t -i centos  /bin/bash //用下載到的鏡像開啓容器,-i表示讓容器的標準輸入打開,-t表示分配一個僞終端,要把-i-t 放到鏡像名字前面
當該鏡像發生修改後,咱們能夠把該鏡像提交從新生成一個新版本進行在本地。
docker ps  //查看運行的容器,加上-a選項能夠查看沒有運行的容器
docker rmi centos  //用來刪除指定鏡像, 其中後面的參數能夠是tag,若是是tag時,其實是刪除該tag,只要該鏡像還有其餘tag,就不會刪除該鏡像。當後面的參數爲鏡像ID時,則會完全刪除整個鏡像,連通全部標籤一同刪除

6.當下載了一個鏡像後,而後docker run -it centos /bin/bash 進去後,安裝了一些安裝包後,能夠生成本身的一個鏡像。
docker commit -m "change somth" -a  "somebody info" container_id(經過dockerps -a獲取id) 新鏡像名字
例如:  docker commit  -m  "install httpd" -a "Aming" 2c74d574293f liuwenzhi
這個命令有點像svn的提交,
-m 加一些改動信息,
-a 指定做者相關信息  
2c74d這一串爲容器id,可經過docker ps -a
再後面爲新鏡像的名字 

7.把鏡像導出一個文件,鏡像遷移 
docker save -o centos.tar centos 

8.用剛纔的導出去的文件能夠恢復本地鏡像
docker load --input centos.tar  或者docker load <centos.tar

注:容器遷移
docker export container_id > file.tar

容器導入
cat file.tar |docker import - liuwenzhi  生成liuwenzhi該鏡像

9.docker create -it centos  //這樣能夠建立一個容器,但該容器並無啓動

docker start container_id  //啓動容器後,可使用dockerps 查看到,有start就有stop,和restart

以前咱們使用的docker run 至關於先create再start
docker run -i -t centos  bash 

這樣進入了一個虛擬終端裏面,咱們能夠運行一些命令,使用命令exit或者ctrl d 退出該bash,當退出後這個容器也會中止。
docker run -d  可讓容器在後臺運行

docker run --name web -itd centos bash // --name 給容器自定義名字
   
10.docker logs container_id 查看容器的歷史記錄

11.進入一個後臺,docker attach container_id  這個退出後容器也跟着退出,不建議用。

12.docker exec -it container_id bash 進入後臺運行的機器

13。刪除容器的命令
docker rm container_id 
刪除鏡像的命令
docker rmi 


14.上傳到本地鏡像
docker pull registry   //下載registry鏡像,registy爲docker官方提供的一個鏡像,咱們能夠用它來建立本地的docker私有倉庫。

docker run -d -p 5000:5000 registy  //以registry鏡像啓動容器,監聽5000端口

curl 127.0.0.1:5000  //能夠訪問它

下面咱們來把其中一個鏡像上傳到私有倉庫 
docker tag aming_test 172.7.15.106:5000/centos //標記一下tag,必需要帶有私有倉庫的ip:port 

docker push 172.7.15.106:5000/centos   //此時報錯了相似以下
Error
 response from daemon: invalidregistry endpoint 
https://172.7.15.106:5000/v0/: unable to ping registryendpoint 
https://172.7.15.106:5000/v0/
v2 ping attempt failed with error: Get https://172.7.15.106:5000/v2/:EOF
v1
 ping attempt failed with error: Get https://172.7.15.106:5000/v1/_ping:
 EOF.If this private registry supports only HTTP or HTTPS with an 
unknown CAcertificate, please add `--insecure-registry 
172.7.15.106:5000` to the daemon'sarguments. In the case of HTTPS, if 
you have access to the registry's CAcertificate, no need for the flag; 
simply place the CA certificate at 
/etc/docker/certs.d/172.7.15.106:5000/ca.crt


這
是由於Docker從1.3.X以後,與docker 
registry交互默認使用的是https,然而此處搭建的私有倉庫只提供http服務,因此當與私有倉庫交互時就會報上面的錯誤。爲了解決這個問題需
要在啓動dockerserver時增長啓動參數爲默認使用http訪問。解決該問題的方法爲:

vi /etc/init.d/docker  

把 $exec -d $other_args 改成
$exec -d --insecure-registry 172.7.15.106:5000  $other_args    這裏的IP是宿主機的IP
  
而後重啓docker
service docker restart

再啓動registry容器
docker start  registry_container_id

curl http://172.7.15.106:5000/v1/search   //能夠查看私有倉庫裏面的全部鏡像



15.docker的數據管理
掛在本地目錄到docker裏面
docker run -itd -v /data/:/data centos  bash     //:前面的/data是宿主機的目錄。後面是docker裏面的/data。

docker ps 查看剛纔開啓的docker的names(最後一列)

docker run -itd --volumes-from testvol aming bash    testvol就是剛纔建立的names


16.docker網絡

 在開啓docker容器時,就能夠定義網絡。用--net=   定義
host模式,docker建立指定網絡是host時,容器內的ip和宿主機的ip是同樣的。

container模式,是建立容器時指定另外一臺的網絡和如今建立的網絡同樣。
如: docker run -itd --net=container:container_id/container_name centos bash

none模式,不制定任何網絡

bridge模式,和vmware裏的nat模式類似。

17.docker裏面怎麼把http服務共享出去。

docker run -itd centos bash

docker exec container_id bash

yum install -y httpd

在經過保存鏡像獲得一個新建的鏡像

docker commit -m "install_with_httpd" -a "liuwenzhi" container_id  liuqingqing
獲得一個liuqingqing的一個鏡像。這裏的container_id是上面安裝了的http服務的那個容器的container_id。

docker run  -itd  -p 5123:80 liuqingqing bash

docker exec -it container_id bash

service httpd start

測試
編輯1.html: vi /var/www/html/1.html 隨便寫點東西

在宿主機上curl 127.0.0.1:5123/1.html   是否成功

18.配置橋接模式即(和宿主機同網段的ip)cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-br0 
分別編輯eth0和br0

  ifcfg-eth0改爲以下:

DEVICE=eth0
HWADDR=00:0C:29:55:A7:0A
TYPE=Ethernet
UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6
ONBOOT=yes
NM_CONTROLLED=yes
去掉ip,並添加br0
BOOTPROTO=none
BRIDGE=br0
ifcfg-br0改爲以下:

DEVICE=br0
#HWADDR=00:0C:29:55:A7:0A  去掉mac
TYPE=Bridge
#UUID=2be47d79-2a68-4b65-a9ce-6a2df93759c6   去掉uuid
ONBOOT=yes
NM_CONTROLLED=yes
改爲原eth0的網址ip.
BOOTPROTO=static  
IPADDR=192.168.1.17
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=202.106.0.20


我作實驗的時候出現過如下狀況。
[root@localhost network-scripts]# service network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Error: Connection activation failed: Master connection not found or invalid
                                                           [FAILED]
Bringing up interface br0:  Error: Connection activation failed: Failed to determine connection's virtual interface name
                                                           [FAILED]

解決辦法: 
chkconfig NetworkManager off
chkconfig network on
service NetworkManager stop    這條命令這裏當心,若是是遠程的話,會斷掉。
service network start

繼續下一步

yum install -y git  

用git下載docker官方的一個工具
git clone https://github.com/jpetazzo/pipework 

cp ~/pipework/pipework /usr/local/bin/
開啓一個容器 docker run -itd --net=none --name 123 centos  /bin/bash

rpm -Uvh https://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm 不升級會報錯(
Object "netns" is unknown, try "ip help".)

給容器設置ip
pipework br0 123 192.168.1.100/24
進去看下有沒有ip
docker exec -it 123 bash
相關文章
相關標籤/搜索