容器的發展史:
1)chroot技術
chroot,即change root directory(更改 root 目錄),在 linux 系統中,系統默認的目錄結構都是以`/`,即是以根 (root) 開始的,而在使用chroot之後,系統的目錄結構將以指定的位置作爲`/`位置
2)lxc容器
全稱:linux container,通過namespaces 命名空間實現的隔離環境,通過cgroups實現的資源限制,提供類似虛擬機一樣的體驗。
3)docker容器
早期的docker容器底層就是調用的lxc,後期才換成了自己的libcontainer
docker容器是什麼?
Docker是通過內核虛擬化技術(namespaces及cgroups)來提供容器的資源隔離與資源限制。由於Docker通過操作系統層的虛擬化實現隔離(對操作系統的內核有要求),所以Docker容器在運行時,不需要類似虛擬機(VM)額外的操作系統開銷,從而比kvm虛擬機更輕量。
docker是一種軟件的打包技術。
docker是一個cs架構:通過docker version來查看
docker最重要的三大組件:鏡像,容器,倉庫
docker的安裝
yum源配置:
rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
安裝docker-ce:
yum install docker-ce -y
配置docker鏡像加速
鏡像加速器:阿里雲加速器,daocloud加速器,中科大加速器,Docker 中國官方鏡像加速:https://registry.docker-cn.com
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
systemctl restart docker
容器常見命令
啓動docker
systemctl start docker
systemctl enable docker
docker run -d -p 80:80 nginx
解釋:
run (創建並運行一個容器)
-d 放在後臺
-p 端口映射
nginx docker鏡像的名字
搜索鏡像:docker search
獲取鏡像: docker pull(push)
docker pull centos:6.8(沒有指定版本,默認會下載最新版)
docker pull daocloud.io/huangzhichong/alpine-cn:latest
查詢docker鏡像所有版本https://hub.docker.com/r/library/
鏡像管理
查看鏡像 docker images
刪除鏡像 docker rmi
例子: docker image rm centos:latest
導出鏡像 docker save
例子: docker image save centos > docker-centos7.4.tar.gz
導入鏡像 docker load
例子: docker image load -i docker-centos7.4.tar.gz
docker run -d -p 80:80 nginx:latest
run (創建並運行一個容器)
-d 放在後臺
-p 端口映射
nginx:latest docker鏡像的名字和版本
docker run == docker create + docker start
容器管理
停止容器 docker stop CONTAINER_ID
殺死容器 docker kill container_name
查看容器列表 docker ps / docker ps –a
刪除容器 docker rm
批量刪除容器 docker rm -f `docker ps -a -q`
docker run -it --name centos6 centos:6.8 /bin/bash
-it 分配交互式的終端
--name 指定容器的名字
/bin/sh 覆蓋容器的初始命令
--cpus 指定cpu的數量
--memory 限定內存的大小
-h 指定容器的主機名
進入容器
目的:排錯,調試
方法一:docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 推薦使用
例子: docker exec -it 容器id或容器名字 /bin/bash
方法二:docker attach [OPTIONS] CONTAINER
例子: docker attach 容器id或容器名字,缺點是多個登錄窗口使用同一個終端,兩邊的內容操作會保持一致
方法三:nsenter (安裝yum install -y util-linux 棄用)
docker的本質是:
在隔離的環境運行的一個進程,所以:docker容器內的第一個進程必須一直處於前臺運行的狀態(必須夯住),否則這個容器,就會處於退出狀態!