news 2026/10/18 4:48:55

docker容器的相关知识点和实验操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
docker容器的相关知识点和实验操作

一.什么是docker,与虚拟机有什么区边,他们各自的目标是什么?

(1)Docker:Docker 是容器化平台,可以把应用程序 + 它依赖的库、配置、环境打包成一个容器镜像。

解释就是把软件连同运行环境一起打包,实现 “一次打包,到处运行”

docker目的:

1.统一运行环境把应用程序、依赖库、配置文件全部打包进镜像。不管在哪台服务器运行,环境完全一样,消除 “在我电脑能跑,线上跑不了”。

2.简化软件交付与迁移应用打包成标准镜像,像集装箱一样,快速在不同服务器之间迁移,不用重新安装各种依赖。

3.轻量隔离,高效利用服务器资源依托 Linux Namespace 做隔离、Cgroups 限制资源。一台宿主机上可以跑多个容器,容器之间互不干扰;对比虚拟机,占用资源更少、启动速度更快。

4.快速部署、快速启停,方便弹性扩缩容容器秒级启动,新版本发布、故障恢复、扩容都很快。

5.方便版本管理与快速回滚镜像可以打版本标签。新版本异常,能够快速切回旧镜像。

6.为微服务、CI/CD 持续交付提供基础把应用拆成多个独立容器,适配自动化流水线,实现自动化构建、测试、发布

(2)虚拟机:把硬件虚拟出来,每个虚拟机拥有独立完整 OS 内核 + 文件系统

虚拟机目的:

1.硬件级隔离,隔离强度很高

2.不同操作系统可以共存(Windows 宿主机跑 Linux 虚拟机)

3.适合:需要完整操作系统、强安全隔离、异构系统场景

二.docker与虚拟化的对比

三.如何安装docker。

部署容器的官方网址:https://docs.docker.com/

1.第一步配置docker的镜像源,配置好后才可以下载docker.

我们的镜像原仓库就找阿里云的docker镜像。

阿里云yum仓库docker的官网地址:docker-ce-linux-rhel-9.0-x86_64-stable安装包下载-开源镜像站-阿里云docker-ce-linux-rhel-9.0-x86_64-stable安装包是阿里云官方提供的开源镜像免费下载服务,每天下载量过亿,阿里巴巴开源镜像站为包含docker-ce-linux-rhel-9.0-x86_64-stable安装包的几百个操作系统镜像和依赖包镜像进行免费CDN加速,更新频率高、稳定安全。https://mirrors.aliyun.com/docker-ce/linux/rhel/9.0/x86_64/stable

[root@docker ~]#vim /etc/yum.repo.d/docker.repo //注意创建的yum仓库包的后缀必须是repo,不然无法识别 [docker] name=docker baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9.0/x86_64/stable/ gpgcheck=0
2.第二步卸载系统自带的docker,为什么?因为系统自带,准确来说是Redhat中podman-docker伪装 docker 命令,为了防止共享底层组件,包依赖冲突等问题。
[root@docker ~]#dnf remove -y podman buildah
3.第三步是下载docker镜像
[root@docker ~]#yum install docker-ce -y
4.第四步我们把docker的服务写成systemd的服务,因为这个我们都很熟悉(这个只用在不是yum或dnf装的,比如二进制等)。
[root@docker ~]#vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true [root@docker ~]#systemctl enable --now docker [root@docker ~]#docker info
5.第五步虽然我们这里可以下载docker,但是使用docker搜索镜像的时候是搜不到的,因为他们是国外的网站,这里我们需要用到国内的加速器

国内从Docker Hub拉取镜像有时会遇到困难,可以通过修改docker配置文件的方式添加一个加速器,可以通过加速器达到下载镜像的目的。

(1)从2017年6月9日起,Docker 官方提供了在中国的加速器,以解决墙的问题。不用注册,直接使用加速器地址:https://registry.docker-cn.com 即可。

(2)中国科技大学的镜像加速器:中科大的加速器不用注册,直接使用地址 https://docker.mirrors.ustc.edu.cn/ 配置加速器即可。进一步的信息可以访问:Docker Hub - USTC Mirror Help

(3)阿里云加速器:注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

(4)DaoCloud 加速器:注册 DaoCloud 账户(支持微信登录),然后访问: https://www.daocloud.io/mirror#accelerator-doc

#配置docker镜像加速 [root@rhel9 ~]# cat /etc/docker/daemon.json { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://noohub.ru", "https://hub.oepkgs.net", "https://dockerhub.timeweb.cloud" ] } [root@rhel9 ~]# systemctl daemon-reload [root@rhel9 ~]# systemctl restart docker [root@rhel9 ~]# docker info | grep -iA 4 registry Registry Mirrors: https://docker.m.daocloud.io/ https://huecker.io/ https://dockerhub.timeweb.cloud/ https://noohub.ru/ #出现该内容表示镜像加速配置成功
#拉取hello-world镜像,测试能否拉取 [root@rhel9 ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world c1ec31eb5944: Pull complete Digest: sha256:53cc4d415d839c98be39331c948609b659ed725170ad2ca8eb36951288f81b75 Status: Downloaded newer image for hello-world:latest docker.io/library/hello-world:latest [root@rhel9 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 15 months ago 13.3kB

四.Docker的基本指令操作

4.1.搜索镜像
[root@Docker~]# docker search nginx
4.2.拉取镜像

本地拉取镜像:docker load -i 镜像名称。

从镜像仓库拉取镜像:docker pull 镜像名称。

4.3.查看本地镜像
[root@Docker ~]# docker images
4.4.查看镜像信息
[root@Docker~]# docker inspect 镜像名称
4.5.导出镜像
[root@Docker~]# docker save 要导出的镜像 -o 导出后的包名 例子: [root@Docker-node1 ~]# docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz //这里我们导入了两个镜像,分别是nginx:latest和nginx:1.26-alpine
4.6.删除镜像
[root@Docker~]# docker rmi 镜像 //删除镜像 [root@Docker~]# docker rm -f 镜像 //强制删除镜像
4.7.启动镜像
[root@Docker~]# docker run -d --name 自建名称 -p 80:80 镜像 //-d是后台运行 [root@Docker~]# docker run -it --name 自建名称 -p 80:80 镜像 //-it是前台交互运行 [root@Docker~]# docker attach 镜像 //重新进入到镜像 # 容器必须已经处于UP运行状态! docker exec -it centos7 /bin/bash
4.8.查看容器运行信息
[root@Docker-node1 ~]# docker ps #查看当前运行容器 [root@Docker-node1 ~]# docker ps -a #查看所有容器 [root@Docker-node1 ~]# docker inspect busybox #查看容器运行的详细信息
4.9.停止和运行容器
[root@Docker-node1 ~]# docker stop busybox #停止容器 [root@Docker-node1 ~]# docker kill busybox #杀死容器,可以使用信号 [root@Docker-node1 ~]# docker start busybox #开启停止的容器
4.10.容器内容提交
[root@Docker ~]# docker commit -m "提示信息" 原来的镜像 新的镜像 [root@Docker-node1 ~]# docker commit -m "add leefile" test busybox:v1 //把test的镜像打包成了busybox:v1镜像

五.docker镜像构建

5.1docker镜像结构

docker镜像结构特点:

共享宿主机的kernel

base镜像提供的是最小的Linux发行版

同一docker主机支持运行多种Linux发行版

采用分层结构的最大好处是:共享资源

5.2docker镜像的基本原理

copy-on-Write可写容器层

容器层以下所有镜像层都是只读的

docker从上往下依次查找文件

容器层保存镜像变换的部分,并不会对镜像本身进行任何修改

一个镜像最多127层

5.3.镜像的获得方式

基本镜像通常由软件官方提供

企业镜像可以用官方镜像+Dockerfile来生成

系统关于镜像的获取动作有两种

docker pull镜像地址

docker load -i 本地镜像包

5.4.通过用dockerfile来搭建镜像

5.4.1.构建参数

1.from:指定base镜像eg:FROM busybox:version

2.copy: 复制文件eg:COPY file /file 或者 COPY["file",“/”]

3.MAINTAINER:指定作者信息,比如邮箱eg:MAINTAINER user@maosheng.com

4.ADD:功能和copy相似,指定压缩文件或url eg:ADD test.tar /mnt或者eg:ADD http://ip/test.tar/mnt

5.ENV:指定环境变量eg: ENV FILENAME test

6.EXPOSE: 暴露容器端口eg: EXPOSE 80

7.VOLUME: 申明数据卷,通常指数据挂载点eg: VOLUME["/var/www/html"]

8.WORKDIR: 切换路径eg: WORKDIR /mnt

9.RUN: 在容器运行的指令eg:touch file

10.CMD:在启动容器时自动运行动作可以被覆盖eg:CMD echo $FILENAME会调用shell解释eg: CMD []"/bin/sh", "-c","echo $FILENAME"],不能调用shell解析

11.ENTRYPOINT: 和CMD功能和用法类似,但是动作不可被覆盖。

5.4.2docker搭建镜像的实例

1.编写dockerfile

我们可以在任意目录下,但是一定要有dockerfile,而且在创建镜像的时候要和dockerfile在同一目录下。

[root@localhost ~]#vim /docker/dockerfile FROM nginx:latest --这里我们写已有的镜像,nginx:latest是已经有点镜像 MAINTAINER maosheng@root.org --这里是作者信息 copy leefile / --复制当前目录文件到容器指定位置 [root@localhost docker]#docker build -t example1:v1 --构建镜像

5.5.docke仓库和镜像的区别

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 4:48:36

Web字体反爬原理与Python逆向解析实战

1. 项目概述:为什么“实习僧字体反爬”成了前端工程师绕不开的实战课题最近在某高校实验室带学生做招聘平台数据采集模拟项目时,好几个同学卡在了实习僧网站的数据解析环节——明明页面结构清晰、请求路径简单,但用常规XPath或CSS选择器提取职…

作者头像 李华
网站建设 2026/10/18 4:46:59

Wireshark深度解析DNS协议:从报文结构到故障根因定位

1. 为什么DNS协议分析是网络排查的“第一把钥匙”你有没有遇到过这样的情况:用户说“网站打不开”,你ping域名通,curl IP也通,但浏览器就是白屏;或者内部服务调用偶尔超时,监控显示HTTP状态码全绿&#xff…

作者头像 李华
网站建设 2026/10/18 4:43:42

Qt数据库综合组件:统一接口搞定SQLite/MySQL/ODBC/PostgreSQL

做Qt客户端开发这些年,数据库这块的坑我踩得一点不比界面布局少。最典型的场景就是开发环境一切正常,代码一部署到客户机器上,驱动加载失败,日志里只有一行“driver not loaded”,当场心态就崩了。后来我把一套管理工具…

作者头像 李华
网站建设 2026/10/18 4:41:51

YOLOv5+DeepSORT车辆检测与跟踪:数据集构建及二次开发指南

简介:一套基于YOLOv5与DeepSORT的车辆检测与追踪项目配套资源,面向计算机视觉研究者和开发人员,解决实时车辆识别、多目标跟踪中数据集构建与算法验证难题。资源共2000个文件,核心是1588个XML标注文件,配合409个TXT标签…

作者头像 李华
网站建设 2026/10/18 4:41:30

Flutter引导页实战:PageView+Indicator实现动态指示器与状态持久化

我曾经和朋友讨论过一个问题:在 Flutter 里实现一个 App 首次启动的引导页,到底是不是只用 PageView 就能搞定?答案当然是否定的。真正把一个引导页做得完整、顺滑、可维护,背后其实还牵扯到页码监听、指示器动画、按钮状态管理、…

作者头像 李华
网站建设 2026/10/18 4:38:58

Python代码执行过程全解析:从源码到字节码与虚拟机运行

平时写Python大家都有过这样的好奇:一个一个.py文件,双击或者敲一行python demo.py,屏幕上就出现了结果,看起来毫不费力。可你有没有停下来想过,它到底是怎么被“读懂”的?为什么代码里某个变量能记住上次的…

作者头像 李华