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

📅 发布时间:2026/10/18 4:49:07
docker容器的相关知识点和实验操作
一.什么是docker与虚拟机有什么区边他们各自的目标是什么1DockerDocker 是容器化平台可以把应用程序 它依赖的库、配置、环境打包成一个容器镜像。解释就是把软件连同运行环境一起打包实现 “一次打包到处运行”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[rootdocker ~]#vim /etc/yum.repo.d/docker.repo //注意创建的yum仓库包的后缀必须是repo不然无法识别 [docker] namedocker baseurlhttps://mirrors.aliyun.com/docker-ce/linux/rhel/9.0/x86_64/stable/ gpgcheck02.第二步卸载系统自带的docker为什么因为系统自带准确来说是Redhat中podman-docker伪装 docker 命令为了防止共享底层组件包依赖冲突等问题。[rootdocker ~]#dnf remove -y podman buildah3.第三步是下载docker镜像[rootdocker ~]#yum install docker-ce -y4.第四步我们把docker的服务写成systemd的服务,因为这个我们都很熟悉这个只用在不是yum或dnf装的比如二进制等。[rootdocker ~]#vim /usr/lib/systemd/system/docker.service ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock --iptablestrue [rootdocker ~]#systemctl enable --now docker [rootdocker ~]#docker info5.第五步虽然我们这里可以下载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 Help3阿里云加速器注册阿里云开发账户(免费的)后访问这个链接就可以看到加速器地址 阿里云登录 - 欢迎登录阿里云安全稳定的云计算服务平台4DaoCloud 加速器注册 DaoCloud 账户(支持微信登录)然后访问 https://www.daocloud.io/mirror#accelerator-doc#配置docker镜像加速 [rootrhel9 ~]# 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 ] } [rootrhel9 ~]# systemctl daemon-reload [rootrhel9 ~]# systemctl restart docker [rootrhel9 ~]# 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镜像测试能否拉取 [rootrhel9 ~]# 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 [rootrhel9 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 15 months ago 13.3kB四.Docker的基本指令操作4.1.搜索镜像[rootDocker~]# docker search nginx4.2.拉取镜像本地拉取镜像docker load -i 镜像名称。从镜像仓库拉取镜像docker pull 镜像名称。4.3.查看本地镜像[rootDocker ~]# docker images4.4.查看镜像信息[rootDocker~]# docker inspect 镜像名称4.5.导出镜像[rootDocker~]# docker save 要导出的镜像 -o 导出后的包名 例子 [rootDocker-node1 ~]# docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz //这里我们导入了两个镜像分别是nginx:latest和nginx:1.26-alpine4.6.删除镜像[rootDocker~]# docker rmi 镜像 //删除镜像 [rootDocker~]# docker rm -f 镜像 //强制删除镜像4.7.启动镜像[rootDocker~]# docker run -d --name 自建名称 -p 80:80 镜像 //-d是后台运行 [rootDocker~]# docker run -it --name 自建名称 -p 80:80 镜像 //-it是前台交互运行 [rootDocker~]# docker attach 镜像 //重新进入到镜像 # 容器必须已经处于UP运行状态 docker exec -it centos7 /bin/bash4.8.查看容器运行信息[rootDocker-node1 ~]# docker ps #查看当前运行容器 [rootDocker-node1 ~]# docker ps -a #查看所有容器 [rootDocker-node1 ~]# docker inspect busybox #查看容器运行的详细信息4.9.停止和运行容器[rootDocker-node1 ~]# docker stop busybox #停止容器 [rootDocker-node1 ~]# docker kill busybox #杀死容器可以使用信号 [rootDocker-node1 ~]# docker start busybox #开启停止的容器4.10.容器内容提交[rootDocker ~]# docker commit -m 提示信息 原来的镜像 新的镜像 [rootDocker-node1 ~]# docker commit -m add leefile test busybox:v1 //把test的镜像打包成了busybox:v1镜像五.docker镜像构建5.1docker镜像结构docker镜像结构特点共享宿主机的kernelbase镜像提供的是最小的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镜像egFROM busyboxversion2.copy: 复制文件egCOPY file /file 或者 COPY[file“/”]3.MAINTAINER:指定作者信息比如邮箱egMAINTAINER usermaosheng.com4.ADD:功能和copy相似指定压缩文件或url eg:ADD test.tar /mnt或者egADD http://ip/test.tar/mnt5.ENV:指定环境变量eg ENV FILENAME test6.EXPOSE: 暴露容器端口eg EXPOSE 807.VOLUME: 申明数据卷通常指数据挂载点eg VOLUME[/var/www/html]8.WORKDIR: 切换路径eg WORKDIR /mnt9.RUN: 在容器运行的指令egtouch file10.CMD:在启动容器时自动运行动作可以被覆盖egCMD echo $FILENAME会调用shell解释eg CMD []/bin/sh, -c,echo $FILENAME]不能调用shell解析11.ENTRYPOINT: 和CMD功能和用法类似但是动作不可被覆盖。5.4.2docker搭建镜像的实例1.编写dockerfile我们可以在任意目录下但是一定要有dockerfile而且在创建镜像的时候要和dockerfile在同一目录下。[rootlocalhost ~]#vim /docker/dockerfile FROM nginx:latest --这里我们写已有的镜像nginx:latest是已经有点镜像 MAINTAINER maoshengroot.org --这里是作者信息 copy leefile / --复制当前目录文件到容器指定位置 [rootlocalhost docker]#docker build -t example1:v1 --构建镜像5.5.docke仓库和镜像的区别