天天看點

Docker入門(二)

一、Docker相關概念

1.Docker:

namespace,cgroup:

解決方案:

lxc,openvz

lxc:linux containers

docker最初就是lxc的封裝版本。

docker engine/docker server:輸出一個api,用于接受外部請求

接受到client請求,借助于lxc虛拟化技術,在lxc上建立一個虛拟機執行個體。

docker借助于外部的dockerhub,實作image

背景docker不再使用lxc,使用libcontainer[centos 7],隔離使用者空間的引擎

在前端使用沒有差別

2.容器虛拟化

例如kvm也需要images,有一個完整的OS

而容器所需的images,并非完整的OS,隻擁有FS,沒有核心

借助于AUFS技術對映像檔案進行分層,容器運作一個獨立的FS上

運作nginx需要nginx依賴的庫,運作mysql需要依賴mysql的庫

把FS做成一個base image,再做幾個專用的image,例如nginx專用的,MySQl專用的

  [docker hub]

 /

/

  [cn1][cn2]...

[API] [docker  engine   ]

=======================

Hypervisor

=============

Host OS

==============

【硬體】

3.核心元件;

docker client:docker的client工具,使用者使用docker的接口,docker client與docker daemon通信。并将結果傳回給client

docker daemon:運作在主控端,Docker的守護程序,使用者可通過docker client與其互動;

image :隻讀的,基于aufs或者UnionFS疊加在一起,用來建立container

一個鏡像可以運作多個container;鏡像檔案可以通過Dockerfile建立,也可以從docker hub/registry 下載下傳

repository

公共倉庫 //提供有base image Docuer hub/registry

私有倉庫 //docker repository 

docker container:docker的運作執行個體,容器是一個隔離環境

另外兩個重要元件:

docker link:各docker之間的通信,openvswtich,netns建構,

docker volume:容器中的資料的持久化

二、安裝Docker:

centos6 ;epel

centos7: extra

docker-engine

安裝Docker:

https://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7/

yum install docker-engine

[root@node1 ~]# rpm -ql docker-engine |egrep -v "share"

/etc/udev/rules.d/80-docker.rules

/usr/bin/docker

/usr/bin/docker-containerd

/usr/bin/docker-containerd-ctr

/usr/bin/docker-containerd-shim

/usr/bin/docker-init

/usr/bin/docker-proxy

/usr/bin/docker-run

/usr/bin/dockerd

/usr/lib/systemd/system/docker.service

docker子指令有很多

systemctl start docker.service

docker images //檢視鏡像

docker search centos 

Name DESCRIPTION STARS STARS OFFICAL AUTOMATED

星 自動生成

darksheer/centos //使用者名:鏡像名

docker search busybox 

docker pull busybox //拉取官方鏡像 base iamge

tag : lastest //最新版本,預設最新版本

docker pull hub.mt.com:5000/busybox //執行私有倉庫擷取image,必須支援ssl。或者禁止使用tls

docker help run //運作

docker run [OPTIONS] IMAGS [COMMAND] [AEG,...]

//image應該有一個運作起來後,預設運作的指令。

-t --tty=false 配置設定一個預設的僞終端

-i --interactive=false 打開之後運作在互動式

[root@node1 ~]# docker run -it busybox:latest /bin/sh 

docker ps //檢視正在運作的 docker

需要借助于外 volume 儲存建立的資料。

docker help commit //基于目前容器的所有修改,建立一個新的images

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

三、docker常用指令:

1.環境資訊相關

info 

version

2.系統維護相關

images 

inspect :容器的詳細資訊

build:基于dockerfile建立image檔案

commit:基于運作中的容器建立映像檔案

pause:暫停

unpause

rm

rmi //删除映像檔案

run //基于image運作一個容器

start/stop/restart 

top //資源占用情況

ps 

kill

...

3.日志相關

events;

hisgory;

logs;

        4.Docker hub 相關

login

logout

pull

push 

search 

基本操作:

擷取映像:pull

啟動容器:run

-i,-t 

docker run -it centos:latest /bin/bash 

ifconfig //docker0 一個虛拟接口

一半在虛拟機, 一半在主控端

docker kill c98dac012556 //kill 掉容器,容器ID

docker ps -a //可以檢視所有的

關閉後,預設還是會占用記憶體,可以在啟動的時候

docker run --rm //退出則,rm自動移除容器

docker rm  c98dac012556 //删除該容器

docker image的建立:

1.基于dockerfile

2.基于運作中的容器修改

//僅僅是打包最上面一層,隻有最上面一層是可寫的。

實驗:commit,儲存檔案

[root@node1 ~]# docker run -it centos:latest /bin/bash

在home中 useradd centos 

[root@node1 ~]# docker commit faecb4def9d5 centos:newuser

[root@node1 ~]# docker images

有 newuser

[root@node1 ~]# docker kill faecb4def9d5

[root@node1 ~]# docker rm faecb4def9d5

[root@node1 ~]# docker ps -a

沒有之前的容器了

[root@node1 ~]# docker run -it --rm centos:newuser /bin/bash

rm用于關閉後,就删除容器

[root@3f20a3c7f5df /]# id centos

uid=1000(centos) gid=1000(centos) groups=1000(centos)

[root@3f20a3c7f5df /]# exit

[root@node1 ~]# docker ps -a //将沒有容器運作

本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1946362,如需轉載請自行聯系原作者