docker定義、安裝、鏡像、容器
- 使用最廣泛的開源容器引擎
- 一種操作系統級的虛擬化技術
- 依賴於Linux內核特性:Namespace(資源隔離)和Cgroups(資源限制)
- 一個簡單的應用程序打包工具
Docker設計目標
- 提供簡單的應用程序打包工具
- 開發人員和運維人員職責邏輯分離
- 多環境保持一致性
像一艘貨船,通過集裝箱把代碼打包,分開,然後再傳輸
Docker基本組成
Docker Client:客戶端
Ddocker Daemon:守護進程
Docker Images:鏡像
Docker Container:容器
Docker Registry:鏡像倉庫
容器 VS 虛擬機
區別:
傳統的vm:
容器:
底層都是基礎建設(服務器,臺式機)===》操作系統===》docker引擎====》容器
Docker應用場景
- 應用程序打包和發布
- 應用程序隔離
- 持續集成
- 部署微服務
- 快速搭建測試環境
- 提供PaaS產品(平臺即服務)
Linux安裝Docker
Docker版本
社區版(Community Edition,CE)
企業版(Enterprise Edition,EE)
官網:https://docs.docker.com/install/linux/docker-ce/centos/
支持平臺
Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
Mac
Windows
CentOS7.x安裝Docker
關閉selinux 關閉防火墻firewalld systemctl stop firewalld systemctl disable firewalld #安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm2 #添加Docker軟件包源(安裝源,安裝阿裏的) yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安裝Docker CE yum install -y docker-ce #啟動Docker服務並設置開機啟動 systemctl start docker systemctl enable docker 加速器:表示pull鏡像快點 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 執行後重啟: systemctl restart docker
[root@docker ~]# docker info
有警告
解決:
在CentOS中
? ? vim /etc/sysctl.conf?
? ? ?net.bridge.bridge-nf-call-ip6tables = 1
? ? ?net.bridge.bridge-nf-call-iptables = 1
? ? ?net.bridge.bridge-nf-call-arptables = 1
重啟系統。
鏡像管理
鏡像是什麽
- 一個分層存儲的文件
- ? 一個軟件的環境
- ? 一個鏡像可以創建N個容器
- ? 一種標準化的交付
- ? 一個不包含Linux內核而又精簡的Linux操作系統
- 鏡像不是一個單一的文件,而是有多層構成。我們可以通過docker history <ID/NAME> 查看鏡像中各層內容及大小,每層
- 對應著Dockerfile中的一條指令。Docker鏡像默認存儲在/var/lib/docker/\<storage-driver\>中。
鏡像從哪裏來?
Docker Hub是由Docker公司負責維護的公共註冊中心,包含大量的容器鏡像,Docker工具默認從這個公共鏡像庫下載鏡像。
地址:https://hub.docker.com/explore
配置鏡像加速器:https://www.daocloud.io/mirror
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
鏡像與容器聯系:
比如我從一個centos鏡像(大小:100M)中新建3個容器(3個容器總共大小 還是100M,因為是在容器之上進行讀寫的,大大提高磁盤利用率)
管理鏡像常用命令:
拉去鏡像:docker pull centos:7
例子:
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.15 e81eb098537d 9 days ago 109MB
centos 7 75835a67d134 6 weeks ago 200MB
centos latest 75835a67d134 6 weeks ago 200MB
導出鏡像:
[root@docker ~]# docker image save centos:7 > centos7.tar
[root@docker ~]# du -sh centos7.tar
200M centos7.tar
刪除鏡像:
[root@docker ~]# docker image rm centos:7
Untagged: centos:7
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.15 e81eb098537d 9 days ago 109MB
centos latest 75835a67d134 6 weeks ago 200MB
鏡像導入:
[root@docker ~]# docker image load < centos7.tar
容器管理
創建容器常用選項
錯誤:
WARNING: IPv4 forwarding is disabled. Networking will not work.
解決:
[root@docker ~]# echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/00-system.conf
[root@docker ~]# systemctl restart network && systemctl restart docker
創建容器:
[root@docker ~]# docker run -d -p 88:80 --name=php-icar -h icar1 nginx
-p 宿主機端口:容器端口
--name=php-icar :容器的名稱
-h icar1:表示容器主機的名稱
nginx:鏡像
訪問:curl 192.168.1.13:88
查看日誌:
[root@docker ~]# docker logs php-icar -f
[root@docker ~]# docker logs 2298942019ef -f
![](http://i2.51cto.com/images/blog/201811/26/ab56f940a4acfd0e35310e59f7348775.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
容器資源限制
可以限制下,以免一臺機資源占用過多
[root@docker ~]# docker image inspect centos 鏡像信息
內存限額:
允許容器最多使用500M內存和600M的Swap,並禁用 OOM Killer:
CPU限額:
允許容器最多使用一個半的CPU:
docker run -d --name nginx04 --cpus="1.5" nginx
允許容器最多使用50%的CPU:
docker run -d --name nginx05 --cpus=".5" nginx
**
[root@docker ~]# docker run -d --name nginx07 -m 1G --memory-swap="600m" --cpus=".1" --oom-kill-disable nginx
[root@docker ~]# docker stats nginx08 --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
9cbd71b8d7ce nginx08 0.00% 3.742MiB / 1GiB 0.37% 648B / 0B 0B / 0B 2**
[root@docker ~]# docker top nginx08 查看完整命令
UID PID PPID C STIME TTY TIME CMD
root 6107 6083 0 12:15 ? 00:00:00 nginx: master process nginx -g daemon off;
101 6142 6107 0 12:15 ? 00:00:00 nginx: worker process
進入容器:[root@docker ~]# docker exec -it nginx08 bash
docker定義、安裝、鏡像、容器