一、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,如需轉載請自行聯系原作者