1:什么是容器砸西?
容器就是在隔離的環(huán)境中運(yùn)行的一個(gè)進(jìn)程叶眉,如果進(jìn)程停止址儒,容器就會(huì)退出。隔離的環(huán)境擁有自己的系統(tǒng)文件衅疙,ip地址莲趣,主機(jī)名等
kvm虛擬機(jī),linux饱溢,系統(tǒng)文件
程序:代碼喧伞,命令 進(jìn)程:正在運(yùn)行的程序
2:容器和虛擬化的區(qū)別
linux容器技術(shù),容器虛擬化和kvm虛擬化的區(qū)別:
-
linux開機(jī)啟動(dòng)流程
- 容器啟動(dòng)流程: 共用宿主機(jī)內(nèi)核: 第一個(gè)進(jìn)程直接啟動(dòng)服務(wù)(nginx绩郎,httpd潘鲫,mysql)
kvm虛擬化:需要硬件的支持,需要模擬硬件肋杖,可以運(yùn)行不同的操作系統(tǒng)溉仑,啟動(dòng)時(shí)間分鐘級(jí)(開機(jī)啟動(dòng)流程)
容器:共用宿主機(jī)內(nèi)核,輕量級(jí)状植,損耗少浊竟,啟動(dòng)快,性能高津畸,只能運(yùn)行在linux系統(tǒng)上
虛擬機(jī):需要硬件的支持振定,需要模擬硬件,需要走開機(jī)啟動(dòng)流程洼畅,可以運(yùn)行不同的操作系統(tǒng)
- 3:容器技術(shù)的發(fā)展過程:
1):chroot技術(shù)吩案,新建一個(gè)子系統(tǒng)(擁有自己完整的系統(tǒng)文件)
2):linux容器(lxc) linux container(namespaces 命名空間 隔離環(huán)境 及cgroups 進(jìn)程資源限制)
3:docker容器
- docker是一種軟件的打包技術(shù)
centos7.6 2G 10.0.0.11 docker01 host解析 centos7.6 2G 10.0.0.12 docker02 host解析
Docker是通過進(jìn)程虛擬化技術(shù)(namespaces及cgroups cpu、內(nèi)存帝簇、磁盤io等)來提供容器的資源隔離與安全保障等徘郭。由于Docker通過操作系統(tǒng)層的虛擬化實(shí)現(xiàn)隔離,所以Docker容器在運(yùn)行時(shí)丧肴,不需要類似虛擬機(jī)(VM)額外的操作系統(tǒng)開銷残揉,提高資源利用率。 namespace 資源隔離 cgroups 進(jìn)程的資源限制 kvm 虛擬磁盤文件芋浮,資源隔離 kvm 資源限制抱环,--cpus --memory
docker 初期把lxc二次開發(fā),libcontainer
4:docker的安裝
10.0.0.11:修改主機(jī)名和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
[root@docker01 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:25:41 2019
OS/Arch: linux/amd64
Experimental: false
- docker主要組件有:鏡像纸巷、容器镇草、倉(cāng)庫(kù), 網(wǎng)絡(luò),存儲(chǔ)
6:?jiǎn)?dòng)第一個(gè)容器
- 啟動(dòng)容器必須需要一個(gè)鏡像瘤旨,倉(cāng)庫(kù)存儲(chǔ)鏡像 容器---鏡像---倉(cāng)庫(kù)
- docker初次體驗(yàn): 安裝Nginx步驟: 官網(wǎng)下載Nginx源碼包wget
tar 創(chuàng)建Nginx用戶
1.配置docker鏡像加速
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
2.docker啟動(dòng)nginx
docker run -d -p 80:80 nginx
run(創(chuàng)建并啟動(dòng)一個(gè)容器) 等于
-d 放在后臺(tái)
-p 端口映射
nginx docker鏡像的名字
7:docker的鏡像管理
搜索鏡像? docker search 選鏡像的建議: 1梯啤,優(yōu)先考慮官方 2,stars數(shù)量多
官方鏡像倉(cāng)庫(kù)地址:hub.docker.com
獲取鏡像? docker pull(push)?
鏡像加速器:阿里云加速器存哲,daocloud加速器因宇,中科大加速器七婴,Docker 中國(guó)官方鏡像加速:https://registry.docker-cn.com?
官方pull docker pull centos:6.8(沒有指定版本,默認(rèn)會(huì)下載最新版)
私有倉(cāng)庫(kù)pull docker pull daocloud.io/huangzhichong/alpine-cn:latest
- 鏡像管理相關(guān)命令
查看鏡像列表? docker images 或者 docker image ls
刪除鏡像? docker rmi 例子:docker image rm centos:latest
導(dǎo)出鏡像? docker save 例子:docker image save centos -o docker-centos7.4.tar.gz
導(dǎo)入鏡像? docker load 例子:docker image load -i docker-centos7.4.tar.gz?
8:docker的容器管理
- 創(chuàng)建并運(yùn)行一個(gè)容器
docker run -d -p 80:80 nginx:latest
run(創(chuàng)建并運(yùn)行一個(gè)容器)
-d ----放在后臺(tái)
-p ----端口映射
-v ----源地址(宿主機(jī)):目標(biāo)地址(容器)
nginx:latest ----docker鏡像的名字
- 命名一個(gè)容器
docker run -it --name centos6 centos:6.9 /bin/bash
-it ----分配交互式的終端interactive tty
--name ----指定容器的名字
/bin/sh ----覆蓋容器的初始命令
運(yùn)行容器
docker run image_name
docker run ==== docker create + docker start
啟動(dòng)容器
docker start
停止容器
docker stop CONTAINER_ID
殺死容器
docker kill container_name
查看容器列表
docker ps(-a -l -q)
刪除容器
docker rm
批量刪除容器
docker rm -f `docker ps -a -q`
9:docker容器的網(wǎng)絡(luò)訪問(端口映射)
- 首先要開啟宿主機(jī)的內(nèi)核轉(zhuǎn)發(fā)參數(shù),通過iptables來實(shí)現(xiàn)的端口映射
[root@docker01 ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
- 指定映射(docker 會(huì)自動(dòng)添加一條iptables規(guī)則來實(shí)現(xiàn)端口映射) ?
-p hostPort:containerPort ? 宿主機(jī)端口映射到容器
-p ip:hostPort:containerPort 多個(gè)容器都想使用80端口
-p 10.0.0.100::53/udp 使用宿主機(jī)的10.0.0.100這個(gè)ip地址的隨機(jī)端口的udp協(xié)議映射容器的udp53端口 ?
-p 81:80 –p 443:443 可以指定多個(gè)-p
10:docker的數(shù)據(jù)卷管理
nginx 站點(diǎn) /usr/share/nginx/html
持久化 數(shù)據(jù)卷(文件或目錄)?
-v 卷名:/data (第一次卷是空,會(huì)容器的數(shù)據(jù)復(fù)制到卷中,如果卷里面有數(shù)據(jù),把卷數(shù)據(jù)的掛載到容器中)? -v src(宿主機(jī)的目錄):dst(容器的目錄) 數(shù)據(jù)卷容器? --volumes-from(跟某一個(gè)已經(jīng)存在的容器掛載相同的卷)?
-
基于nginx啟動(dòng)一個(gè)容器察滑,監(jiān)聽80和81打厘,訪問80,出現(xiàn)nginx默認(rèn)歡迎首頁(yè)贺辰,訪問81户盯,出現(xiàn)靜態(tài)頁(yè)面
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx 基于nginx多端口的多站點(diǎn)
①.編寫nginx.conf文件
[root@docker01 ~]# cat nginx/nginx.conf
server {
listen 80;
root /usr/share/nginx/html;
location / {
index index.html;
}
}
server {
listen 81;
root /opt;
location / {
index index.html;
}
}
②.下載靜態(tài)頁(yè)面代碼
③.根據(jù)鏡像起一個(gè)容器,并將目錄掛載
docker run -d -p 80:80 -p 81:81 -v /root/yiliao:/opt -v /root/nginx:/etc/nginx/conf.d/ nginx:latest
11:手動(dòng)將容器保存為鏡像
docker commit 容器id或者容器的名字 新的鏡像名字[:版本號(hào)可選]
- 1:基于容器制作鏡像
①.根據(jù)鏡像啟動(dòng)一個(gè)容器
[root@docker01 ~]# docker run -it centos6.9
②.將代碼防止nginx的默認(rèn)目錄下
配源(centos6)
配源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
安裝nginx
yum install -y nginx
刪除原來的默認(rèn)頁(yè)面并加入新的頁(yè)面
rm -f /usr/share/nginx/html/ *
vi /usr/share/nginx/html/index.html
重啟nginx
nginx -s reload
③.將安裝好的服務(wù)器提交為鏡像
docker container commit optimistic_brahmagupta yiliao:v1
④.使用鏡像啟動(dòng)容器訪問
docker run -d -p 88:80 yiliao:v1 nginx -g 'daemon off'