1、什么是容器?
容器就是在隔離的環(huán)境運行的一個進程,如果進程停止,容器就會銷毀。
隔離的環(huán)境擁有自己的系統(tǒng)文件、IP地址、主機名等
系統(tǒng)文件:kvm虛擬機、linux
程序:代碼,命令
進程:正在運行的程序
2、容器和虛擬化的區(qū)別
容器:共用宿主機內(nèi)核,輕量級,損耗少,啟動快,性能高
kvm虛擬化:需要硬件的支持,需要模擬硬件,可以運行不同的操作系統(tǒng),需要走開機流程
3、容器技術(shù)的發(fā)展過程
1):chroot技術(shù),新建一個子系統(tǒng)(擁有自己完整的系統(tǒng)文件)
參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
chang root
作業(yè)1:使用chroot監(jiān)獄限制SSH用戶訪問指定目錄和使用指定命令
https://linux.cn/article-8313-1.html
ls
2):linux容器(lxc) linux container(namespaces 命名空間 隔離環(huán)境 及cgroups 資源限制)
cgroups 限制一個進程能夠使用的資源。cpu,內(nèi)存,硬盤io
kvm虛擬機:資源限制(1c 1G 20G)
需要使用epel源
安裝epel源
yum install epel-release -y
編譯epel源配置文件
vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
安裝lxc
yum install lxc-* -y
yum install libcgroup* -y
yum install bridge-utils.x86_64 -y
##橋接網(wǎng)卡
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
echo 'TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0
echo 'TYPE=Bridge
BOOTPROTO=static
NAME=virbr0
DEVICE=virbr0
ONBOOT=yes
IPADDR=10.0.0.11
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=180.76.76.76' >/etc/sysconfig/network-scripts/ifcfg-virbr0
##啟動cgroup
systemctl start cgconfig.service
##啟動lxc
systemctl start lxc.service
##創(chuàng)建lxc容器
方法1:
lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64
方法2:
lxc-create -t centos -n test
#####為lxc容器設(shè)置root密碼:
[root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd
Changing password for user root.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
##為容器指定ip和網(wǎng)關(guān)
vi /var/lib/lxc/centos7/config
lxc.network.name = eth0
lxc.network.ipv4 = 10.0.0.111/24
lxc.network.ipv4.gateway = 10.0.0.254
##啟動容器
lxc-start -n centos7
3):docker容器
centos7.4 2G 10.0.0.11 docker01 host解析
centos7.4 2G 10.0.0.12 docker02 host解析
Docker是通過進程虛擬化技術(shù)(namespaces及cgroups cpu、內(nèi)存、磁盤io等)來提供容器的資源隔離與安全保障等。由于Docker通過操作系統(tǒng)層的虛擬化實現(xiàn)隔離,所以Docker容器在運行時,不需要類似虛擬機(VM)額外的操作系統(tǒng)開銷,提高資源利用率。
namespace 資源隔離
cgroups 進程的資源限制
kvm 虛擬磁盤文件,資源隔離
kvm 資源限制,--cpus --memory
docker 初期把lxc二次開發(fā),libcontainer
top
htop
docker的主要目標(biāo)是"Build,Ship and Run any App,Angwhere",構(gòu)建,運輸,處處運行
部署服務(wù),環(huán)境問題
一次構(gòu)建,處處運行
docker是一種軟件的打包技術(shù)
構(gòu)建:做一個docker鏡像
運輸:docker pull
運行:啟動一個容器
每一個容器,他都有自己的系統(tǒng)文件rootfs.
kvm解決了硬件和操作系統(tǒng)之間的依賴
kvm獨立的虛擬磁盤,xml配置文件
docker解決了軟件和操作系統(tǒng)環(huán)境之間的依賴,能夠讓獨立服務(wù)或應(yīng)用程序在不同的環(huán)境中,得到相同的運行結(jié)果。
docker鏡像有自己的文件系統(tǒng)。
docker容器是一種輕量級、可移植、自包含的軟件打包技術(shù),使應(yīng)用程序可以在幾乎任何地方以相同的方式運行。開發(fā)人員在自己筆記本上創(chuàng)建并測試好的容器,無需任何修改就能夠在生產(chǎn)系統(tǒng)的虛擬機、物理服務(wù)器或公有云主機上運行
4、docker的安裝
10.0.0.11:修改主機名和host解析
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
wget -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
yum install docker-ce -y
5、docker的主要組成部分
docker是傳統(tǒng)的CS架構(gòu)分為docker client和docker server,向mysql一樣
命令:docker version
docker info(如果要做監(jiān)控)
docker主要組件有:鏡像、容器、倉庫, 網(wǎng)絡(luò),存儲
啟動容器必須需要一個鏡像,倉庫中只存儲鏡像
容器---鏡像---倉庫
6、啟動第一個容器
配置docker鏡像加速 vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] }
docker run -d -p 80:80 nginx
run 創(chuàng)建并運行有個容器
-d 放在后臺
-p 端口羊舍
nginx docker鏡像的名字
7、docker的鏡像管理
docker search 搜索鏡像(優(yōu)先選擇官方的,其次是評分高的)
官方鏡像倉庫地址:hub.docker.com
docker pull(push) 獲取鏡像
docker pull centos6.9(官方pull沒有指定版本,默認(rèn)下載最新版本)
docker pull daocloud.io/huangzhichong/alpine-cn:latest (私有倉庫)
docker images 或 docker image ls 查看鏡像列表
docker rmi 或 docker image rm
例子:docker image rm centos:latest
docker image save centos >docker_centos7.6.tar.gz 導(dǎo)出鏡像
docker image load -i docker_centos7.6.tar.gz 導(dǎo)入鏡像
8、docker的容器管理
docker run -d -p 80:80 nginx:latest
run 創(chuàng)建并運行一個容器
-d 放在后臺
-p 映射端口
docker run -it --name centos6.9 /bin/bash
-it 分配交互式的終端
--name 指定容器的名字
/bin/bash 覆蓋容器的初始命令
docker run image_name 啟動容器
docker stop CONTAINER_ID 停止容器
docker kill CONTAINER_name 殺死容器
docker rm -f CONTAINER_ID 刪除容器
docker rm -f `docker ps -a -q` 批量刪除容器
docker ps (-a -l -q) 查看容器列表
docker exec 進入容器(調(diào)試、排錯)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)
9、docker容器的網(wǎng)絡(luò)訪問(端口映射)
-p hostPort:containerPort
指定映射(docker 會自動添加一條iptables規(guī)則來實現(xiàn)端口映射)
-p ip:hostPort:containerPort
多個容器都想使用80端口
-p ip::containerPort
隨機端口
-p hostPort:containerPort:udp
-p 10.0.0.100::53:udp 使用宿主機的10.0.0.100的這個ip地址的隨機端口的udp協(xié)議映射容器的udp53端口
-p 80:80 -p 443:443 可以指定多個p
docker run -P 隨機端口
通過iptables 來實現(xiàn)端口映射
小禮物走一走,來簡書關(guān)注我
作者:五月_w
鏈接:http://www.itdecent.cn/p/9591cbecd879
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。