文章目录
-
- 1.docker架构
-
- [1.1 Docker Engine 为什么要设计成客户端 / 服务器(C/S)架构?](#1.1 Docker Engine 为什么要设计成客户端 / 服务器(C/S)架构?)
- [1.2 容器到底是什么](#1.2 容器到底是什么)
- [1.3 docker与虚拟机的区别是什么](#1.3 docker与虚拟机的区别是什么)
- [1.4 隔离是怎么实现的](#1.4 隔离是怎么实现的)
- 2.docker安装
- 3.docker镜像
- 4.docker容器
1.docker架构

1.1 Docker Engine 为什么要设计成客户端 / 服务器(C/S)架构?
- CS架构可以解耦,让升级、维护都更加简单
1.2 容器到底是什么
- 容器就是操作系统里一个特殊的"沙盒"环境,里面运行的进程只能看到受限的信息,与外部系统实现了隔离
为什么要隔离
- 容器隔离的目的是为了系统安全,限制了进程能够访问的各种资源
1.3 docker与虚拟机的区别是什么

| 实现方式 | 优势 | 劣势3 | |
|---|---|---|---|
| 虚拟机 | 虚拟化硬件 | 隔离程度非常高 | 资源消耗大,启动慢 |
| 容器 | 直接利用下层的硬件和操作系统 | 资源利用率高运行速度快 | 隔离程度较低 |
1.4 隔离是怎么实现的
Linux 操作系统内核之中三项资源隔离技术
| namespace | cgroup(Linux Control Group) | chroot |
|---|---|---|
| 2002 年 Linux 2.4.19 | 2008 年从 Linux 2.6.24,cgroup技术最早由Google实现,被用于公司内部的Borg系统,也就是Kubernetes的前身,后来才被集成进Linux内核。 | 1979 年的 UNIX V7,目前的容器基本不再使用过于古老的 chroot 了,而是改用 pivot _ root。 |
| 它可以创建出独立的文件系统、主机名、进程号、网络等资源空间(能看那些进程) | 对进程的 CPU、内存等资源的优先级和配额限制(能用那些资源) | 更改进程的根目录,也就是限制访问文件系统(能看那些文件) |
| 相当于给进程盖了一间小板房 | 给进程的小板房加了一个天花板 | 相当于给进程的小板房铺上了地砖 |
2.docker安装
1.安装Docker Engine
shell
sudo apt install -y docker.io
sudo service docker start #启动docker服务
sudo usermod -aG docker ${USER} #当前用户加入docker组
docker version
docker info # 会显示当前 Docker 系统相关的信息
docker run hello-world
docker pull busybox
docker run busybox echo hello world
2.配置docker加速器
shell
sudo vim /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker
daemon.json
json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
[
3.docker的基本目录
-
/etc/docker/ docker的认证目录
-
/var/lib/docker/ docker的应用目录
3.docker镜像
-
拉取镜像
shell$ docker pull unbuntu -
列举出所有镜像
shell$ docker images -a -
删除未标记或用过的镜像
shell$ docker rmi mydjango:1.0 mydjango:2.0 -
移除所有未被使用的镜像
shell$docker image prune -a -
使用dockerfile构建镜像,docker build + 目录,.代表当前目录,-t表示加标签
shell$ docker build -t mydjango:2.0 -
镜像加标签: docker tag 镜像标签 镜像标签名
shell$ docker tag mydjango:1.0 django
4.docker容器
应用的容器化:就是指应用程序不再直接和操作系统打交道,而是封装成镜像,再交给容器环境去运行
-
创建并运行容器
shell$ docker run --name mydjango_1 -it -p 8080:80 mydjango:1.0 #创建容器并进入容器 $ docker run -it ubuntu /bin/bash参数名 含义 -i 以交互模式运行容器 -t 为容器重新分配一个伪输入终端 -p 端口隐射,宿主机在前,容器在后 -d 后台运行容器,并返回容器ID -v 目录挂载 --entrypoint 指定进入点 --restart=always 服务重启 -
启动/停止/重启/容器
shell$ docker start mydjango_1 $ docker stop mydjango_1 $ docker restart mydjano_1 -
删除容器
这个命令与 docker rmi 非常像,区别在于它没有后面的字母"i"
shell$ docker rm my_django1 $ docker rm -f mydjango_1 # 强制删除一个正在运行的容器 $ docker container prune # 删除已停止运行的所有容器 -
查看正在运行中的容器
shell$ docker ps -a # -a 包括停止运行的容器 -
进入运行的容器
shell$ docker exec -it mydjango_1 /bin/bash -
查看容器日志
shell$ docker logs web -
查看容器的信息
shell$ docker inspect web $ docker inspect web | grep 'IPAddress' # 利用inspect查看容器的ip地址 -
查看容器内已修改文件
shell$ docker diff mydjango_1