【Docker基础】--查阅笔记1

目录

Docker是什么

Docker解决什么问题

  • 统一运行环境,测试环境和开发环境一致,版本和配置一致
  • 标准化、快速化的系统平滑迁移
  • 打破代码或程序即应用的观念,通过镜像将系统内核移除,自下向上打包应用,跨平台、跨服务器移植

新一代开发工程师:

coder -> programmer -> software engineer -> DevOps engineer

Docker的理念

基于Go语言实现,主要目标是:"Build, Ship and Run Any App, Anywhere"。通过对应用组件的封装、分发、部署和运行,使得App及其运行环境能够一次镜像,处处运行。

Docker解决了运行环境和配置问题的软件容器,方便持续集成,是一种有助于整体发布的容器虚拟化技术。Docker借鉴了标准集装箱的概念,集装箱运输货物,Docker运输软件。

一次构建,处处运行:

  • 快速的应用交付和部署
  • 便捷的升级和扩缩容
  • 简单的系统运维
  • 高效的计算资源利用
  • 应用场景:

Docker基本组成

Docker本身是一个容器运行载体或管理引擎。将App和配置依赖一起打包为一个可交付的运行环境,即image镜像文件,然后通过这个镜像文件生成Docker容器实例。

镜像(image)

  • 镜像是一个只读模板,用来创建Docker容器,一个镜像可以创建多个容器;
  • 镜像相当于容器的源代码,类比Java代码:镜像->类模板;容器->new出来的实例对象

容器(container)

从面向对象角度来看:容器是用镜像创建的运行实例,类似于一个虚拟化的运行环境。提供一个标准的隔离环境,可以被启动、开始、停止、和删除。

从镜像容器角度来看:类似于一个简易版的Linux环境(包括root用户权限、进程空间、用户空间、网络空间)和运行在其中的应用程序。

仓库(registry)

  • 集中存放镜像文件的地方,类似于Maven仓库、github仓库;
  • Docker容器提供的官方仓库为Docker Hub;
  • 仓库分为公开仓库和私有仓库,Docker Hub是最大的公开仓库,供用户免费下载使用

Docker平台架构

Docker是一个C/S架构,运行基本流程为:

  1. Docker Client和Docker Daemon建立通信,并发送请求给后者 Docker
  2. Daemon为架构主体,首先提供Docker Server功能,使其可以接受请求 Docker
  3. Engine执行,每一项工作都是以Job形式运行
  4. Job运行中,需要容器镜像时,从Registry中下载镜像,并通过镜像管理驱动(Graph driver)将下载的镜像以Graph存储
  5. 需要为Docker创建网络环境时,通过网络管理驱动(Network driver)创建并配置容器网络
  6. 需要限制Docker容器运行资源或执行用户指令时,通过Exec driver来完成
  7. Libcontainer是一个独立的容器管理包,Network driver和Exec driver通过它来实现具体对容器的操作

Docker基本实现原理

三步走:

  1. 使用操作系统的 namespace隔离系统资源技术,隔离:网络、PID进程、系统信号量、文件系统挂载、主机名、域名,来实现同一宿主机系统中,容器之间的隔离和互不干扰
powershell 复制代码
# 进程
ps aux | grep ssh
# namespace
ls -lah /proc/pidxxx/ns/
  1. 使用操作系统的cgroups系统资源配额功能,限制资源:CPU、没存、块设备、网络
powershell 复制代码
# 查看系统实现的资源限制
cat /proc/cgroups
  1. 通过OverlayFS数据存储技术,实现容器镜像的物理存储和新建容器存储
  • OverlayFS是一种堆叠文件系统,依赖并建立在其它的文件系统之上,如:ext4fs、xfs等,OverlayFS不参与磁盘空间的划分,只是将原来系统文件中的文件和目录进行"合并",最终给用户呈现"合并"的文件,称为联合挂载技术
  • Linux内核为Docker提供了两种驱动:Overlay和Overlay2。后者相对于前者有改进,在Inode利用率方面比Overlay更高效。
  • OverlayFS的实现方式:
    通过三个目录:lower目录、upper目录、work目录来实现。lower 目录可以是多个,upper 目录可以进行读写操作的目录,而 work 目录为工作基础目录,挂载后内容会被清空,并且在使用过程中其内容用户是不可见的,最后联合挂载完成之后给用户呈现的统一视图就被称为 merged 目录。

Docker常用命令

powershell 复制代码
systemctl start docker # 启动docker
systemctl stop docker # 停止docker
systemctl restart docker # 重启docker
systemctl status docker # 查看docker状态
systemctl enable docker # 开机自动启动docker
docker info # 查看docker概要信息

docker images [-qa] # 列出本地主机上的镜像 -q: 只列出ID, -a: 列出所有,包括历史镜像
docker search redis(镜像名称) # 搜索镜像
docker pull mysql:5.7(镜像名称[:TAG]) # 拉取镜像,没有 TAG 就表示 latest 
docker system df # 查看镜像、容器、数据卷所占的空间
# 删除镜像
docker rmi [-f] ubuntu
docker rmi [-f] mysql:5.7
# 强制删除所有镜像
docker rmi -f $(docker images -qa)

docker logs [-f] 容器名称|容器ID # 查看容器日志
docker top 容器名称|容器ID # 查看容器内运行的进程
docker inspect 容器名称|容器ID # 查看容器内部细节

docker exec -it 容器名称|容器ID [COMMAND] # 进入正在运行的容器并以命令行交互 eg:docker exec -it redis /bin/bash

# 容器和主机文件的互相拷贝
docker cp CONTAINER:SRC_PATH DEST_PATH|- # 拷贝容器中的文件到主机 eg: docker cp redis:/data/a.txt .
docker cp SRC_PATH|- CONTAINER:DEST_PATH # 拷贝主机文件到容器内

docker ps [-qa] # 列出当前正在运行的容器 -q: 只显示容器编号, -a: 列出所有,包括历史上运行过的
docker start/restart/stop 容器名称或容器ID 
docker kill 容器名称或容器ID # 强制停止容器
docker rm [-f] 容器名称或容器ID # 删除已停止的容器
# 一次强制删除多个容器
docker rm -f $(docker ps -qa)
docker ps -qa | xargs docker rm -f

# 新建和启动容器,前提是有镜像
docker run [OPTIONS] 镜像名称|镜像ID [COMMAND] [ARG...]
# eg: docker run -it --name=ubuntu ubuntu:20.04 /bin/bash
  • OPTIONS(可选项):
    ○ --name="容器名称",为容器指定一个名称。
    ○ -d:后台运行容器并返回容器 ID ,即启动守护式容器(后台运行)。
    ○ -i:以交互模式运行容器,通常和 -t 同时使用。
    ○ -t:为容器重新分配一个伪输入终端,通常和 -i 同时使用,即启动交互式容器(前台有伪终端,等待交互)。
    ○ -P:随机端口映射。
    ○ -p:指定端口映射。
    ○ --dns 8.8.8.8:指定容器使用的 DNS 服务器,默认和宿主一致。
    ○ --dns-search example.com:指定容器 DNS 搜索域名,默认和宿主一致。
    ○ -h "mars":指定容器的 hostname 。
    ○ -e username="dog":设置环境变量。
    ○ --env-file=[]:从指定文件读入环境变量。
    ○ --cpuset="0-2" or --cpuset="0,1,2":绑定容器到指定 CPU 运行。
    ○ -m:设置容器使用内存最大值。
    ○ --network="bridge":指定容器的网络连接类型,支持 bridge 、host 、none、container 四种类型,默认 bridge 。
    ○ --link=[]:添加链接到另一个容器。
    ○ --expose=[]:开放一个端口或一组端口。
    ○ --restart :指定重启策略,可以写 --restart=awlays 总是故障重启。
    ○ --volume , -v::绑定一个卷。一般格式为 主机文件或文件夹:虚拟机文件或文件夹 。
  • COMMAND(启动命令)。
  • ARG(启动参数)。

总结

命令 描述

attach 当前 shell 下 attach 连接指定运行镜像。

build 通过 Dockerfile 定制镜像。

commit 提交当前容器为新的镜像。

cp 从容器中拷贝指定文件或者目录到宿主机中。

create 创建一个新的容器,同 run,但不启动容器。

diff 查看 docker 容器变化。

events 从 docker 服务获取容器实时事件。

exec 在已存在的容器上运行命令。

export 导出容器的内容流作为一个 tar 归档文件[对应 import ]。

history 展示一个镜像形成历史。

images 列出系统当前镜像。

import 从tar包中的内容创建一个新的文件系统映像[对应 export ]。

info 显示系统相关信息。

inspect 查看容器详细信息。。

kill kill 指定 docker 容器

load 从一个 tar 包中加载一个镜像[对应 save ]。

login 注册或者登陆一个 docker 源服务器。

logout 从当前 Docker registry 退出。

logs 输出当前容器日志信息。

port 查看映射端口对应的容器内部源端口。

pause 暂停容器。

ps 列出容器列表。

pull 从docker镜像源服务器拉取指定镜像或者库镜像。

push 推送指定镜像或者库镜像至docker源服务器。

restart 重启运行的容器。

rm 移除一个或者多个容器。

rmi 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]。

run 创建一个新的容器并运行一个命令。

save 保存一个镜像为一个 tar 包[对应 load ]。

search 在 docker hub 中搜索镜像。

start 启动容器。

stop 停止容器。

tag 给源中镜像打标签。

top 查看容器中运行的进程信息。

unpause 取消暂停容器。

version 查看 docker 版本号。

wait 截取容器停止时的退出状态值。

相关推荐
q_q王28 分钟前
Ubuntu上docker、docker-compose的安装
linux·ubuntu·docker
c7692 小时前
【文献笔记】SatLM: Satisfiability-Aided Language Models Using Declarative Prompting
人工智能·笔记·语言模型·论文笔记
SofterICer2 小时前
DIY eSIM RSP (第一部分) 笔记
笔记
2401_887406573 小时前
虾分发平台平台优势
docker
想你依然心痛3 小时前
Spark大数据分析与实战笔记(第四章 Spark SQL结构化数据文件处理-05)
笔记·数据分析·spark
是瑶瑶子啦3 小时前
【机器学习】笔记| 通俗易懂讲解:生成模型和判别模型|01
人工智能·笔记·机器学习
王江奎4 小时前
音视频小白系统入门笔记-1
笔记·音视频
Alsn864 小时前
恶意外联情况监测-火绒、DNSLookupView(联网、禁用网卡、仅主机模式请求测试)
笔记
Dovis(誓平步青云)6 小时前
【数据结构】励志大厂版·初阶(复习+刷题):线性表(顺序表)
c语言·数据结构·经验分享·笔记·学习·算法·学习方法