Docker工作原理及常用操作

Docker工作原理及常用操作

[TOC]

简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。 —百度百科

可以简单地将 docker 理解为一种应用虚拟化方法。

docker 有以下优势:

  • 随心所欲打包镜像。
  • 不依赖宿主机环境。
  • 相比传统虚拟化方法,开销极低。
  • 快速创建、部署、发布、删除,启动速度比虚拟机快一个量级。
  • 支持自动化测试、持续集成和一键部署。
  • 与云趋势完美结合。

docker 可以用来做什么:

  • 快速、持续地交付应用。
  • 响应式部署和扩展。
  • 在同一硬件上运行更多的工作负载。

原理

docker 有四个重要组成部分:

  • 客户端(client)。客户端是许多 Docker 用户与 Docker 交互的主要方式。当使用诸如 docker run 之类的命令时,客户机将这些命令发送到 dockerd,由 dockerd 执行这些命令。docker 命令使用 docker API。Docker 客户机可以与多个守护进程通信。

  • 守护进程(daemon)。监听 Docker API 请求并管理 Docker 对象,如镜像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。

  • 镜像(image)。镜像是只读,通常,一个镜像基于另一个镜像,但带有一些额外的自定义的东西。例如我想从一个 MySQL 镜像构建一个基于 MySQL 镜像的已初始化好的数据库服务。Docker构建MySQL镜像并初始化

  • 容器(container)。容器是镜像的可运行实例。可以使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。一个容器连接到一个或多个网络,也可以用来创建一个新的镜像。容器与其他容器及其主机相对隔离。

Docker 使用客户机-服务器体系结构(C/S架构)。Docker 客户机与 Docker 守护进程进行对话,该守护进程负责沉重的构建、运行和分发 Docker 容器。Docker 客户机和守护进程可以在同一个系统上运行,也可以将 Docker 客户机连接到远程Docker守护进程。Docker 客户机和守护进程使用 REST API,通过 Unix 套接字或网络接口进行通信。

快速安装及启动

安装

CentOS 安装 docker

sudo yum install docker

启动服务

systemctl start docker.service

常用操作

拉取镜像

不加 tag 的话默认拉取最新。

# command
docker pull image:tag

# example
docker pull mysql:5.7.25

查找镜像

可以先查看镜像存不存在或是详细信息。

docker search image:tag

查看镜像

docker images

查看容器

查看正在运行的容器。

docker container ls

或者

docker ps

查看所有容器(包括停止的)。

docker container ls -a

容器交互

在容器创建时就进入交互界面。

docker run -it image-id bash

在容器创建后,通过容器id进入交互界面。

docker exec -it container-id bash

停止容器

docker stop container-id

创建镜像

当你对容器做出一些更改的时候,可以将其打包成一个新的镜像。

docker commit container-id

当然,最通用的方法还是使用 Dockerfile 构建镜像,Dockerfile 的基本语法在我的另一篇博客 Docker构建MySQL镜像并初始化 中有介绍。

# 在 Dockerfile 同目录下
docker build . -t new-image:tag

删除镜像

docker rmi image-id

删除容器

删除镜像前可能需要先删除容器,即使容器是停止的,还是会占用着镜像。

docker rm container-id

发布镜像

登录到 docker 账户。

docker login

推送镜像到 docker hub。

docker push image-id

注:image-idimage:tag 均能唯一标识一个镜像。