1.容器技术与docker环境部署

发布于:2025-06-21 ⋅ 阅读:(18) ⋅ 点赞:(0)

一:docker概述

因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。
Docker容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。

1.什么是Docker

如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时间地点可获取这些资源,这正是 Docker 所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。
docker 是目前较为主流的容器技术。容器技术是一种轻量级的虚拟化技术,它可以让应用程序及其依赖项打包在一个独立的单元中运行,从而实现应用的隔离、可移植性和资源的高效利用。以下从概念、原理、与传统虚拟化技术的对比、优势、应用场景等方面详细介绍容器技术。
容器就像是一个独立的“盒子”,这个“盒子”里装着运行某个应用所需要的所有东西,包括代码、运行时环境、系统工具、系统库等。不同的容器之间相互隔离,每个容器都有自己独立的文件系统、进程空间、网络接口等,就好像它们是在不同的机器上运行一样,但实际上它们是共享宿主机的操作系统内核。


2:Docker 的优势


Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个Docker 容器成为可能。
传统虚拟化技术(如 Vware、VirtualBox 等)是通过虚拟机管理程序(Hypervisor)在物理服务器上创建多个虚拟机(V),每个虚拟机都包含完整的操作系统。而容器技术是在操作系统层面进行虚拟化,多个容器共享宿主机的操作系统内核。
容器技术和传统虚拟化的主要区别在于:
资源占用:传统虚拟机需要为每个虚拟机分配独立的操作系统,这会占用大量的系统资源》而容器共享宿主机的内核,只包含应用及其依赖项,资源占用相对较少,启动速度也更快

隔离性:虚拟机提供了更高程度的隔离,因为每个虚拟机都有自己独立的操作系统;容器的隔离性相对较弱,但对于大多数应用场景来说已经足够,并且可以通过合理的配置和管理来增强隔离性。
性能:由于虚拟机存在额外的虚拟化层,会带来一定的性能开销;容器直接运行在宿主机的内核上,性能损耗较小,更接近原生应用的性能
Docker 操作方便,可以通过 Dockerfile 配置文件支持灵活的自动化创建和部署。表1将 Docker容器技术与传统虚拟机的特性进行了比较。

特性 docker容器 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗50%左右
性能 接近原生 弱于
系统支持量(单机) 上千个 几十个
隔离性 资源限制 完全隔离

容器技术的优势主要体现在以下几个方面:
隔离性:不同的容器之间相互隔离,一个容器的故障或异常不会影响其他容器的运行,提高
了应用的稳定性和安全性。
可移植性:容器将应用及其依赖项打包成一个独立的单元,使得应用可以在不同的环境中(如开发环境、测试环境、生产环境)无缝迁移和运行,避免了“在我的机器上能运行,但在你的机器上不行” 的问题。
资源高效利用:容器共享宿主机的操作系统内核,不需要为每个应用运行独立的操作系统,大大减少了资源的浪费,提高了服务器的利用率。
快速部署和扩展:容器的启动速度非常快,通常只需要几秒钟,而且可以根据需要快速创建和销毁容器,方便进行应用的快速部署和弹性扩展。

Docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而 Docker 容器则是直接在操作系统层面之上实现的虚拟化。图 2是 Docker 与传统虚拟机架构。

3:docker的应用场景

开发环境管理:开发人员可以使用容器来创建一致的开发环境,确保团队成员之间的环境一致性,提高开发效率。
持续集成和持续部署(CI/CD):在CI/CD流程中,容器可以帮助实现应用的快速打包、测试和部署,实现自动化的软件开发流程。
微服务架构:容器技术非常适合微服务架构,每个微服务可以打包成一个独立的容器,独立开发、测试和部署,提高系统的可伸缩性和容错性。
云计算:云服务提供商可以利用容器技术为用户提供更高效、灵活的计算资源,用户可以根据自己的需求快速创建和管理容器化的应用。


4:Docker 核心概念


(1)镜像


镜像、容器、仓库是 Docker 的三大核心概念。其中 Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 cent05 操作系统环境,称为一个 centos 镜像;也可以是一个安装了 MySQL 的应用程序,称之为一个 MySQL镜像等等。
Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接使用。


(2)容器


Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证安全性的平台。可以将容器看作是一个简易版的 Linux 环境,Docker 利用容器来运行和隔离应用。


(3)仓库


Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库。每个仓库集中存放某一类镜像,并且使用不同的标签(tag)来区分它们。目前最大的公共仓库是 docker Hub,存放了数量庞大的镜像供用户下载使用。

二:docker安装

Docker 支持在主流的操作系统平台上进行使用,包括 windows 系统、Linux 系统、以及 Macos 系统等。目前最新的 RHEL、Centos 以及 ubuntu 系统官方软件源中都已经默认自带了 Docker 包,可直接安装使用,也可以用 Docker 自己的 YUM 源进行配置。
Centos 系统下安装 Docker 可以有两种方式:一种是使用 CURL 获得 Docker 的安装脚本进行安装,另一种是使用 YUM 仓库来安装 Docker。注意:目前 Docker 只能支持 64 位系统。

1.本安装方式使用阿里的软件仓库

(1)关闭系统防火墙

systemctl stop firewalld

setenforce 0

(2)下载docker的repo文件

cd /etc/yum.repos.d/

浏览器:阿里云镜像站:容器——docker-ce/linux/centos/docker-ce.repo   将文件保存至桌面,再拉取到yum.repos.d目录下

(3)替换仓库地址

sed -i 's/$releasever/8/g' docker-ce.repo

sed -i 's/$basearch/x86_64/g' docker-ce.repo

(4)更新索引文件并安装docker

dnf clean all

dnf makecache

dnf – y install docker-ce

(5)添加国内镜像站

cd /etc/docker/

vi daemon.json

{

“exec-opts”: [“native.cgroupdriver=systemd”],

“registry-mirrors”: [

"https://docker.m.daocloud.io",

"https://docker.imgdb.de",

"https://docker-0.unsee.tech",

"https://docker.hlmirror.com",

]

}

(6)开启docker服务

systemctl daemon-reload

systemctl start docker

systemctl enable docker

docker version

(7)优化内核参数

vi /etc/sysctl.conf

net.ipv4.ip_forward=1

net.bridge.bridge-nf-call-iptables=1           //添加

net.bridge.bridge-nf-call-ip6tables=1

sysctl -p

三.docker镜像操作

1.获取镜像


1. 拉取镜像(pull)

• 命令:docker pull [仓库名]/[镜像名]:[标签]

• 参数:

◦ 仓库名:镜像仓库地址(如 Docker Hub 的 library 或私有仓库)。

◦ 镜像名:镜像名称(如 nginx、python)。

◦ 标签:镜像版本(如 latest、3.9),默认拉取 latest。

2. 查看本地镜像(images)

• 命令:docker images

• 参数:

◦ -q:仅显示镜像 ID。

◦ --filter:按条件筛选(如 dangling=true 查看无标签镜像)。

3. 创建镜像(build)

• 命令:docker build -t [镜像名:标签] [Dockerfile路径]

• 参数:

◦ -t:指定镜像名称和标签。

◦ --build-arg:传递构建时变量(如 --build-arg HTTP_PROXY=xxx)。

◦ -f:指定 Dockerfile 路径(默认当前目录)。

4. 推送镜像(push)

• 命令:docker push [仓库名]/[镜像名]:[标签]

• 参数:同拉取镜像,需先登录仓库(docker login)。

5. 删除镜像(rmi)

• 命令:docker rmi [镜像ID/名称:标签]

• 参数:

◦ -f:强制删除(即使有容器依赖)。

◦ 批量删除:docker rmi $(docker images -q -f dangling=true)(删除无依赖镜像)。

四.容器(Container)操作

1. 运行容器(run)

• 命令:docker run [参数] [镜像名:标签] [命令]

• 核心参数:

◦ -d:后台运行(守护进程模式)。

◦ -p:端口映射(如 -p 8080:80,主机端口:容器端口)。

◦ -v:挂载目录(如 -v /主机路径:/容器路径)。

◦ -e:设置环境变量(如 -e MYSQL_ROOT_PASSWORD=123)。

◦ --name:指定容器名称。

◦ --rm:容器退出后自动删除。

◦ --network:指定网络模式(如 bridge、host)。

2. 查看容器(ps)

• 命令:docker ps [参数]

• 参数:

◦ -a:显示所有容器(包括已停止的)。

◦ -q:仅显示容器 ID。

◦ -l:显示最近创建的容器。

3. 启动/停止容器(start/stop)

• 命令:

◦ 启动:docker start [容器ID/名称]

◦ 停止:docker stop [容器ID/名称]

• 参数:

◦ stop 默等待 10 秒,-t 可指定超时时间(如 -t 30)。

4. 进入容器(exec/attach)

• 命令:

◦ docker exec -it [容器ID/名称] /bin/bash(推荐,不中断容器进程)

◦ docker attach [容器ID/名称](直接连接 stdin/out,中断可能停止容器)

• 参数:

◦ -i:保持标准输入打开。

◦ -t:分配伪终端。

5. 删除容器(rm)

• 命令:docker rm [容器ID/名称]

• 参数:

◦ -f:强制删除(即使正在运行)。

◦ 批量删除:docker rm $(docker ps -aq -f status=exited)(删除已退出容器)。

6. 查看容器日志(logs)

• 命令:docker logs [容器ID/名称]

• 参数:

◦ -f:实时跟踪日志(类似 tail -f)。

◦ --tail:显示最近 N 行日志(如 --tail 100)。

三、常用组合操作

• 创建并运行容器:
docker run -d --name nginx -p 80:80 nginx(后台运行 Nginx,映射 80 端口)。

• 基于容器创建镜像:
docker commit [容器ID] [新镜像名:标签](慎用,推荐通过 Dockerfile 构建)


网站公告

今日签到

点亮在社区的每一天
去签到