Docker技术的介绍及其常用命令

什么是Docker?

Docker是一个开源的应用容器引擎,属于平台即服务(PaaS)产品,于 2013 年首次发布,由 Docker, Inc.开发。它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器,帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离、高效工作 。简单来说,Docker 解决了“在我电脑上能跑,在你电脑上报错”的环境一致性难题,让应用可以像集装箱一样在任何地方标准化运行 。‌‌

Linux容器虚拟化技术:容器技术是一种轻量级的操作系统级虚拟化形式,其代表包括Docker和LXC,它们共享宿主机内核,启动速度快且资源消耗低。‌‌‌‌

网络实现‌:容器的网络隔离与通信依赖于Linux网络虚拟化技术,如虚拟以太网设备(Veth Pair)和网桥(Bridge),它们配合命名空间实现了容器间以及容器与外部网络的连接。‌‌‌

隔离原理‌:容器主要依赖Linux内核的‌命名空间(Namespaces)和控制组(Cgroups)两大机制实现隔离‌。命名空间为容器提供独立的进程、网络、文件系统等资源视图;控制组则用于限制、记录和隔离容器对CPU、内存等物理资源的使用。‌‌‌‌

Docker的特性‌:Docker在LXC等基础上发展,‌利用联合文件系统(UnionFS)构建分层镜像,实现了应用及其依赖的高效打包与分发‌。这使得它特别适合快速部署、环境一致性要求高的场景,如微服务架构、持续集成与部署(CI/CD)以及开发测试环境。‌‌‌

LXC的特性‌:LXC是更接近操作系统原生的容器实现,‌直接通过工具集(如lxc-create、lxc-start)管理容器生命周期‌。它同样共享宿主机内核,性能损耗小(通常为1%-3%),适合需要轻量级隔离且对启动速度要求高的场景。‌‌‌

Docker的优点

相比传统的虚拟机技术,Docker 在资源利用和部署效率上具有显著优势,适用于多种开发和运维场景:

  1. 轻量高效‌:容器直接调用宿主操作系统资源,无需为每个应用配备完整操作系统,复用宿主系统内核
    1. 启动速度‌:传统虚拟机启动往往需要数分钟,而 Docker 容器可以做到秒级甚至毫秒级启动 。
    2. 资源占用‌:相同配置的主机往往可以运行更多数量的应用,对系统资源的利用率更高 。‌‌‌
  2. 环境一致性‌:将应用连同它的“运行套装”一起打包,任何人拿到都能直接运行,无需手动配置依赖 。
    1. 解决痛点‌:消除因 Python 版本不匹配、依赖包缺失、系统环境差异导致的程序崩溃问题 。
    2. 全流程保障‌:确保开发环境、测试环境与生产环境的行为一致,避免“线上线下不一样”。‌‌‌
  3. 应用场景广泛‌:
    1. 微服务架构‌:通过多个容器,一台机器可以跑多个服务,在本机就可以模拟出微服务架构 。
    2. 持续集成/部署‌:提供一次性的环境,适合本地测试他人软件、持续集成时的单元测试和构建 。
    3. 弹性云服务‌:容器可以随开随关,很适合动态扩容和缩容,支持跨 Linux、Windows 和云平台部署 。‌‌‌‌

Docker常用命令

docker login		#登录docker账号以push镜像
docker pull 镜像名:标签		#拉取指定镜像,默认标签使用latest
docker push 镜像id		#推送指定镜像到docker hub
docker images		#查看docker镜像
docker images -a	#查看所有的docker镜像,包括虚悬镜像(none标签)
docker ps  			#列出正在运行的docker容器状态
docker run			#运行docker容器
docker run -it 镜像名/容器id 命令		#以交互模式运行指定容器并分配一个伪输入终端,                    不使用命令默认执行dockerfile中的CMD
			-d		#后台运行容器并返回容器id
			-p 宿主机端口:容器端口		#将宿主机的端口映射到容器的端口
			-P		#随机端口映射
			--network=bridge/host/none	#设置容器的网络模式
			--privileged		#以特权模式运行容器
docker exec			#在运行的容器中执行命令
docker exec -it 容器id 命令		#在运行的容器中执行命令并以交互模式分配一个伪输入终端
docker stop 容器id		#停止指定的容器
docker commit 容器id 镜像名:标签		#保存指定的容器并命名为镜像名:标签
docker save -o 保存文件名 镜像名/容器id		#导出完整镜像
docker tag 镜像名/容器id 镜像名			#重命名镜像

Docker 仓库管理的应用场景及示例

本部分引用自https://developer.aliyun.com/article/1532112

1.镜像分享与分发
将开发好的镜像推送到 Docker 仓库,以便其他团队成员或其他环境方便地拉取使用,实现镜像的分享与分发。
示例:
开发团队构建了名为 myapp 的应用镜像,并将其推送到 Docker 仓库 ,QA团队可以直接拉取该镜像进行测试。

# 构建镜像
docker build -t myapp .
# 推送镜像到仓库
docker push myregistry.com/myapp

2.镜像备份与恢复
将重要的应用镜像备份到 Docker 仓库,以防止意外数据丢失,同时也可以随时从仓库中恢复镜像。
示例:
在生产环境中,定期将重要应用的镜像备份到 Docker 仓库 myregistry.com/backup/myapp,以备份名为 myapp 的镜像。

# 备份镜像到仓库
docker tag myapp myregistry.com/backup/myapp
docker push myregistry.com/backup/myapp

3.自动化部署:
结合 CI/CD 流程,将构建好的镜像自动推送到 Docker 仓库,然后在目标环境中自动拉取镜像进行部署。
示例:
在 CI/CD 流程中,构建服务器构建完镜像后,自动将镜像推送到 Docker 仓库 myregistry.com/myapp,然后目标服务器自动拉取镜像进行部署。

# CI/CD 配置文件示例(.gitlab-ci.yml)
stages:
  - build
  - deploy
build:
  stage: build
  script:
    - docker build -t myapp .
    - docker push myregistry.com/myapp
deploy:
  stage: deploy
  script:
    - docker pull myregistry.com/myapp
    - docker run -d --name myapp-container myregistry.com/myapp

注意事项

1. 镜像版本管理

在 Docker 仓库中,为每个镜像打上具有意义的版本标签是十分重要的。这样做可以方便团队成员识别不同版本的镜像,并且便于进行回滚操作。版本标签通常采用语义化版本规范(Semantic Versioning)来管理,包括主版本号、次版本号和修订号。

示例:

# 构建并标记镜像版本为v1.0.0
docker build -t myapp:v1.0.0 .
# 推送镜像到 Docker 仓库,并打上v1.0.0标签
docker push myregistry.com/myapp:v1.0.0
2. 镜像权限控制

合理设置 Docker 仓库的访问权限对于保障镜像的安全性和完整性至关重要。只有经过授权的用户才能访问或修改镜像,防止未经授权的用户进行恶意操作。

示例:

设置 Docker 仓库的访问控制列表(ACL),只允许团队成员访问和修改镜像:

# 设置允许团队成员读取镜像的权限
docker pull myregistry.com/myapp:v1.0.0
# 设置允许团队成员推送镜像的权限
docker push myregistry.com/myapp:v1.0.0
3. 网络稳定性

在推送和拉取镜像时,需要确保网络连接稳定,并且具备足够的带宽,以免因网络问题导致操作失败或超时。在网络环境不稳定的情况下,可以考虑使用镜像加速器或者调整 Docker 的网络设置来提高稳定性和速度。

示例:

使用 Docker 镜像加速器,加快镜像的推送和拉取速度:

# 修改 Docker 配置文件,配置镜像加速器
echo '{ "registry-mirrors": ["https://<加速器地址>"] }' > /etc/docker/daemon.json
# 重启 Docker 服务使配置生效
systemctl restart docker

通过合理设置网络代理等方式,确保在网络不稳定的环境下依然可以顺利推送和拉取镜像。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇