Docker 入门

93 阅读3分钟

概述 Docker 优势

  1. 快速持续集成。
  2. 服务的弹性伸缩。
  3. 部署简单,解放了运维。
  4. 为企业节省了机器资源。

Docker 是什么

Docker:一个装应用的跨平台容器。

Docker 思想

  1. 集装箱。
  2. 标准化:运输方式、存储方式、API接口。
  3. 隔离。

Docker 解决的问题

  1. 运行环境不一致所带来的问题。如:Java Web 程序正常运行所需的操作系统JDKTomcat代码配置文件等打包到一个集装箱
  2. 各个应用程序被隔离,代码问题只影响到自身应用。
  3. Docker 标准化让快速扩展、弹性伸缩更简单:在对应机器上跑对应命令即可实现。

Docker 核心技术

  1. 镜像:集装箱。【Build → 构建镜像】
  2. 仓库:超级码头。【Ship → 从仓库和我们的主机上运输镜像】
  3. 容器:运行程序的地方。【Run → 运行的镜像就是一个容器】

Docker 运行一个程序的过程就是:去仓库把镜像拉到本地,然后用一条命令把镜像运行起来,变成容器

Docker 镜像(image)

从本质上来说,镜像(image)就是一系列保存在本地的只读文件,可以包括应用程序的文件,也可以包括应用运行环境的文件。

联合文件系统(union fs):一种分层的文件系统,可以将不同的目录挂到同一个虚拟文件系统。

Docker 容器

容器本质是一个进程。

由于容器最上层文件支持读写,而镜像文件是只读的,所以一个镜像可以生成多个容器独立运行

Docker 仓库

构建镜像的目的是为了在其他机器、其他环境运行我们的程序。

先把镜像传到 Docker 仓库,再由目的地从仓库把镜像拉取过去。

Docker 仓库服务地址:

  1. Docker 自己提供:hub.docker.com。但是镜像下载速度慢。
  2. 其他公司提供。如:网易蜂巢的一个镜像中心。
  3. 公司自己搭建。适合私密、只对公司内部开放。

Docker 安装

  1. Windows 下载
  2. 验证安装
    $ docker version
    
    安装成功,可见输出 ClientServer 两部分内容。如图:
    image.png 另外,如若只出现 Client 部分,请参考 文档 更新下 Linux 内核 WSL 版本,按需设置 WSL 默认版本,再次验证即可。
    # 将 WSL 2 设置为默认版本
    wsl --set-default-version 2
    
  3. 启动 Docker 成功,如图: image.png

Docker 体验

Docker 镜像初体验

# 拉取镜像
docker pull [OPTIONS] NAME[:TAG]

# 查看镜像 or 验证镜像拉取成功
docker images [OPTIONS] [REPOSITRY[:TAG]]

image.png

Docker 容器初体验

docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

Docker 流程图

image.png

image.png

Docker Nginx 镜像

Nginx 镜像

  1. 持久运行的容器:NginxWeb 服务器。
  2. 前台挂起(Ctrl + C 结束)& 后台运行:附加参数 -d
    # 前台挂起
    docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
    
    # 后台运行
    docker run -d [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
    
    前台挂起时,可以运行如下命令查看本机当前正在运行的容器:
    # 查看本机当前正在运行的容器
    docker ps
    
  3. 进入容器内部。
    # 查看容器内部
    docker exec [OPTIONS] CONTAINER COMMNAD [ARG...]
    # eg:
    docker exec -it 57a187af1f32 bash
    
  4. 结束
    docker stop CONTAINER
    # eg:
    docker stop 57a187af1f32
    

命令参数查看,可附加属性 --help。如,查看进入容器内部命令都可以附加哪些属性:

docker exec --help

Docker 网络

依赖 Namespace 命名空间,实现资源隔离。

  1. 网络类型
    • Bridge 桥接,独立的 Namespace默认启动类型。
    • Host 和宿主机一致
    • None 没有网络,不跟外界通信
  2. 端口映射
    # 开放指定端口
    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