概述 Docker 优势
- 快速持续集成。
- 服务的弹性伸缩。
- 部署简单,解放了运维。
- 为企业节省了机器资源。
Docker 是什么
Docker:一个装应用的跨平台容器。
Docker 思想
- 集装箱。
- 标准化:运输方式、存储方式、
API
接口。 - 隔离。
Docker 解决的问题
- 运行环境不一致所带来的问题。如:
Java Web
程序正常运行所需的操作系统、JDK
、Tomcat
、代码、配置文件等打包到一个集装箱。 - 各个应用程序被隔离,代码问题只影响到自身应用。
Docker
标准化让快速扩展、弹性伸缩更简单:在对应机器上跑对应命令即可实现。
Docker 核心技术
- 镜像:集装箱。【
Build
→ 构建镜像】 - 仓库:超级码头。【
Ship
→ 从仓库和我们的主机上运输镜像】 - 容器:运行程序的地方。【
Run
→ 运行的镜像就是一个容器】
用 Docker
运行一个程序的过程就是:去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器。
Docker 镜像(image)
从本质上来说,镜像(image
)就是一系列保存在本地的只读文件,可以包括应用程序的文件,也可以包括应用运行环境的文件。
联合文件系统(
union fs
):一种分层的文件系统,可以将不同的目录挂到同一个虚拟文件系统。
Docker 容器
容器本质是一个进程。
由于容器最上层文件支持读写,而镜像文件是只读的,所以一个镜像可以生成多个容器独立运行。
Docker 仓库
构建镜像的目的是为了在其他机器、其他环境运行我们的程序。
先把镜像传到
Docker
仓库,再由目的地从仓库把镜像拉取过去。
Docker
仓库服务地址:
Docker
自己提供:hub.docker.com。但是镜像下载速度慢。- 其他公司提供。如:网易蜂巢的一个镜像中心。
- 公司自己搭建。适合私密、只对公司内部开放。
Docker 安装
- Windows 下载
- 验证安装
安装成功,可见输出$ docker version
Client
,Server
两部分内容。如图:
另外,如若只出现
Client
部分,请参考 文档 更新下Linux
内核WSL
版本,按需设置WSL
默认版本,再次验证即可。# 将 WSL 2 设置为默认版本 wsl --set-default-version 2
- 启动
Docker
成功,如图:
Docker 体验
Docker 镜像初体验
# 拉取镜像
docker pull [OPTIONS] NAME[:TAG]
# 查看镜像 or 验证镜像拉取成功
docker images [OPTIONS] [REPOSITRY[:TAG]]
Docker 容器初体验
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
Docker 流程图
Docker Nginx 镜像
Nginx 镜像
- 持久运行的容器:
Nginx
是Web
服务器。 - 前台挂起(
Ctrl + C
结束)& 后台运行:附加参数-d
。
前台挂起时,可以运行如下命令查看本机当前正在运行的容器:# 前台挂起 docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...] # 后台运行 docker run -d [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
# 查看本机当前正在运行的容器 docker ps
- 进入容器内部。
# 查看容器内部 docker exec [OPTIONS] CONTAINER COMMNAD [ARG...] # eg: docker exec -it 57a187af1f32 bash
- 结束
docker stop CONTAINER # eg: docker stop 57a187af1f32
命令参数查看,可附加属性 --help
。如,查看进入容器内部命令都可以附加哪些属性:
docker exec --help
Docker 网络
依赖 Namespace
命名空间,实现资源隔离。
- 网络类型
Bridge
桥接,独立的Namespace
。默认启动类型。Host
和宿主机一致None
没有网络,不跟外界通信
- 端口映射
# 开放指定端口 docker run -d -p 8080:80 hub.c.163.com/library/nginx # 开放随机端口 docker run -d -P hub.c.163.com/library/nginx
制作自己的镜像
Dockerfile
一个用来构建镜像的文本文件,包含了一条条构建镜像所需的指令和说明# Dockerfile # 指令...
docker build
执行Dockerfile
中描述的事情,构建生成Docker
镜像docker build -t <imagesName> # eg: docker build -t hello-world