当前位置: 首页 > news >正文

容器技术入门之Docker环境部署

一:Docker 概述

        因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。

        Docker 容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。

1、什么是 Docker

如果要方便的创建运行在云平台上的应用,必须要脱离底层的硬件,同时还需要任何时间地点可获取这些资源,这正是 Docker 所能提供的。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。通过这种容器打包应用程序,意味着简化了重新部署、调试这些琐碎的重复工作,极大的提高了工作效率。

        docker 是目前较为主流的容器技术。容器技术是一种轻量级的虚拟化技术,它可以让应用程序及其依赖项打包在一个独立的单元中运行,从而实现应用的隔离、可移植性和资源的高效利用。以下从概念、原理、与传统虚拟化技术的对比、优势、应用场景等方面详细介绍容器技术。

        容器就像是一个独立的 “盒子”,这个 “盒子” 里装着运行某个应用所需要的所有东西,包括代码、运行时环境、系统工具、系统库等。不同的容器之间相互隔离,每个容器都有自己独立的文件系统、进程空间、网络接口等,就好像它们是在不同的机器上运行一样,但实际上它们是共享宿主机的操作系统内核。

2、Docker 的优势

        Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多;Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。因此,Docker 容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个 Docker 容器成为可能。

        传统虚拟化技术(如 VMware、VirtualBox 等)是通过虚拟机管理程序(Hypervisor)在物理服务器上创建多个虚拟机(VM),每个虚拟机都包含完整的操作系统。而容器技术是在操作系统层面进行虚拟化,多个容器共享宿主机的操作系统内核。

容器技术和传统虚拟化的主要区别在
对比维度传统虚拟机容器
资源占用为每个虚拟机分配独立操作系统,占用大量系统资源共享宿主机内核,仅包含应用及其依赖项,资源占用相对少,启动速度更快
隔离性每个虚拟机有独立操作系统,隔离程度高隔离性相对弱,多数应用场景下足够,可通过合理配置管理增强
性能存在额外虚拟化层,有性能开销直接运行在宿主机内核,性能损耗小,更接近原生应用性能
特性Docker 容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗 50% 左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源限制完全隔离
优势
特性说明
隔离性容器间相互隔离,一个容器故障不影响其他,提升应用稳定性与安全性
可移植性将应用及依赖打包成独立单元,可在开发、测试、生产等不同环境无缝迁移运行,避免环境适配问题
资源高效利用共享宿主机操作系统内核,无需为每个应用运行独立系统,减少资源浪费,提升服务器利用率
快速部署和扩展启动速度快(通常几秒),可按需快速创建、销毁,便于应用快速部署与弹性扩展

3、docker应用场景

应用场景作用说明
开发环境管理用容器创建一致开发环境,保障团队环境一致,提升开发效率
持续集成和持续部署(CI/CD)助力应用快速打包、测试、部署,实现自动化软件开发流程
微服务架构适配微服务架构,每个微服务打包成独立容器,独立开发、测试、部署,增强系统可伸缩性与容错性
云计算云服务提供商借容器技术,为用户提供更高效、灵活计算资源;用户可按需快速创建、管理容器化应用

4、核心概念

4.1、镜像

        镜像、容器、仓库是 Docker 的三大核心概念。其中 Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 CentOS 操作系统环境,称为一个 CentOS 镜像;也可以是一个安装了 MySQL 的应用程序,称之为一个 MySQL 镜像等等。

        Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接使用。

4.2、容器

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

4.3、仓库

        Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

        仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库。每个仓库集中存放某一类镜像,并且使用不同的标签(tag)来区分它们。目前最大的公共仓库是 docker Hub,存放了数量庞大的镜像供用户下载使用

二、安装部署

1、基础环境

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

2、下载 Docker 的 repo 文件

curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repocd /etc/yum.repos.d/sed -i 's/$releasever/8/g' docker-ce.repo
sed -i 's/$basearch/x86_64/g' docker-ce.repodnf clean all
dnf makecachednf -y install docker-ce

3、指定docker镜像仓库

cd /etc/docker/
vim 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"
]
}

4、重载守护进程,并启动服务

systemctl daemon-reload
systemctl start docker
systemctl enable docker

5、优化内核参数

net.ipv4.ip_forward=1 是 Docker 网络功能正常运行的前提,它允许内核转发容器与外部网络、容器与容器之间的数据包,是实现容器通信、端口映射等核心功能的基础

vim /etc/sysctl.conf###编辑内容###
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1sysctl -p

6、设置监听(生产环境中不允许)

vim /lib/systemd/system/docker.service###编辑内容###
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service time-set.target
Wants=network-online.target containerd.service
Requires=docker.socket[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500[Install]
WantedBy=multi-user.target

三、镜像操作

1、拉取镜像

##语法##
docker pull [OPTIONS] NAME[:TAG|@DIGEST]docker pull nginx:1.24.0
类别参数 / 元素说明
OPTIONS(可选参数)-a, --all-tags拉取指定仓库中的所有标签的镜像
OPTIONS(可选参数)--disable-content-trust默认值为true,用于禁用镜像内容验证,即不验证镜像的签名
NAME[:TAG@DIGEST]NAME要拉取的镜像的名称,可包含仓库地址和命名空间信息;Docker Hub 上官方镜像直接写镜像名(如nginx ),用户或组织镜像格式为用户名/镜像名(如dockerlibrary/redis )
NAME[:TAG@DIGEST]TAG(可选)指定要拉取的镜像的具体标签,区分同一镜像不同版本;不指定时默认拉取latest标签的镜像
NAME[:TAG@DIGEST]DIGEST(可选)通过镜像的摘要信息精确指定要拉取的镜像版本,确保拉取特定哈希值对应的精确镜像,避免标签指向不同版本产生混淆,格式如nginx@sha256:abcdef123456...

2、查看镜像信息

2.1、docker images 命令功能概述

docker images 是 Docker 中基础且常用命令,用于列出本地 Docker 主机上的镜像信息,展示镜像的仓库名、标签、镜像 ID、创建时间和大小等基本信息,帮助了解本地镜像存储情况。

2.2、显示信息解读

  • REPOSITORY:镜像所属仓库
  • TAG:镜像标签信息,标记同一仓库中不同镜像
  • IMAGE ID:镜像唯一 ID 号,唯一标识一个镜像
  • CREATED:镜像创建时间
  • VIRTUAL SIZE:镜像大小

2.3、命令语法

docker images [OPTIONS] [REPOSITORY[:TAG]]

2.4、参数说明

2.4.1、OPTIONS(可选参数)
  • -a, --all:显示所有镜像(含中间层镜像),默认仅显示顶层镜像
  • --digests:显示镜像摘要信息
  • -f, --filter filter:按指定条件过滤输出,如 dangling=true 显示虚悬镜像(无标签镜像 )
  • --format string:用 Go 模板语法自定义输出格式
  • --no-trunc:不截断输出,完整显示镜像 ID 等长字段
  • -q, --quiet:仅显示镜像 ID
2.4.2、REPOSITORY [:TAG](可选)
  • REPOSITORY:指定要显示的镜像仓库名称
  • TAG:指定要显示的镜像标签,不指定则默认显示所有标签镜像
docker images

3、查看镜像的详细信息

docker inspect 95

4、修改镜像标签

docker tag nginx:latest nginx:v1
docker images

5、删除镜像

5.1、用镜像名删除

docker -rmi nginx:v1

5.2、用ID删除

docker -rmi 95 -f

6、镜像导出

docker save -o nginx nginx:latest

7、镜像导入

docker load<nginx

四、docker容器操作

1、创建与启动

##命令语法:docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
docker create -it centos:7

docker create 是 Docker 中的一个重要命令,它的主要作用是基于指定的镜像创建一个新的容器,但并不立即启动该容器。下面将对 docker create 命令进行详细解释。

参数说明:
OPTIONS(可选参数):docker create 支持众多可选参数,这些参数可以帮助你对创建的容器进行各种配置,以下是一些常用的参数:

  • -i, --interactive:保持标准输入打开,即使没有附加到容器上,常用于需要交互的应用程序。
  • -t, --tty:分配一个伪终端,通常与 -i 一起使用,模拟一个交互式的终端环境,如 docker create -it。
  • -p, --publish list:将容器内的端口映射到宿主机的端口,格式为 宿主机端口:容器端口,例如 -p 8080:80 表示将容器的 80 端口映射到宿主机的 8080 端口。
  • -v, --volume list:挂载数据卷,将宿主机的目录或文件挂载到容器内,格式为 宿主机路径:容器路径,例如 -v /host/data:/container/data。
  • --name string:为创建的容器指定一个自定义的名称,方便后续管理和识别。
  • -e, --env list:设置容器内的环境变量,格式为 变量名 = 变量值,例如 -e DB_HOST=localhost。
  • --network string:指定容器要加入的网络,例如 --network my_network。

IMAGE

  • 指定用于创建容器的镜像名称和标签,如 nginx:latest。如果本地没有该镜像,Docker 会尝试从 Docker Hub 等镜像仓库中拉取。

[COMMAND] [ARG...](可选)

  • 指定容器启动时要执行的命令及其参数。如果不指定,将使用镜像的默认启动命令。

docker create 命令主要用于提前准备好容器的配置,创建一个处于停止状态的容器实例,之后可以在需要的时候使用 docker start 命令启动该容器,这种方式在一些场景下非常有用,例如:

  • 批量创建多个配置好的容器,在需要时逐个启动,提高部署效率。
  • 对容器进行预配置,进行多次测试或验证不同的启动参数。

注意事项

  • 创建容器时,要确保指定的镜像存在于本地或者可以从镜像仓库中拉取。
  • 使用 docker create 创建的容器处于停止状态,需要使用 docker start 命令启动。
  • 对于复杂的容器配置,要仔细检查参数的正确性,避免出现配置错误导致容器无法正常工作。

2、查看所有容器

docker ps -a

3、容器的运行

docker start 5c

4、利用容器执行命令(命令执行完毕后容器会退出)

docker run centos:7 /bin/bash -c "ls /root"

5、在启动容器时持续在后台运行

docker run -itd centos:7 /bin/bash -c "top"

6、终止容器的运行

docker stop c4

7、进入容器

docker exec -it 5c /bin/bash

8、导出容器

docker export 5c > centos7

9、导入容器

docker import centos7 aaa
docker images

10、删除容器

#删除
docker rm c4#强制删除
docker rm 5c -f

http://www.dtcms.com/a/269489.html

相关文章:

  • Docker快速部署Hive服务
  • 【技术应用】CUTTag应用实例解析:比ChIP-seq更精准高效的DNA-蛋白互作研究
  • No static resource druid
  • C++(STL源码刨析/vector)
  • 虚幻引擎UE5专用服务器游戏开发-20 添加基础能力类与连招能力
  • Takebishi旗下智能硬件网关产品devicegateway详细介绍
  • ThreadPoolTaskExecutor 的使用案例
  • 【PTA数据结构 | C语言版】求单链表list中的元素个数,即表长
  • NumPy-随机数生成详解
  • AI编程的未来是智能体原生开发?
  • JavaSE-继承
  • UI前端与数字孪生结合实践案例:智慧零售的库存管理优化系统
  • 算法学习笔记:10.Prim 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 【Mac】实现Docker下载安装【正在逐步完善】
  • 【论文阅读】CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer
  • 【计算机基础理论知识】C++篇(一)
  • 暑假读书笔记第四天
  • 【Python-GEE】如何利用Landsat时间序列影像通过调和回归方法提取农作物特征并进行分类
  • python transformers库笔记(BertForTokenClassification类)
  • 【牛客刷题】小红的与运算
  • node.js中yarn、npm、cnpm详解
  • 精益管理与数字化转型的融合:中小制造企业降本增效的双重引擎
  • 算法训练营DAY29 第八章 贪心算法 part02
  • 实战Linux进程状态观察:R、S、D、T、Z状态详解与实验模拟
  • 联通线路物理服务器选择的关键要点
  • No Hack No CTF 2025Web部分个人WP
  • Django双下划线查询
  • 微信小程序控制空调之接收MQTT消息
  • 如何利用AI大模型对已有创意进行评估,打造杀手级的广告创意
  • deepseek实战教程-第九篇开源模型智能体开发框架solon-ai