Docker的入门详解

news2024/12/25 2:03:42

What  is  docker?

Docker是一个开源的应用容器引擎,它基于Go语言开发,并遵从Apache2.0协议。Docker允许开发者将他们的应用以及依赖包打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,同时也可以实现虚拟化。以下是关于Docker的详细解释:

一、Docker的核心概念

  1. 容器(Container):容器是Docker的核心组件,它是从镜像创建的运行实例。容器是完全使用沙箱机制,相互之间不会有任何接口,确保了容器的安全性和隔离性。容器可以被启动、停止、删除,并且每个容器都是一个独立的、保证安全的平台。
  2. 镜像(Image):镜像是Docker容器的只读模板,用于创建Docker容器。一个镜像可以创建多个容器,并且镜像可以被更新或替换。Docker提供了一个简单的机制来创建或更新镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
  3. 仓库(Repository):仓库是集中存放镜像文件的场所,类似于代码仓库。用户可以从仓库中拉取或推送镜像,以便在不同的环境中部署应用。

二、Docker的架构

Docker使用客户端-服务器(C/S)架构模式,其中Docker客户端与Docker守护进程(Daemon)进行通信。Docker守护进程作为服务端接受来自客户端的请求,并处理这些请求(如创建、运行、分发容器等)。客户端和服务端既可以运行在一个机器上,也可以通过socket或者RESTful API来进行通信。

三、Docker的优势

  1. 轻量级:与传统的虚拟机相比,Docker容器更加轻量级,因为它们直接复用本地主机的操作系统,而不需要额外的操作系统层。
  2. 高效性:Docker容器启动速度快,资源占用少,使得应用程序可以更快地部署和迭代。
  3. 可移植性:Docker容器可以在不同的操作系统和环境中运行,确保了应用程序的一致性和可移植性。
  4. 隔离性:Docker容器使用沙箱机制,相互之间不会有任何接口,确保了容器的安全性和隔离性。

四、Docker的应用场景

  1. Web应用的自动化打包和发布:Docker可以自动化地打包和发布Web应用,使得开发、测试和部署过程更加高效。
  2. 自动化测试和持续集成:Docker可以用于自动化测试和持续集成环境,确保代码的质量和稳定性。
  3. 在服务型环境中部署和调整数据库:Docker可以用于在服务型环境中部署和调整数据库或其他后台应用,提高了服务的可用性和可扩展性。
  4. 搭建PaaS环境:Docker可以用于从头编译或扩展现有的PaaS平台(如OpenShift或Cloud Foundry),搭建自己的PaaS环境。

五、Docker的局限性

  1. 隔离性相对有限:虽然Docker容器提供了隔离性,但与KVM等虚拟化方案相比,其隔离性还是有所欠缺。
  2. 网络管理相对简单:Docker的网络管理相对简单,主要是基于namespace隔离,与KVM等虚拟化方案相比,其网络功能可能不够强大。
  3. 对disk的管理比较有限:Docker对disk的管理比较有限,container随着用户进程的停止而销毁,container中的log等用户数据不便收集。

综上所述,Docker是一个强大的应用容器引擎,它提供了轻量级、高效性、可移植性和隔离性等优势,广泛应用于Web应用的自动化打包和发布、自动化测试和持续集成、服务型环境部署以及PaaS环境搭建等场景。然而,Docker也存在一些局限性,如隔离性相对有限、网络管理相对简单以及对disk的管理比较有限等。因此,在选择是否使用Docker时,需要根据具体的应用场景和需求进行权衡。

How to use  docker?? 

 rhel9部署docker

1.配置软件仓库 

[root@docker ~]# cd /etc/yum.repos.d/
[root@docker yum.repos.d]# ls
redhat.repo  rhel9.repo
[root@docker yum.repos.d]# vim docker.repo
[root@docker yum.repos.d]# cat dockere.repo
[docker]
name=docker
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9/x86_64/stable/   #清华镜像站
gpgcheck=0     

2.安装docker

1、yum  install -y docker
2、yum  install -y docker-engine
3、yum  install -y docker-ce   #最常用下载方式

 因为Docker最早的版本名是docker和docker-engin,现在的名字是docker-ce和docker-ee。有兴趣的小伙伴可以通过下方链接去官网查看。

docker 官方网站icon-default.png?t=O83Ahttps://docs.docker.com/engine/install/centos/因为docker官网对国内网络不友好
可以前往阿里云等国内大厂的镜像站找资源

阿里云docker地址icon-default.png?t=O83Ahttps://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.57e31b118oYRXi

docker对于镜像的操作

 

1.查找镜像

docker search mysql

2.拉取镜像

docker pull mysql

 

 3.查看镜像

docker image

 4.删除镜像

docker rmi ID #这里的ID是上文的image id

 docker 容器的操作

1.启动容器

docker run -d --name mario -p 80:8080 timinglee/mario

 2.查看容器

docker ps

3.停止容器

docker stop [id]

4.删除容器

docker rm [id]

docker镜像构建 

 1.构建参数

 

 2.dockerfile实例

 1.在一号虚拟机下载httpd并设置开机自启

[root@yhm1 ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@yhm1 ~]# yum -y install httpd
[root@yhm1 ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

 2.上传扫雷的软件包

[root@yhm1 ~]# cd /var/www/html/
[root@yhm1 html]# yum install -y lrzsz
[root@yhm1 html]# rz -E
rz waiting to receive.
[root@yhm1 html]# ll
total 244
-rw-r--r--. 1 root root 247278 Aug 30 20:53 saolei.zip

3.关闭防火墙 

[root@yhm1 ~]# systemctl stop firewalld
[root@yhm1 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@yhm1 ~]# vim /etc/selinux/config 
...
SELINUX=disabled
...

4.部署Dockerfile 

[root@yhm2 ~]# yum -y install lrzsz
[root@yhm2 ~]# rz -E
rz waiting to receive.
[root@yhm2 ~]# rz -E
rz waiting to receive.

5.构建镜像

[root@yhm2 ~]# docker build -t saolei:z1 .

Successfully built fe682460e4a1
Successfully tagged saolei:z1

6.运行容器 

[root@yhm2 ~]# docker run -d --name yuhemiao -p 8081:8080 saolei:z1
976a6d90b47009128aae9f4ffde8ce911868735d5fb23d52176cd18dbbbaeef9
[root@yhm2 ~]# docker ps
CONTAINER ID   IMAGE       COMMAND                CREATED         STATUS         PORTS                                       NAMES
976a6d90b470   saolei:z1   "/bin/bash /init.sh"   3 seconds ago   Up 3 seconds   0.0.0.0:8081->8080/tcp, :::8081->8080/tcp   yuhemiao

 docker仓库管理

 官网https://hub.docker.com/进行注册登录

 登录信息保存位置

[root@docker ~]# cd .docker/
[root@docker docker]# ls
buildx  config.json
[root@docker docker]# cat config.json 
{
	"auths": {
		"https://index.docker.io/v1/": {
			"auth": "MTsdasdOlpYenhjdmJubQ=="
		}
	}
}

打标记上传docker 

[root@docker ~]# docker tag webserver:v1 hhd/webserver:v1
[root@docker ~]# docker push hhd/webserver:v1

 搭建Registry仓库

下载Registry镜像

[root@docker ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
86c1d3af3872: Pull complete
a37b1bf6a96f: Pull complete
Digest: sha256:12120425f07de11a1b899e418d4b0ea174c8d4d572d45bdb640f93bc7ca06a3d
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

开启Registry

[root@docker ~]# docker run  -d -p 5000:5000 --restart=always --name registry registry
bc58d3753a701ae67351fac335b06a4d7f66afa10ae60b992f647117827734c5
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS            NAMES
bc58d3753a70   registry   "/entrypoint.sh /etc…"   7 seconds ago   Up 6 seconds   5000/tcp, 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

上传镜像到仓库中

[root@docker ~]# docker tag busybox:latest  172.25.254.100:5000/busybox:latest

[root@docker ~]# docker push 172.25.254.100:5000/busybox:latest
The push refers to repository [172.25.254.100:5000/busybox]
Get "https://172.25.254.100:5000/v2/": dial tcp 172.25.254.100:5000: connect: connection refused

[root@docker ~]# vim /etc/docker/daemon.json
{
  "insecure-registries" : ["http://172.25.254.100:5000"]
}
​
[root@docker ~]# systemctl restart docker
​
[root@docker ~]# docker push  172.25.254.100:5000/busybox:latest
The push refers to repository [172.25.254.100:5000/busybox]
d51af96cf93e: Pushed
latest: digest: sha256:28e01ab32c9dbcbaae96cf0d5b472f22e231d9e603811857b295e61197e40a9b size: 527
[root@docker ~]# curl 172.25.254.100:5000/v2/_catalog
{"repositories":["busybox"]}

 为Registry提加密传输

为仓库建立登陆认证 

#安装建立认证文件的工具包
[root@docker docker]# dnf install httpd-tools -y
​
#建立认证文件
[root@docker ~]# mkdir auth
[root@docker ~]# htpasswd -Bc auth/htpasswd timinglee   #-B 强制使用最安全加密方式,默认用md5加密
New password:
Re-type new password:
Adding password for user timinglee
​
​
#添加认证到registry容器中   
[root@docker ~]# docker run -d -p 443:443 --restart=always --name registry \
> --name registry -v /opt/registry:/var/lib/registry \
> -v /root/certs:/certs \
> -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/timinglee.org.crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/timinglee.org.key \
> -v /root/auth:/auth \
> -e "REGISTRY_AUTH=htpasswd" \
> -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
> -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
> registry
​
​
[root@docker ~]# curl -k https://reg.timinglee.org/v2/_catalog -u timinglee:lee
{"repositories":["busybox","nginx"]}
​
#登陆测试
[root@docker ~]# docker login reg.timinglee.org
Username: timinglee
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
​
Login Succeeded
​
​
#未登陆情况下上传镜像
[root@docker ~]# docker push  reg.timinglee.org/busybox
Using default tag: latest
The push refers to repository [reg.timinglee.org/busybox]
d51af96cf93e: Preparing
no basic auth credentials
​
#未登陆请款下也不能下载
[root@docker-node2 ~]# docker pull reg.timinglee.org/busybox
Using default tag: latest
Error response from daemon: Head "https://reg.timinglee.org/v2/busybox/manifests/latest": no basic auth credentials

部署harbor 

[root@docker ~]# tar zxf harbor-offline-installer-v2.5.4.tgz
[root@docker ~]# ls
anaconda-ks.cfg  certs   harbor-offline-installer-v2.5.4.tgz
auth             harbor
[root@docker ~]# cd harbor/
[root@docker harbor]# cp harbor.yml.tmpl harbor.yml
[root@docker harbor]# vim harbor.yml
  hostname: reg.timinglee.org
  certificate: /data/certs/timinglee.org.crt
  private_key: /data/certs/timinglee.org.key
  harbor_admin_password: lee
[root@docker harbor]# ./install.sh --help
Please set --with-notary        
Please set --with-trivy              
Please set --with-chartmuseum if needs enable Chartmuseum in Harbor
[root@docker harbor]# ./install.sh --with-chartmuseum
[root@docker harbor]# docker compose stop
[root@docker harbor]# docker compose  up -d

#上传镜像
[root@docker harbor]# docker login reg.timinglee.org
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores
​
Login Succeeded
​
[root@docker harbor]# docker tag busybox:latest  reg.timinglee.org/timinglee/busybox:latest
[root@docker harbor]# docker push reg.timinglee.org/timinglee/busybox:latest
The push refers to repository [reg.timinglee.org/timinglee/busybox]
d51af96cf93e: Pushed
latest: digest: sha256:28e01ab32c9dbcbaae96cf0d5b472f22e231d9e603811857b295e61197e40a9b size: 527

 docker网络

Docker网络是Docker容器之间的通信桥梁,它允许容器通过网络连接到其它容器,从而在容器群集中传输数据。以下是对Docker网络的详细介绍:

一、Docker网络的概念

Docker网络是一种用于连接Docker容器的网络技术,它使用虚拟网络,使容器可以通过虚拟网络进行通信。Docker网络支持多种类型的网络,包括但不限于网桥模式(bridge)、容器间网络、网络隔离、多主机网络(如Overlay网络)等。这些网络类型使用不同的网络驱动程序,为容器提供最佳的网络性能和功能。

二、Docker网络的主要类型

  1. Bridge网络模式:这是Docker的默认网络模式。它创建一个名为docker0的虚拟网络桥接,容器之间以及容器与宿主机之间可以通过这个桥接进行通信。每个容器都会分配一个IP地址,用于在桥接网络中通信。
  2. Host网络模式:在此模式下,容器直接使用宿主机的网络栈,不会被分配单独的IP地址。容器与宿主机之间没有网络隔离,可以直接访问宿主机的网络资源和端口。
  3. None网络模式:在此模式下,容器没有网络接口和IP地址,通常用于不需要网络通信的容器。
  4. Overlay网络模式:这是一种用于跨主机通信的网络模式,它允许容器在不同的主机上运行,并通过Overlay网络进行通信。这个网络模式通常用于构建分布式系统。

三、Docker网络配置与管理

  1. 创建网络:使用docker network create命令可以创建一个新的网络。例如,docker network create my_network会创建一个名为my_network的网络。
  2. 连接容器:使用docker run命令创建新的容器时,可以通过--network参数指定要连接的网络。例如,docker run --network my_network --name my_container -it ubuntu会创建一个名为my_container的Ubuntu容器,并将其连接到my_network网络。
  3. 网络设置:Docker网络支持多种设置,如IP地址分配、路由、DNS配置等。例如,可以使用--ip参数为容器指定IP地址,使用--dns参数配置DNS服务器,使用--gateway参数设置默认网关等。
  4. 网络管理:Docker提供了丰富的网络管理命令,如docker network connectdocker network disconnectdocker network inspectdocker network lsdocker network prunedocker network rm等,用于连接、断开、查看、列出、清理和删除网络。

四、Docker网络的性能优化与安全性

  1. 性能优化:Docker支持设置虚拟网络,允许为容器分配指定的IP地址,从而有效地提高网络性能。此外,还可以使用网络代理、缓存机制、网络优化技术和网络分片技术等手段来加快网络速度、降低网络延迟。
  2. 安全性:Docker网络的安全性至关重要。为了确保容器的网络安全,应该采用安全的网络架构,如建立防火墙和VPN等;使用复杂的用户名和密码以及安全的认证机制;使用SSL等安全的加密技术;实施安全的网络控制策略;并考虑使用容器安全工具来加强网络安全防护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2181077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL高阶2004-职员招聘人数

目录 题目 准备数据 分析数据 实现 题目 一家公司想雇佣新员工。公司的工资预算是 70000 美元。公司的招聘标准是: 雇佣最多的高级员工。在雇佣最多的高级员工后,使用剩余预算雇佣最多的初级员工。 编写一个SQL查询,查找根据上述标准雇…

【Spring基础3】- Spring的入门程序

目录 3-1 Spring的下载3-2 Spring的 jar 包3-3 第一个 Spring程序第一步:添加spring context的依赖,pom.xml配置如下第二步:添加junit依赖第三步:定义bean:User第四步:编写spring的配置文件:bea…

Qt开发第一讲

一、Qt项目里面有什么? 对各个文件的解释: Empty.pro文件 QT core gui # 要引入的Qt模块,后面学习到一些内容的时候可能会修改这里 #这个文件相当于Linux里面的makefile文件。makefile其实是一个非常古老的技术了。 #qmake搭配.pr…

【C++篇】启航——初识C++(下篇)

接上篇【C篇】启航——初识C(上篇) 目录 一、引用 1.引用的概念 2.引用的基本语法 3.引用的特点 3.1 别名 3.2 不占用额外内存 3.3 必须初始化 3.4 不能为 NULL 4.引用的使用 4.1 函数参数传递 4.2 返回值 4.3 常量引用 5.引用和指针的关…

从数字化到智能化,智慧园区让管理更高效

在当今科技飞速发展的时代,园区管理也正经历着从数字化到智能化的深刻变革。智慧园区的建设,让管理变得更加高效、便捷和智能。 数字化是智慧园区建设的基础。通过物联网、大数据、云计算等技术,园区内的各种设施、设备和系统实现了互联互通…

基于Java的建筑节能监测系统+能源管理+公共建筑能耗监测系统+建筑能耗监测系统+节能监测系统+能源管理系统

介绍 建筑节能监测系统是基于计算机网络、物联网、大数据和数据可视化等多种技术融合形成的一套节能监测系统 系统实现了对建筑电、水、热,气等能源、资源消耗情况的实时监测和预警、动态分析和评估,为用户建立了科学、系统的节能分析方法,…

【Python|接口自动化测试】使用requests库发送HTTP请求

1.requests模块介绍 Python的requests模块是一个非常流行的第三方库,用于发送HTTP请求。它简化了与Web服务进行交互的过程,使得开发人员可以更方便地处理HTTP请求和响应。 本篇文章需要对HTTP和Python有一定的了解,只会解释关键性的操作 安…

【刷点笔试面试题试试水】找错—使用strlen()函数代替sizeof计算字符串长度

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> using namespace std;void UpperCase(ch…

【2024工业3D异常检测文献】CMDIAD: 基于跨模态蒸馏驱动的多模态工业异常检测

Incomplete Multimodal Industrial Anomaly Detection via Cross-Modal Distillation 1、Background 近年来&#xff0c;基于3D点云和RGB图像的多模态工业异常检测(IAD)研究强调了利用模态间的冗余性和互补性对于精确分类和分割的重要性。 在项目中&#xff0c;提出了CMDIAD方…

20240930编译orangepi5的Android12使用HDMI0输出

20240930编译orangepi5的Android12使用HDMI0输出 2024/9/30 9:44 缘起&#xff0c;3月份的时候&#xff0c;看PDD拼多多的优惠券给力&#xff01; 就入手了香橙派Orange Pi 5。 自从制作TF卡的启动卡的时候&#xff0c;坏了一张SanDisk的32GB的TF卡。 从此就对TF卡启动无比抵触…

【微信小程序前端开发】入门Day01 —— 小程序页面组成、组件使用及协同开发发布指南

小程序的项目结构 pages 用来存放所有小程序的页面 utils 用来存放工具性质的模块&#xff08;例如&#xff1a;格式化时间的自定义模块&#xff09; app.js 小程序项目的入口文件 app.json 小程序项目的全局配置文件 app.wxss 小程序项目的全局样式文件 project.config.json 项…

理解线程库和线程排斥(锁)

理解线程库 线程要有独立属性 a.独立栈结构 b.寄存器中的上下文 在进程地址库内&#xff0c;维护栈的设备只有一套&#xff0c;如何保证线程都有独立栈&#xff1f; 每个新线程的栈由库维护&#xff0c;库会在堆上开辟一段空间。 默认地址空间的栈由主线程使用 如何理解pt…

SpringBoot框架下体育馆管理系统的构建

1引言 1.1课题背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理&#xff0c;这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制&#xff0c;不仅提高了工作效率&#xff0c;而且大大的提高了其…

被Karpathy誉为“蕴藏着类似ChatGPT的机会的AI产品Notebook LM”,它到底做对了什么?

就在昨天&#xff0c;Karpathy在X上连续发布了多条安利帖&#xff0c;强烈地给大家推荐一个AI产品NotebookLM。 嘶&#xff5e;给周围人疯狂种草并不稀奇&#xff0c;但Karpathy的推荐理由给NotebookLM戴了一个高帽子-他提到这款产品让人联想到ChatGPT。 这种就令人好奇&#…

线性模型到神经网络

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初始神经网络&#xff09;的最后&#xff0c;我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k&#xff0c;当我们在想让模型更加准确的时候&#xff0c;是做不到的&#xff0c;因为我们…

论文的研究工具有什么?推荐5款AI论文写作网站

在当今的学术研究和写作领域&#xff0c;AI工具已经成为不可或缺的助手。这些工具不仅能够提高写作效率&#xff0c;还能帮助研究者生成高质量的论文。以下是一些值得推荐的AI论文写作工具&#xff1a; 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和自然语言处理技…

太速科技-FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡

FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡 一、板卡概述 该子卡是高速AD9172 DAC和AD9689 ADC的FMC板。为客户提供高达2 GHz 的可用模拟带宽以及 JESD204B 接口&#xff0c;以快速地对各种宽带 RF 应用进行原型制作。 AD芯片AD9689&#xff0c;AD9689-2…

【技能提升get!技术策划进阶指南】

** 技能提升get&#xff01; 技术策划进阶指南 ** 技术策划扮演着游戏开发团队中的关键角色,需要在复杂的系统中找到最优的技术方案。 本文将全面介绍技术策划的职位定义、日常工作、重要作用以及成长路径,让大家全方位了解这个影响游戏质量的重要岗位。 点击蓝链领取游戏…

golang小项目1-家庭收支记账系统

项目地址&#xff1a;golang小项目 参考资料&#xff1a;尚硅谷golang教程P229 家庭收支记账系统 1. 系统简介 1.1 项目背景 在现代社会中&#xff0c;家庭的财务管理显得尤为重要。随着生活成本的不断上升&#xff0c;家庭需要有效地记录和分析收支情况&#xff0c;以确保…

【Linux】进程概念-2

文章目录 1.环境变量1.1 基本概念1.2 常见环境变量1.3 查看环境变量方法1.4 测试PATH1.5 测试HOME1.6 和环境变量相关的命令1.7 环境变量的组织方式1.8 通过代码如何获取环境变量1.9 通过系统调用获取或设置环境变量1.10 环境变量通常是具有全局属性的 1.环境变量 1.1 基本概念…