Docker自学的一些笔记分享

本文详细介绍了Docker的基本概念,包括Docker镜像、容器、Registry仓库及其标签,以及Docker的工作流程。还阐述了Docker的安装步骤、常用命令,如启动、停止Docker,管理镜像和容器。此外,讨论了Docker的网络类型和容器的端口映射,并提到了数据持久化的卷存储。最后,提及了Dockerfile和容器编排管理器K8S作为后续学习的内容。

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

一、 什么是docker
在这里插入图片描述
Docker的logo

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
从运维角度而言,Docker设计的目的之一就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境的一致性,从而降低那种“开发时一切都正常,肯定是运维的问题”的风险。
Docker 允许开发人员使用运维人员提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程
持续集成CI (Contionuous Integration)
持续交付CD (Continouous Delivery)
CI/CD在运维角度上面会涉及到Jenkins自动化构建。

二、Docker的架构
1.Docker 镜像(Images)
Docker 镜像是用于创建 Docker 容器的模板。
2.Docker 容器(Container)
容器是独立运行的一个或一组应用,是镜像运行时的实体。
3.Docker Registry 仓库
Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
4.Docker镜像标签(tag)
镜像标签的意义在于可以区分相同镜像的不同版本或者标注一些区别信息。在构建镜像的时候可以生成Tag。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

5.Dockerfile
镜像的产生大体可以分为两个方式。一是通过容器的再次构建形成镜像,二是通过Dockerfile文件的构建形成镜像。Dockerfile文件的内容编写会涉及到一些Shell脚本语言的知识,再次不做过多介绍。
6.Docker Compose
Compose是一个镜像编排器,它存在的目的是当一个系统或者多个系统架构存在多个镜像或者容器的时候用于集中管理,集中监控的。目前大多数都是用K8S来替代Compose。
所以这里也不多做介绍。

三、 Docker的运行原理
在这里插入图片描述

Docker的工作流程图
上图的Docker工作流程基本涵盖了作为一个镜像,它是如何出生的,以及它如何生成的容器整个工作周期。
首先,获取到镜像(image)的渠道有三种:第一通过Dockerfile的Docker build生成镜像。第二通过容器(container)的Docker commit生成镜像。第三通过镜像仓库(公有、私有)来拉取镜像Docker pull。
获取到你所需的镜像之后,通过Docker run来运行镜像从而生成一个Docker容器(container)。容器可以理解为一个镜像其运行后所产生的环境。这个环境可以是一个集成系统,可以是一个Web应用,也可以是一个数据库。生成的什么容器取决于你运行的镜像是什么。目前大部分的情况是通过运行(run)多个镜像,生成多个容器,这些容器集成在一起形成一个系统来使用。
当生成的容器(container)被运维人员进行修改之后,就意味着老的镜像已经不可以生成当前的容器了,这个时候就要通过容器Docker commit来生成新的镜像,生成新镜像版本供以后使用。当然,新生成的镜像也可以通过Docker push推到镜像仓库(公有、私有)提供给其他人使用。

四、 Docker的安装
1.通过yum经行docker的安装
yum install -y docker-ce docker-ce-cli containerd.io
2.验证docker是否安装成功
docker run hello-world
在这里插入图片描述

输入指令后出现上图所示的页面说明安装成功。
验证时如果出现以下报错:
runc: symbol lookup error: runc: undefined symbol: seccomp_api_get
docker: Error response from daemon: cannot start a stopped process: unknown.
安装:yum install libseccomp-devel 其原因是缺少seccomp机制用于限制应用程序可以使用的系统调用,增加系统的安全性。安装完后再次经行验证。
3.镜像加速
由于dockerhub的镜像仓库的服务器在国外所以想要pull此仓库中的镜像速度会很慢,可以把默认的镜像仓库改为国内一些知名互联网企业的docker镜像仓库,这样就解决了pull镜像时的速度问题。
vi /etc/docker/daemon.json
在“daemon.json”这个文件中添加
{
“registry-mirrors”: [“https://hub-mirror.c.163.com”]
}
在这里插入图片描述

添加完成后重启docker就可以了。
科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
以上三个为比较常用的国内镜像库,阿里云的镜像库需要注册阿里云账号

五、 Docker的常用命令
启动docker:
systemctl start docker.service
查看docker启动状态:
systemctl status docker.service
停止docker:
systemctl stop docker.service
systemctl stop docker.socket
socket作为docker的端口如果不关闭的话,即使关闭了docker.service,daocker依然可以使用。
查看docker配置信息:
docker info
在这里插入图片描述

搜索镜像库中的镜像版本:
docker search “镜像名称”
在这里插入图片描述

 从镜像库拉取镜像:
	docker pull “镜像名称”

在这里插入图片描述

当pull镜像的时候出现上图所示的内容,说明这个镜像以前已经从库中拉取过了。这个时候可以查看一下拉取过得镜像列表:
docker image ls

在这里插入图片描述
运行镜像生成容器:
docker run -it (进入容器)–name 容器名称(为容器取名) -d (在后台运行镜像) -p::(将容器端口指定给指定ip的端口) 镜像名称
在这里插入图片描述

上图表示的是运行nginx:latest这个容器并且命名为“testno1”,同时将宿主机端口8080指向容器运行端口80。
查询运行当中的容器:
docker ps
查询当前所有的容器:
docker ps –a
将容器打包成镜像:
docker commit -a(提交镜像的作者) -m(提交时的说明文字)-c(使用Dockerfile指令来创建镜像)-p(在commit时,将容器暂停) 容器id :(制作成的镜像名以及tag)
在这里插入图片描述

上图为将刚才生成的“testno1”容器重新构建为镜像并且取名为“wangyuimage”,Tag标签为“V1.0”。
删除容器:
docker container rm “容器id”
删除所有的容器:
docker rm -f $(docker ps -a)
删除镜像:
docker image rm “镜像id”
删除所有镜像:
docker rmi -f $(docker images -qa)
运行容器:
docker container start “容器名称”
重启容器:
docker container restart “容器名称”
停止容器:
docker container stop “容器名称”
通过自线程进入到容器当中(容器必须要运行)
docker exec -it containerid/name /bin/sh
在这里插入图片描述

此命令的主要用处在于当容器运行的时候,有一些配置文件参数或者环境变量等需要修改或者查看一些信息,可以使用这个命令直接进入到容器环境当中直接修改或者查看。

docker获取容器/镜像元的数据:
docker inspect “容器名称”
在这里插入图片描述

此命令主要用于查看容器运行后的网段是什么。
以上只是介绍了docker在我学习过程当中经常用到的一些命令。其他的命令还有很多如有需要可以在此网站查找https://www.runoob.com/docker/docker-command-manual.html 。

六、 一些关于Docker的其他知识
1.Dcoker的网络
一般情况下docker有四种网络类型:
(1)Close container 封闭式的网络接口
封闭式容器,只有本地回环接口(Loopback interface,和咱们服务器看到的lo接口类似),无法与外界进行通信
(2)Bridged container 桥接式网络 (默认网络)
桥接容器,除了有一块本地回环接口(Loopback interface)外,还有一块私有接口(Private interface)通过容器虚拟接口(Container virtual interface)连接到桥接虚拟接口(Docker bridge virtual interface),之后通过逻辑主机接口(Logical host interface)连接到主机物理网络(Physical network interface)。桥接网卡默认会分配到172.17.0.0/16的IP地址段。
(3)Joined container 联盟式网络
每个容器都各有一部分名称空间(Mount,PID,User),另外一部分名称空间是共享的(UTS,Net,IPC)。由于他们的网络是共享的,因此各个容器可以通过本地回环接口(Loopback interface)进行通信。除了共享同一组本地回环接口(Loopback interface)外,还有一块一块私有接口(Private interface)通过联合容器虚拟接口(Joined container virtual interface)连接到桥接虚拟接口(Docker bridge virtual interface),之后通过逻辑主机接口(Logical host interface)连接到主机物理网络(Physical network interface)。
(4)Open container 开放式网络
比联盟式网络更开放,联盟式网络是多个容器共享网络(Net),而开放式容器(Open contaner)就直接共享了宿主机的名称空间。因此物理网卡有多少个,那么该容器就能看到多少网卡信息。可以说Open container是联盟式容器的衍生。
2.容器的端口映射
-p::
将指定的容器端口映射至主机指定的端口
此命令在docker run的时候使用。
3.存储卷(volume)
一般的容器在运行的时候大致可以按照是否有状态,是否需存储来进行划分
有状态、需存储:Mysql,Redis等数据库
有状态、不需存储:Tomcat等Web服务器
无状态、不需存储:nginx
无状态、需存储:很少
当删除一个容器的时候,其中的数据会全部丢失,Dcoker容器的数据存储存在的问题有:
(1)存储于联合文件系统当中,不易于宿主机的访问。
(2)容器间数据共享不方便
(3)删除容器其数据会丢失
解决这些容器存储问题的方法是:卷存储(volume)
卷是容器上的一个或者多个“目录”,此类目录可以绕过联合文件系统与宿主机上的某一目录进行“绑定(关联)”。卷实现了“程序(镜像)”和“数据(卷)”分离,制作镜像的时候无须再考虑镜像运行容器所在的主机的环境。
Docker有两种类型的卷(volume):
(1)Bind mount volume 绑定挂载镜像
docker run –v “HOSTDIR:VOLUMEDIR”
(2)docker-managed volume docker管理卷
docker run –v “HOSTDIR”

七、 有待学习的内容

  1. Dockerfile
    此部分需要运用到shell脚本的知识,暂时先不做深入探讨
  2. 容器编排管理器
    下一步准备开始学习的K8S这一容器编排管理器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值