【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 截取容器停止时的退出状态值。

相关推荐
IT成长日记3 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子3 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
IMPYLH6 小时前
Python 的内置函数 reversed
笔记·python
FrankYoou7 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
隆里卡那唔7 小时前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j
疯子的模样7 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
ysa05103010 小时前
数论基础知识和模板
数据结构·c++·笔记·算法
今天背单词了吗98010 小时前
算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·数据结构·笔记·算法
mitt_10 小时前
《人生顶层设计》读书笔记7
笔记
智者知已应修善业11 小时前
【51单片机节日彩灯控制器设计】2022-6-11
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机