Docker 学习

本文详细介绍了Docker的基本概念,如镜像、容器、客户端等,并阐述了Docker在Linux上的安装方法。重点讲解了镜像管理和容器管理,包括查找、下载、启动、停止以及删除操作。此外,还探讨了Docker的网络模式,如host、container、none和bridge模式,以及它们在网络隔离方面的应用。最后,对比了Docker与虚拟机的区别,突显Docker的轻量化和高效性。

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

docker简介

一、docker是什么有什么用

  • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源;
  • Docker 可以让开发者打包应用以及依赖包到一个轻量级可移植的容器中,然后发布到 Linux 机器上,也可以实现虚拟化;
  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低;

二、docker的基本架构

在这里插入图片描述

1、几个基本的概念

  • Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板,类比面向对象中的类;
  • Docker 容器(Container):容器是独立运行的一个或一组应用,类比面向对象中的对象;
  • Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信;
  • Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器;
  • Docker 仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用;
  • Docker Machine:Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装- Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure;

docker安装(linux)
1、centos安装docker
2、ubuntu安装docker


docker使用

在这里插入图片描述

一、镜像管理

1、查找远程仓库的镜像:docker search tomcat
2、选择相应的版本下载到本地:docker pull tomcat:8.0
3、启动相应的镜像并访问:docker run -it --rm -p 8888:8080 tomcat:8.0
4、查看本地镜像和删除本地镜像:docker images;docker rmi docker.io/tomcat:8.0
5、push 和 tag 命令
docker push(镜像提交到远程仓库,先通过 commit 提交一个镜像)
docker tag docker.io/tomcat:8.0 docker.io/mytomcat:8.0(镜像重命名)
6、镜像的制作
  • 一种是先下载原始的镜像,修改后 commit(推荐)
  • 一种是通过 Dockerfile 文件来创建新的镜像
7、镜像加速的配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hvmf8r55.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

二、容器管理

1、运行镜像:
  • docker run -dit --privileged -p21:21 -p80:80 --name test haha/demo:latest /usr/sbin/init
    -dit:-d 表示在后台运行 -i t 合用表示提供交互接口和伪终端
    –privileged :带权限启动容器,这样才可以在容器里进行完整的操作
    -p21:21 这里的作用其实就是做端口的映射,主机端口映射到容器端口
    –name test:给容器取了个名字
    /usr/sbin/init: 表示启动后运行的程序
2、容器的进入和退出:docker exec -it demo /bin/bash(进入);exit(退出)
3、容器的生命周期管理:pause(暂停)/unpause(恢复) start(开始)/stop(停止)
4、查看容器的运行
  • 查看所有状态的容器:docker ps -a
  • 查看 run 和 pause 的容器:docker ps
  • 查看某个容器的详细信息:docker inspect test
5、删除容器操作:
  • docker rm test(删除一个);
  • docker rm -f $(docker ps -qa)(删除所有的容器);
  • 运行中的容器需要先停止才能删除;

练习:安装 tomcat、nginx、mysql 等常用工具


知识点补充

一、docker命令参考

二、docker 的四种网络模式

1、网络隔离

  • Docker使用了Linux的Namespaces技术来进行资源隔离,PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络;
  • 一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离;

2、四种模式简介

host 模式
  • 不会获得一个独立的Network Namespace,而是和宿主机共用;
  • 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口,因此运行镜像的时候无需进行端口的映射;
container 模式
  • 新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享;
  • 除了网络,其他的资源还是相互隔离的;
none 模式
  • Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置;
  • 这个Docker容器没有网卡、IP、路由等信息,需要我们自己为Docker容器添加网卡、配置IP等;
bridge 模式
  • 为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上;

3、默认 bridge 模式原理

在这里插入图片描述

拓扑结构说明
  • 当Docker启动时,会在主机上创建一个名为docker0的虚拟网桥,启动的Docker容器会连接到这个虚拟网桥上;
  • 在 linux 系统中通过 ifconfig 命令是可以看虚拟网桥 docker0 的,容器的默认网关就是 docker0 的 ip 地址;
通信原理说明
  • 容器访问外网需要经由主机,通过 SNAT 将原地址转换为主机地址,对外面来说,看起来这个请求就是从主机发出的一样,而docker容器对外是不可见的;
  • 外网要访问容器也是要经由主机,请求到主机后做 DNAT 的转换将请求报文发往目标容器,这个过程中容器对外也是不可见的;
  • 以上步骤的转换过程都是通过定义防火墙规则来实现的;
  • 关于DNAT 和 SNAT:二者都是修改请求报文的目标地址,但是SNAT是局域网访问互联网,而DNAT则相反;

三、docker 和虚拟机的比较

1、理解虚拟机

在这里插入图片描述

2、理解docker

在这里插入图片描述

3、二者的比较

  • docker 相比虚拟机更加的轻量级,占用的资源更少,性能更好;
  • docker能够实现容器与主操作系统隔离,容器与容器之间的隔离;
  • 虚拟机能够实现更加彻底的隔离,彻底隔离整个运行环境;
  • 如果只是需要实现应用的隔离用 docker 更加合适;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值