Docker的镜像、容器、网络管理

本文详细介绍了Docker的核心概念,包括仓库、镜像、容器、Dockerfile和composefile。阐述了如何通过Docker官方仓库管理镜像,如搜索、下载、查看和删除。同时,讲解了容器的启动、控制和日志查看。此外,还探讨了Docker的四种网络模式:host、bridge、container和none,以及它们的使用场景和配置方法。

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

想学习更全面的docker知识可以点击右侧: Docker的概念及基本指令学习(全)

Docker管理

(1)核心概念:

仓库, 注册服务器、镜像,标签,容器,Dockerfile,compose file (容器编排)

注意:

  1. 注册服务器可以包含若干个仓库,默认使用docker hub(官方的仓库
    hub.docker.com),国内的注册服务器主要包括阿里云、腾讯云、网易云等。没有特殊要求的场景下默认使用官网的仓库最好。
  2. 仓库是一批镜像的合集。仓库的命名通常为 (注册服务器)/(仓库名) 例如:private-docker.com/centeros
    可以理解为 private-docker.com这个服务器下有一个centeros仓库,这个仓库中可以包含若干个版本的centOS的镜像
  3. 镜像是一个模版,能够启动多个容器,在市场用,通常会存在有两大种类的镜像官方镜像以及第三方镜像,建议使用的时候需要注意,最好使用官方的镜像。
  4. 仓库 + 标签能确定唯一一个镜像
  5. 容器是通过镜像启动的一个虚拟环境
  6. Dockerfile是一个文件,其中规定了制作一个镜像的流程,能够打包镜像
  7. compose file是一个编排文件,里面编排了一个或多个镜像的启动参数,启动后会产生一个或多个容器

(2)Docker镜像管理(使用官方仓库)

  • 在官方市场中查看相关的镜像有两种方式:第一可以采用网页方式登录 hub.docker.com然后在页面进行搜索
  • 使用docker cli 提供的命令来完成相关操作。

docker search [镜像的名字] 例如:docker search mysql 查看当前仓库中mysql镜像的相关信息。但是需要注意的是,使用docker命令无法查看版本,需要看tag的话要到官方站点来查询
docker pull [镜像名称]:[tag] 例如:docker pull mysql:5.7 docker pull mysql 如果不使用tag 则默认采用最后一个版本
docker imagesdocker image ls 查看当前本地docker中已经下载的镜像信息
docker rmi 镜像:tag 删除一个镜像(需要注意镜像如果有容器正在运行,需要先删除容器后在删除镜像)
docker tag 原镜像名 新镜像名 拷贝镜像 原镜像不需要后可以删除掉

(3)Docker容器管理

  1. 查询目前系统中的容器信息
查看启动了的
docker  ps   
查看全部
​docker ps -a
  1. 使用镜像启动容器

例如:docker run nginx 使用nginx镜像启用一个容器(这种启用方式默认会占用当前终端,用户无法进行后续操作),为了解决此类问题我们可以附加参数更好地控制容器:

参数名称说明
-d让docker 容器在后台运行
-P使用随机的宿主机端口映射容器端口
-p使用指定端口映射内容端口 -p 宿主机端口:docker 端口
-e 参数名=参数值向容器传递参数
-v挂载数据目录
  1. 容器日志查看
代码说明
docker logs 容器名展示容器日志
docker logs -f 容器名跟踪容器日志
docker logs --tail 10 或者 docker logs -n 10从日志的末尾显示日志
docker logs -t显示日志时间戳
docker logs -t --since=“2021-06-02T13:03:00Z” abc显示指定时间之后的日志
docker logs -t --until=“2021-06-02T13:03:00Z” abc显示指定时间之前的日志
docker logs abcgreap Chrome
  1. 容器控制
代码说明
docker stop 容器名停止容器
docker start 容器名启动容器
docker pause 容器名暂停一个容器运行
docker unpause 容器名恢复一个容器运行
docker restart 容器名重启一个容器
docker rm 容器名删除一个容器

(4)Docker网络管理

使用docker network ls 查看docker目前支持的网络。当安装完docker后,默认会创建三个网络:bridge网络,host网络和none网络。可以使用:

  • docker inspect 网络id 查看每一个网络的相关配置
  • netstat -lnpt 查看目前系统开放的端口
  • firewall-cmd --list-ports 查看防火墙开放的端口

docker的四种网络模式

1.host模式

  • 例如使用创建一个host模式的mysql容器 docker run -d -e MYSQL_ROOT_PASSWORD='mysql' --net='host' --name='cslcp_mysql' mysql 在容器外连接mysql使用的ip是linux的ip,端口同样是linux的端口3306
  • 使用docker ps -a的场景下,无法显示目前正在使用的端口。在这种情况下可以使用docker inspect镜像名来查看该镜像开放的端口号。或者使用docker logs 容器名 查看容器启动日志来查看启动占用的端口,或者通过docker inspect 容器名来查看容器占用的端口号
  • 另外需要注意的问题是,以host模式启动的容器,需要确保容器使用的端口在宿主机的防火墙中配置过开放策略,否则其他机器无法访问对应服务。 firewall-cmd --permanent --zone=public --add-port=80/tcp
  • 最后,在使用host模式的场景下,可以开启多个容器,虽然有时候能够启动成功,但是当容器运行一段时间后,会发现只有一个能够运行,其他的都异常关闭了,这是因为端口冲突的原因。至于最后能保留哪一个容器,这个运行的效果不一定。​

2.bridge模式(网桥模式,这是docker的默认网络模式)

  • 使用docker network ls 查看当前的docker开放的网络
  • 使用docker inspect 网络id 查看网桥的配置,通常docker的桥模式会在宿主机上创建一个叫做docker0的宿主机网络作为网 桥。可以在宿主机上使用ip addr查看相关的ip。如果不想使用宿主机上默认的ip可以在 /etc/docker/ 目录中添加 daemon.json 配置文件,在文件中添加{"bip":"192.168.100.1/24"} 配置来修改对应的ip配置。足以在修改上述配置的时候,需要先停止dokcer服务 systemctl stop docker 修改完成后再次启动docker服务
  • 重新启动docker服务器,再次开启容器,可以查看容器的ip按照新配置的方案进行ip设置
  • 如果不希望使用docker分配的ip地址,可以在启动的过程中使用
    –ip参数来指定容器需要使用的ip地址(需要注意的是默认的桥接模式不允许用户自定义ip)例如:docker run -itd --name='c6' --network=bridge --ip=192.168.100.7 centos 该命令在指定后会报出异常。
    当我们需要使容器与容器进行通信时。可以使用以下策略

静态配置策略

第一步:创建自定义网络

docker network  create   --subnet=192.168.90.0/24  cslcp_network

第二步:动容器并加入网络

docker run  -it  --name=cslcp_1  --network=csclp_network --ip=192.168.90.5 centos

使用link配置策略

docker run  -itd  --name=c1 centos
docker run -itd --name=c2 --link=c1:cnet1 centos

进入到centos输入ping cnet1查看是否连通

docker exec -it  c2 bash

这种配置的优势是可以不使用静态ip,只是使用容器别名就可以直接访问目标容器,避免了在宿主机中出现ip冲突的问题,缺点是容器有依赖关系,所以被依赖的容器一定需要先启动,在一个复杂的网络模型中使用起来比较麻烦。

使用自定义网络+网络别名方案(推荐)
第一步:创建自定义网络

docker network  create   --subnet=192.168.90.0/24  cslcp_network

第二步:启动容器

 docker run -itd  --name=c1 --network=cslcp_network --network-alias=c1_net centos

第三步:通过网络别名访问目标容器(进入到centos输入ping c1_net查看是否连通)

3.container模式
使用该模式可以让多个容器共享同一个ip地址。

docker run  -itd  --name c1 centos
docker run -itd --name nginx --net container:c1 nginx

4.none模式(全部手工配置,在生产环境下一般不使用该种模式,老师就没讲,有想了解的可以去其他帖子看看)

制作整理不易,以上内容均为原创(参考了部分官方文档和老师整理的案例)。如要引用请附上本文链接,如有疑问可以在评论区畅所欲言,作者看到会第一时间回复,欢迎交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

么贺贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值