千家信息网

docker的原理和基础操作

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Docker 概念Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互
千家信息网最后更新 2026年11月03日docker的原理和基础操作

Docker 概念

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。'

一个完整的Docker有以下几个部分组成:

  1. dockerClient客户端

  2. Docker Daemon守护进程

  3. Docker Image镜像

  4. DockerContainer容器

Docker 与虚拟机的区别:

!!!相同点:①可在不同的主机之间迁移;②都具备 root 权限;③都可以远程控制;④都有备份、回滚操作。
!!!不同点:**1、操作系统上:**docker:在性能上有优势,可以轻易的运行多个操作系统;虚拟机:可以安装任何系统,但是性能不及容器。**2、原理:**docker:和宿主机共享内核,所有容器运行在容器引擎之上,容器并非一个完整的操作系统,所有容器共享操作系统,在进程级进行隔离。虚拟机:每一个虚拟机都建立在虚拟的硬件之上,提供指令级的虚拟,具备一个完整的操作系统。**3、优点:**docker:高效、集中。一个硬件节点可以运行数以百计的的容器,非常节省资源,QoS 会尽量满足,但不保证一定满足。内核由提供者升级,服务由服务提供者管理。虚拟机:对操作系统具有绝对权限,对系统版本和系统升级具有完全的管理权限。具有一整套的的资源:CPU、RAM 和磁盘。QoS 是有保证的,每一个虚拟机就像一个真实的物理机一样,可以实现不同的操作系统运行在同一物理节点上。**4、缺点:**docker:对内核没有控制权限,只有容器的提供者具备升级权限。只有一个内核运行在物理节点上,几乎不能实现不同的操作系统混合。容器提供者一般仅提供少数的几个操作系统。虚拟机:每一台虚拟机都具有更大的负载,耗费更多的资源,用户需要全权维护和管理。一台物理机上能够运行的虚拟机非常有限。(3)Docker的使用场景:1、打包应用程序简化部署;2、可脱离底层硬件任意迁移;例:服务器从腾讯云迁移到阿里云。(4)Docker 核心概念:镜像容器仓库

-------------------------------------------------------------部署19版docker--------------------------------------------------------

 #安装软件包,存储映射等依赖包yum install yum-utils device-mapper-persistent-data lvm2 -y#设置阿里云镜像源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装docker-ce引擎yum install -y docker-ce#关闭防火墙,开启docker[root@localhost ~]# systemctl stop firewalld.service[root@localhost ~]# setenforce 0[root@localhost ~]# systemctl start docker#公有仓库搜索nginx镜像[root@localhost ~]# docker search nginxNAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATEDnginx                             Official build of Nginx.                        12370    #下载次数           [OK]                jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   1703                                    [OK]#镜像加速#tee标准输入到daemon.json中,指向阿里云的镜像加速地址tee /etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://8ulga20n.mirror.aliyuncs.com"]}EOF#重新加载系统守护进程,重启docker[root@localhost ~]# cd /etc/docker/[root@localhost docker]# lsdaemon.json  key.json[root@localhost docker]# cat daemon.json {  "registry-mirrors": ["https://8ulga20n.mirror.aliyuncs.com"]}[root@localhost docker]# systemctl daemon-reload [root@localhost docker]# systemctl restart docker#下载nginx镜像[root@localhost docker]# docker pull nginx#查看docker镜像列表[root@localhost docker]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEnginx #名称           latest #标识          231d40e811cd        4 weeks ago         126MB#查看docker,通过id查看详细信息[root@localhost docker]# docker inspect 231d40e811cd[    {        "Id": "sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145",        "RepoTags": [#修改镜像标签[root@localhost docker]# docker tag nginx:latest nginx:web[root@localhost docker]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEnginx               latest              231d40e811cd        4 weeks ago         126MBnginx               web                 231d40e811cd        4 weeks ago         126MB#删除某个镜像[root@localhost docker]# docker rmi nginx:web Untagged: nginx:web[root@localhost docker]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEnginx               latest              231d40e811cd        4 weeks ago         126MB#导出镜像[root@localhost docker]# cd /opt/[root@localhost opt]# docker save -o nginx nginx:latest [root@localhost opt]# lscontainerd  mysql-5.7.20  nginx  rh  school.json  top10.json#迁移镜像方便第二台docke节点也可用#第二台docker同样的操作1[root@localhost opt]# scp /opt/nginx root@192.168.136.167:/opt/#导入镜像[root@localhost opt]# docker load < nginx831c5620387f: Loading layer  72.48MB/72.48MB5fb987d2e54d: Loading layer  57.67MB/57.67MB4fc1aa8003a3: Loading layer  3.584kB/3.584kBLoaded image: nginx:latest[root@localhost opt]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEnginx               latest              231d40e811cd        4 weeks ago         126MB

容器管理

#创建容器[root@localhost opt]# docker create -it nginx:latest /bin/bashf6be6d4fd3ba040770da758b94b559a5de7d5cd53c661ced6c2a5f27bab3a3cd#查看容器[root@localhost opt]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESf6be6d4fd3ba        nginx:latest        "/bin/bash"         18 seconds ago      Created       #创建的状态                          zen_kapitsa#开启容器[root@localhost opt]# docker start f6be6d4fd3ba[root@localhost opt]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMESf6be6d4fd3ba        nginx:latest        "/bin/bash"         About a minute ago   Up 8 seconds  #开启状态      80/tcp              zen_kapitsa#docker run 相当于加载了这个镜像(如果没有这个镜像就会去下载),还开启docker,还创建了容器docker run paigeeworld/centos7 /usr/bin/bash -c ls /[root@localhost opt]# docker ps -aCONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS               NAMES9cd607702893        paigeeworld/centos7   "/usr/bin/bash -c ls…"   18 seconds ago      Exited (0) 16 seconds ago                       confident_newtonf6be6d4fd3ba        nginx:latest          "/bin/bash"              9 minutes ago       Up 8 minutes                80/tcp              zen_kapitsa#容器进入[root@localhost opt]# docker exec it 9cd607702893 /bin/bash#持续在后台执行[root@localhost opt]# docker run -d paigeeworld/centos7 /bin/bash -c "while true;do echo hello;done"ebe894f3fdf8f64d9e1daf24ef957b2f027ca805f8acd9262e1c3572ff3ab08d[root@localhost opt]# docker ps -aCONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS               NAMESebe894f3fdf8        paigeeworld/centos7   "/bin/bash -c 'while…"   5 seconds ago       Up 3 seconds                                   ecstatic_swanson9cd607702893        paigeeworld/centos7   "/usr/bin/bash -c ls…"   8 minutes ago       Exited (0) 3 minutes ago                       confident_newtonf6be6d4fd3ba        nginx:latest          "/bin/bash"              18 minutes ago    #容器导出[root@localhost opt]# docker export ebe894f3fdf8 > nginx_c[root@localhost opt]# lscontainerd  mysql-5.7.20  nginx  nginx_c  rh  school.json  top10.json#容器导入,迁移[root@localhost opt]# scp /opt/nginx_c root@192.168.136.167:/opt/[root@localhost opt]# cat nginx_c | docker import - nginx:websha256:3461d80047f4f5465d8842f52094ee171fb9a259f606862fab607b9f024db2c6[root@localhost opt]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEnginx               web                 3461d80047f4        4 seconds ago       355MB#删除容器[root@localhost opt]# docker rmi 231d40e811cd Untagged: nginx:latestDeleted: sha256:231d40e811cd970168fb0c4770f2161aa30b9ba6fe8e68527504df69643aa145Deleted: sha256:dc8adf8fa0fc82a56c32efac9d0da5f84153888317c88ab55123d9e71777bc62Deleted: sha256:77fcff986d3b13762e4777046b9210a109fda20cb261bd3bbe5d7161d4e73c8eDeleted: sha256:831c5620387fb9efec59fc82a42b948546c6be601e3ab34a87108ecf852aa15f[root@localhost opt]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE#批量删除容器,关闭的才能删除#通过awk输出删除第一个位置id[root@localhost opt]# docker ps -a | awk '{print "docker rm "$1}' | bash[root@localhost opt]# docker ps -aCONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMESebe894f3fdf8        paigeeworld/centos7   "/bin/bash -c 'while…"   15 minutes ago      Up 15 minutes                           ecstatic_swansonf6be6d4fd3ba        nginx:latest          "/bin/bash"              33 minutes ago      Up 31 minutes       80/tcp              zen_kapitsa

资源控制

#cpu使用率控制#设置容器占用cpu资源为20%[root@localhost docker]# docker run --cpu-quota 20000 nginx:latest#按比例,权重分配创建两个容器为c1和c2,若只有这两个容器,设置容器的权重,是的c1和c2的cpu资源占比为33.3%和66.7%docker run -itd --name c1 --cpu-shares 512 nginx:latestdocker run -itd --name c2 --cpu-shares 1024 nginx:latest[root@localhost docker]# docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMESd28b1d73b0ed        nginx:latest        "nginx -g 'daemon of…"   6 seconds ago       Up 5 seconds               80/tcp              c2de49e4d6b4f9        nginx:latest        "nginx -g 'daemon of…"   17 seconds ago      Up 16 seconds              80/tcp              c135cb117c9cc7        nginx:latest        "nginx -g 'daemon of…"   6 minutes ago       Exited (0) 5 minutes ago                       dazzling_goldberg2286b99c2c6d        nginx:latest        "/bin/bash"              7 minutes ago       Up 7 minutes               80/tcp              flamboyant_booth#限制容器使用指定的cpu,0,1核心数为2[root@localhost docker]# docker run --name c3 --cpuset-cpus 0,1 nginx:latest [root@localhost docker]# docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES83e56a65c604        nginx:latest        "nginx -g 'daemon of…"   About a minute ago   Exited (0) 52 seconds ago                       c3#对blkio某一块磁盘的读写的限制--device-read-bps   限制读某个设备的bps(数据量)--device-write-bps  限制写入某个设备的bps--device-read-iops  限制读某个设备的ipos(次数)--device-write-iops  限制写某个设备的ipos[root@localhost docker]# docker run -d --device-write-bps /dev/sda:30mb nginx:latest 1a386d9c306baa36c02edda2df793ff673b46f4ace4e5ee5f72177d8cd4a3d42[root@localhost docker]# docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES1a386d9c306b        nginx:latest        "nginx -g 'daemon of…"   4 seconds ago    

docker数据卷管理

数据管理操作
方便查看容器内产生的数据
多容器间实现数据共享
两种管理方式
数据卷 :宿主机和容器之间的数据共享
数据卷容器 :容器和容器之间的数据共享

[root@localhost ~]# docker pull centos#数据卷[root@localhost ~]# docker run -v /var/www:/data1 --name web1 -it centos /bin/bash#-v指定宿主机的目录,:连接容器中的目录,-it,标准型输出,登录终端[root@e95aad3dee7a /]# lsbin    dev  home  lib64       media  opt   root  sbin  sys  usrdata1  etc  lib   lost+found  mnt    proc  run   srv   tmp  var[root@e95aad3dee7a /]# cd data1/[root@e95aad3dee7a data1]# echo "123" > chen01.txt[root@e95aad3dee7a data1]# lschen01.txt[root@e95aad3dee7a data1]# exitexit[root@localhost ~]# cd /var/www/[root@localhost www]# lschen01.txt[root@localhost www]# cat chen01.txt 123#数据卷容器[root@localhost www]# docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash[root@a0687fef8d8f /]# lsbin    data2  etc   lib    lost+found  mnt  proc  run   srv  tmp  vardata1  dev    home  lib64  media       opt  root  sbin  sys  usr[root@a0687fef8d8f /]# cd data1[root@a0687fef8d8f data1]# echo "111" > 111.txt[root@a0687fef8d8f data1]# cd ../data2/[root@a0687fef8d8f data2]# echo "222" > 222.txt[root@a0687fef8d8f data2]# exit#新容器挂载到我们刚才创建的web100容器,web100提供两个共享目录[root@localhost www]# docker run -it --volumes-from web100 -it centos /bin/bash[root@7a360567847b /]# lsbin    data2  etc   lib    lost+found  mnt  proc  run   srv  tmp  vardata1  dev    home  lib64  media       opt  root  sbin  sys  usr[root@7a360567847b /]# cd data1/[root@7a360567847b data1]# ls111.txt[root@7a360567847b data1]# cd ../data2/[root@7a360567847b data2]# ls222.txt
#端口映射,-P随机映射端口,-p指定自己设置的映射端口 docker run -d -P httpd:centosdocker run -d -p 23764:80 httpd:centos

容器互联(使用centos镜像)

#创建并运行容器取名为web1,端口号自动映射docker run -itd -P --name web1 centos /bin/bash #创建并运行容器取名web2docker run -itd -P --name web2 --link web1:web1 centos /bin/bash进web2容器ping web1[root@localhost ~]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESca605a29a8f5        centos              "/bin/bash"         15 seconds ago      Up 11 seconds                           web20e46fd7a0f96        centos              "/bin/bash"         42 seconds ago      Up 41 seconds                           web1[root@localhost ~]# docker exec it ca605a29a8f5 /bin/bashError: No such container: it[root@localhost ~]# docker exec -it ca605a29a8f5 /bin/bash[root@ca605a29a8f5 /]# ping web1PING web1 (172.17.0.2) 56(84) bytes of data.64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.087 ms64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.120 ms64 bytes from web1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.046 ms64 bytes from web1 (172.17.0.2): icmp_seq=4 ttl=64 time=0.060 ms64 bytes from web1 (172.17.0.2): icmp_seq=5 ttl=64 time=0.051 ms
容器 镜像 系统 数据 操作系统 运行 管理 资源 限制 权限 不同 之间 内核 提供者 物理 节点 设备 控制 两个 只有 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京路客互联网科技有限公司 中国互联网科技工作委员会毛军 互联网 卓越科技 互联网科技媒体 深圳天众互联网科技公司 菲比寻常互联网科技 互联网高科技企业 互联网科技英文翻译 互联网 科技馆 老年人脱离互联网科技的作文 青岛科技大学互联网大赛研究生 搜狐科技互联网 燊美集互联网科技有限公司 昆明中奇联合互联网科技 互联网时代科技型公司的机会 互联网科技新闻 兰石爱特工业互联网科技分公司 北京天晋互联网科技有限公司 互联网科技对化妆品行业 互联网科技快速发展优美句子 互联网科技官网 互联网科技有限公司图片 互联网女皇 腾讯科技 齐家互联网科技有限公司 互联网 新科技 武汉健翔互联网络科技有限公司 互联网科技创新的路径 郑州欣桑互联网科技有限公司 互联网科技平台产品运营 北京品多多互联网科技有限公司
0