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
[[email protected] ~]# 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 打開之後運行在交互式
[[email protected] ~]# 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,保存文件
[[email protected] ~]# docker run -it centos:latest /bin/bash
在home中 useradd centos
[[email protected] ~]# docker commit faecb4def9d5 centos:newuser
[[email protected] ~]# docker images
有 newuser
[[email protected] ~]# docker kill faecb4def9d5
[[email protected] ~]# docker rm faecb4def9d5
[[email protected] ~]# docker ps -a
沒有之前的容器了
[[email protected] ~]# docker run -it --rm centos:newuser /bin/bash
rm用於關閉後,就刪除容器
[[email protected] /]# id centos
uid=1000(centos) gid=1000(centos) groups=1000(centos)
[[email protected] /]# exit
[[email protected] ~]# docker ps -a //將沒有容器運行
Docker入門(二)