Docker 三要素

文章目录

Docker 简介

学习完容器的相关概念,开始学习docker的核心组件分别是Docker客户端、Docker服务器、Docker镜像、Docker容器、仓库。

学习之前,我们先思考一个问题,目前开发面临着怎样的挑战?

随着系统在架构上的调整,已经变得非常复杂了,之前采用的三层架构,开发将代码告诉运维,运维打包好后部署在几台物理服务器上,暴露出的问题很少,而今天随着应用的增多,各类的服务比如MQ、DB、Redis、应用等,为了方便管理,这些不同的服务有可能会部署到不同的环境,一方面这些服务有所依赖的库和软件包,另一方面存在多种部署环境,这就产生了一个问题:如何让这些服务不用考虑运行环境的因素,能够顺利的运行?

docker的出现正是解决了类似的问题,它的思想将各类软件打包,为代码提供了一个基于容器标准化运输系统。将任何应用及其所依赖打包成一个轻量级、可移植、自包含的容器。容器可以运行在几乎所有的操作系统上。

对于开发人员: Build Once 、Run Anywhere,开发人员只需要为应用创建一次运行环境。然后打包成容器便可在其他机器上运行。

对于运维人员 : Configure Once、Run Anything

只需要配置好标准的runtime运行环境、服务器就可以运行任何容器。容器消除了开发、测试、生产环境的不一致性,提高工作效率。

Docker采用的是Client/Server架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。

Docker客户端

Docker客户端最常用的就是docker命令,如docker image docker run等。

Docker服务器

Docker服务器指的是docker 运行在服务器上的后台进程

如systemctl status docker.service

Docker 镜像

可将Docker镜像看成只读模板,通过它可以创建Docker容器。

镜像有多种生成方法:

(1)从无到有开始创建镜像;

(2)下载并使用别人创建好的现成的镜像;

(3)在现有镜像上创建新的镜像。

它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系统的 root 文件系统

镜像命令

docker images

列出本机镜像

各个选项说明:

REPOSITORY:表示镜像的仓库源 TAG:镜像的标签版本号 IMAGE ID:镜像ID CREATED:镜像创建时间

SIZE:镜像大小

同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像

·

OPTIONS说明: ·

-a :列出本地所有的镜像(含历史映像层) ·

-q :只显示镜像ID

扩展

· docker search 某个XXX镜像名字

OPTIONS说明:

· -- limit : 只列出N个镜像,默认25个 · docker search --limit 5 redis

如搜索Mysql5.0版本只显示点赞数最多的前5个

docker pull

docker pull 某个XXX镜像名字 · 下载镜像 · docker pull 镜像名字[:TAG] ·

docker pull 镜像名字 · 没有TAG就是最新版 · 等价于 · docker pull 镜像名字:latest

docker pull ubuntu

例:拉取redis:5.0版本的镜像

docker pull redis:5.0

扩展

docker system df 查看镜像/容器/数据卷所占的空间

docker images 的镜像相加等于 docker system df 的镜像所占空间

常用命令

cpp 复制代码
·    docker rmi 某个XXX镜像名字ID
·    删除镜像
·    删除单个
·    docker rmi  -f 镜像ID
·    删除多个
·    docker rmi -f 镜像名1:TAG 镜像名2:TAG
·    删除全部
·    docker rmi -f $(docker images -qa)

扩展:

什么是docker虚悬镜像是什么?

仓库名、标签都是的镜像,俗称虚悬镜像dangling image,容器有时候在构建过程中的不成功会产生 虚悬镜像。

Docker 容器

从镜像容器角度,可以把容器看做是一个简易版的 Linux

环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 Docker容器就是Docker镜像的运行实例。

用户可以通过CLI(Docker)、停止、移动或删除容器。可以这么认为,对于应用软件,镜像是软件生命周期的构建和打包阶段,而容器则是启动和运行阶段。

镜像与容器的关系

镜像相当于容器的"源代码",docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

容器常用命令

· docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

cpp 复制代码
--name="容器新名字"       为容器指定一个名称;
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
也即启动交互式容器(前台有伪终端,等待交互);
-P: 随机端口映射,大写P
-p: 指定端口映射,小写p

启动交互式容器(前台命令行)

使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

docker run -it centos /bin/bash

参数说明:

cpp 复制代码
-i: 交互式操作。
-t: 终端。
centos : centos 镜像

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

列出当前所有正在运行的容器

cpp 复制代码
·    docker ps [OPTIONS]
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。

启动已停止运行的容器

cpp 复制代码
·    docker start 容器ID或者容器名
·    重启容器
·    docker restart 容器ID或者容器名
·    停止容器
·    docker stop 容器ID或者容器名

强制停止容器

cpp 复制代码
·    docker kill 容器ID或容器名
·    删除已停止的容器
·    docker rm 容器ID
·    一次性删除多个容器实例
·    docker rm -f $(docker ps -a -q)
·    docker ps -a -q | xargs docker rm

仓库(repository)

仓库(Repository)是集中存放镜像文件的场所。

类似于 Maven仓库,存放各种jar包的地方; github仓库,存放各种git项目的地方;

Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是 Docker

Hub(https://hub.docker.com/), 存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等

Docker常用命令

帮助启动类命令

  1. 启动docker: systemctl start docker
  2. 停止docker: systemctl stop docker
  3. 重启docker: systemctl restart docker
  4. 查看docker状态: systemctl status
  5. docker 开机启动: systemctl enable docker 查看docker概要信息: docker info
  6. 查看docker总体帮助文档: docker --help 查看docker命令帮助文档: docker 具体命令 --help
相关推荐
大霞上仙14 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子1 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
布值倒区什么name1 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug
阿尔帕兹1 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
。puppy2 小时前
HCIP--3实验- 链路聚合,VLAN间通讯,Super VLAN,MSTP,VRRPip配置,OSPF(静态路由,环回,缺省,空接口),NAT
运维·服务器
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
光芒再现dev2 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
AndyFrank3 小时前
mac crontab 不能使用问题简记
linux·运维·macos
ZHOU西口3 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac