1.docker基本原理
1.1 什么是docker?
-
1.Docker是使用最广泛的
开源容器引擎
-
容器:
-
1)容器是一个操作系统级别下的虚拟化技术,运行一个容器就像运行一个进程一样
-
2)容器依赖linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)
-
-
2.一种操作系统基本的
一个操作系统下,虚拟出来,其他操作系统的机器虚拟化技术
-
-
3.一种简单的应用
程序打包工具
-
4.依赖Linux内核特性:
Namespace(资源隔离)
和Cgroup(资源限制)
1.2 资源隔离和资源限制
-
资源隔离:
-
1)
Linux Namespaces
机制提供一种资源隔离方案,每个namespace看上去就像一个单独的Linux系统。 -
2)
PID
,IPC(进程通信),Network
等系统资源不再是全局性的,而是属于某个特定的Namespace。 -
3)每个namespace下的
资源对于其他namespace
下的资源都是透明,不可见的
。 -
4)系统中可以同时存在
两个进程号为0,1,2的进程
,由于属于不同的namespace
,所以它们之间并不冲突。 -
5)而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。
-
6)这样
每个namespace看上去就像一个单独的Linux系统
。
-
-
资源限制:
-
1)为了让容器中的进程更加可控,
Docker 使用 Linux cgroups 来限制容器中的进程允许使用的系统资源
。 -
2)可以在启动容器是指定每个容器可以使用的
网络、磁盘、CPU以及内存
等
-
2.ubuntu安装docker
2.1 安装docker
# 1.卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc# 2.更新ubuntu的apt源索引
# 修改apt国内源为中科大源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/' /etc/apt/sources.list
sudo apt update#3.安装包允许apt通过HTTPS使用仓库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common#4.添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -#5.设置Docker稳定版仓库(国内使用都用用国内的源)
#5.1 设置使用阿里云
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#5.2 设置使用官方,很慢(不建议用这个)
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
#6.添加仓库后,更新apt源索引
sudo apt-get update#7.安装最新版Docker CE(社区版)
sudo apt-get install docker-ce#8.检查Docker CE是否安装正确
sudo docker run hello-world
2.2 docker启动设置
# 启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker
2.3 docker简单使用(创建一个ngixn容器)
# 1、创建一个nginx容器
docker run -it nginx
# 2、查看docker运行的容器(可以获取到这个容器的id)
docker ps
# 3、访问这个容器
# 进入这个nginx容器(进入的文件系统和宿主机是完全隔离的,有自己独立的文件系统)
docker exec -it 73877e65c07d bash
# 4、查看当前容器的 IP
docker inspect 73877e65c07d # 73877e65c07d是通过docekr ps查看到的容器ID
curl 172.17.0.2 # 测试这个nginx容器是否可以访问