docker学习整理

本文档详细介绍了Docker的概述、历史、架构及核心组件。内容涵盖Docker的安装与卸载、常用命令、镜像原理及创建、数据卷持久化、Dockerfile的使用以及Docker Compose的配置。通过对Docker的学习,读者可以全面了解并掌握Docker的使用和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker学习整理

概述

  • Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。

  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

官方文档:https://docs.docker.com/

仓库地址:https://hub.docker.com/

历史

2010年,dotCloud公司成立,要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。

后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker,但是当时并没有引起很大的反响。

2013年,dotCloud 公司的PaaS业务不太景气,公司名字改为docker,并在同年3月份将docker开源。不开则已,一开惊人,越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。

架构

Docker使用了C/S体系架构,Docker客户端与Docker守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
在这里插入图片描述

Docker daemon

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

Docker client

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

Docker registries

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

Images

一个镜像是用于创建一个docker容器指令的只读模板。通常,一个镜像基于另一个镜像,并带有一些额外的自定义。

可以创建自己的镜像,也可以仅使用其他人创建并在registries中发布的镜像。构建自己的镜像可以使用简单的语法创建一个Dockerfile,用于定义创建镜像和运行镜像所需的步骤。Dockerfile 中的每条指令都会在镜像中创建一个层。更改Dockerfile并重建镜像时,只会重建那些已更改的层。与其他虚拟化技术相比,这是使镜像如此轻巧、小巧和快速的部分原因。

Containers

容器是镜像的可运行实例。使用 Docker API 或 CLI 创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新映像。

默认情况下,容器与其他容器及其主机相对隔离。可以控制容器的网络、存储或其他底层子系统与其他容器或主机之间的隔离程度。

容器由其映像以及在创建或启动它时提供给它的任何配置选项定义。当容器被移除时,未存储在持久存储中的对其状态的任何更改都会消失。

docker安装与卸载

以centos7示例:

  • 安装docker
# 环境 Linux version 3.10.0-693.el7.x86_64
# 1.卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2.安装yum-utils包(提供yum-config-manager 实用程序)并设置稳定存储库。
sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 3.安装最新版本的 Docker Engine 和 containerd
sudo yum install docker-ce docker-ce-cli containerd.io
# 4.启动docker
sudo systemctl start docker
# 5.通过运行hello-world 映像验证 Docker Engine 是否已正确安装。
sudo docker run hello-world
  • 卸载docker
# 1.卸载 Docker Engine、CLI 和 Containerd 包:
sudo yum remove docker-ce docker-ce-cli containerd.io
# 2.主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有镜像、容器和卷:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

常用命令

20201212210110

帮助命令

# 查看docker版本信息
docker version
# 显示docker的系统信息,包括镜像和容器的数量
docker info
# 帮助命令
docker --help

镜像命令

# 显示本地所有镜像
docker images
# 搜索镜像
docker search 镜像名
# 拉取镜像
docker pull 镜像名
# 删除镜像
docer rmi 镜像名/镜像id
# 删除全部的镜像
docker rmi -f $(docker images -aq) 

容器命令

  • 启动容器
docker start 容器id
  • 重启容器
docker restart 容器id
  • 停止容器
docker stop 容器id
  • kill容器
docker kill 容器id
  • 列出所有运行容器
docker ps
  • 删除容器
docker rm 容器名/容器id
  • 新建容器并启动
docker run 镜像id
 -d # 后台运行
 -i # 以交互模式运行,通常与-t一起使用
 -P # 随机端口映射,容器内部端口随机映射到主机的端口
 -p # 指定端口映射,格式为:主机(宿主)端口:容器端口
 -t # 为容器重新分配一个伪输入终端,通常与 -i 同时使用
 --name="nginx-lb"  #为容器指定一个名称
 -e # 设置环境变量
 --net="bridge" # 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
 --link=[] # 添加链接到另一个容器;
 --expose=[] # 开放一个端口或一组端口;
 --volume,-v # 挂载绑定一个卷
docker run -itd --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /usr/docker_study/mysql/conf:/etc/mysql/conf.d 5c62e459e087

其他常用命令

docker logs -tf --tail 显示的日志条数 容器名/id  # 查看日志
docker top 容器名/id                 # 查看容器中的进程信息
docker inspect 容器名/id             # 查看镜像的元数据
docker exec -it 容器名/id /bin/bash  # 通常容器以后台方式运行,需要进入其中修改配置:进入容器后开启一个新终端         
docker attach 容器名/id              # 进入容器正在执行的终端
docker cp 容器名/id:容器内路径 主机文件路径       # 从容器内拷贝文件到主机上
Exit                         # 从容器中退回主机 
CTRL+Q+P                     # 容器不停止退出

镜像详解

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

img

UnionFS(联合文件系统)

Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Dokcer镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统加载起来,这样最终的文件系统会包含所有的底层文件和目录。

镜像加载原理

docker的镜像实际上是由一层一层的文件系统构成,这种层级的文件系统UnionFS。主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的linux/unix系统是一样的,包含boot加载器内核。当boot加载完之后整个内核就都在内存中了,此时内存的使用权已经由bootfs交给内核了,此时系统也会卸载bootfs。

分层

docker pull的过程中是一层一层的下载。好处就是可以共享资源。

比如有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也需要加载一份base镜像,就可以为所有服务器服务了。而且镜像的每一层都可以被共享。

创建镜像

docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[tag]  # 编辑容器后提交容器成为一个新镜像

创建自己的tomcat镜像示例:

# 1.搜索官方镜像
docker search tomcat
# 2.拉取官方镜像
docker pull tomcat:9.0
# 3.运行镜像
docker run -itd --name tomcat01 -p 8080:8080 tomcat:9.0
# 4.添加改变(官方镜像tomcat得webapps下无示例项目,需从webapps.list拷贝)
docker exec -it tomcat01 /bin/bash
cp -r webapps.dist/* webapps   #当前即可正常访问示例项目
# 5.提交镜像
docker commit -a="rzz" -m="add a webapp" 702580afdd48 mytomcat:1.0 #容器id换成自己的
# 6.查看
docker images

在这里插入图片描述

发布镜像到dockerhub

推送镜像的规范是docker push 注册用户名/镜像名。

# 1.登录
docker login -u 用户名
# 2.将镜像修改为规范的镜像
docker tag 镜像名:版本 用户名/镜像名:版本
# 3.推送
docker push 用户名/镜像名:版本
# 4.搜索自己的镜像
docker search mycentos

Docker数据卷与持久化

为了实现数据持久化,使容器之间可以共享数据。可以将容器内的目录,挂载到宿主机上或其他容器内,实现同步和共享的操作。即使将容器删除,挂载到本地的数据卷也不会丢失。

挂载方式

通过docker run 命令挂载
# -v设置挂载  ro代表容器内只读   rw代表容器内可写可读
# 具名挂载       -v 卷名:容器内路径:ro|rw(默认rw,可不填)
docker run -itd -P --name mounttomcat01 -v juming:/usr/local/tomcat/webapps tomcat:9.0
# 匿名挂载       -v 容器内路径
docke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值