Docker基础与基本概念
- docker与传统虚拟机的架构对比
传统的虚拟机在宿主OS上运行Hypervisor, 在Hypervisor上运行虚拟操作系统如RHEL, CentOS等。应用App是运行在虚拟操作系统上的。
容器在宿主OS上运行Docker Engine,而应用App是直接运行在Docker Engine上的。容器上运行的App与宿主OS共享硬件资源,如CPU和内存。以VMware为例,即使是企业级的esxi虚拟化技术,和容器的运行效率比仍然有 5%~45%
的性能差异。
- docker的安装
CentOS上运行如下命令安装docker
yum install docker-ce
如果遇到网络问题无法下载,可以修改 /etc/docker/damon.json
添加如下镜像链接
{
"registry-mirrors": [
"https://docker.rainbond.cc"
"https://docker.1pnel.live"
]
}
- docker镜像的组成
docker镜像从下往上,有以下几个部分组成
- 可写容器
- 镜像,制作的应用镜像如Nginx, VIM等
- 基础镜像rootfs,如ubuntu
- 引导文件系统boots,包含内核和容器组、命名空间、设备映射等
doker容器分镜像层和容器层,镜像层是只读的,容器层允许修改镜像的整个副本。容器层使用写时复制技术,数据写入到挂载的宿主机数据卷中。
- 镜像的制作
镜像制作的dockerfile实例:
FROM centos
RUN yun -y install wget
RUN wget -O redis.tar.gz "https://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xzvf redis.tar.gz
以上执行会创建3层镜像。可简化为以下格式:
FROM centos
RUN yun -y install wget && wget -O redis.tar.gz "https://download.redis.io/releases/redis-5.0.3.tar.gz" && tar -xzvf redis.tar.gz
原则上一个容器运行一个应用。
- docker的一些命令
编译docker镜像
docker build -t nginx:v20
运行docker镜像
docker run -itd -p 8000:80 nginx:v20
查看宿主和容器的端口映射
iptables -t nat -L -n
查看docker挂载的卷
docker volume ls
查看docker网络
docker network ls
查看docker里进程
docker ps