找回密码
 立即注册
首页 业界区 业界 从入门到实战:Docker核心技能全解析,容器化部署不再难 ...

从入门到实战:Docker核心技能全解析,容器化部署不再难

创蟀征 昨天 05:10
在云计算飞速发展的今天,容器技术已成为IT从业者必备技能,而Docker作为容器生态的核心工具,更是贯穿了开发、测试、部署全流程。无论是刚接触容器的新手,还是寻求技能进阶的工程师,掌握Docker的核心操作与实战技巧,都能大幅提升工作效率。
一、Docker核心概念:搞懂这3个词,入门就成功了一半

在动手操作前,先理清Docker的核心组件,避免陷入"会操作不会原理"的困境:
  • 容器(Container):Docker的核心运行单元,可理解为"轻量级虚拟机",包含应用及所有依赖,实现"一次构建,到处运行"。与虚拟机不同,容器共享宿主机内核,启动速度快、资源占用低。
  • 镜像(Image):容器的"模板",包含运行应用所需的代码、库、环境变量和配置文件,是只读不可修改的。
  • 仓库(Registry):存储镜像的仓库,类似代码仓库Git,分为公有仓库(如Docker Hub)和私有仓库,方便镜像的共享与分发。
二、Docker基础操作:从0到1部署你的第一个容器

掌握基础操作是使用Docker的前提,以下核心命令覆盖容器生命周期全流程,建议收藏备用:
1. 容器生命周期管理

  1. # 创建并启动容器(--name指定名称,-d后台运行,-p端口映射)docker run --name huawei1 -d -p 8080:80 httpd# 查看运行中的容器docker ps# 查看所有容器(包括停止的)docker ps -a# 启动/停止/重启容器docker start/stop/restart huawei1# 进入运行中的容器(-it交互模式)docker exec -it huawei1 bash# 删除容器(-f强制删除运行中的容器)docker rm -f huawei1
复制代码
2. 镜像操作核心命令

  1. # 拉取镜像(从Docker Hub下载)docker pull nginx:1.7.9# 查看本地镜像docker images# 构建镜像(基于Dockerfile)docker build -t myhttpd:v1.0 -f Dockerfile .# 保存镜像为文件(用于离线传输)docker save -o myhttpd.tar myhttpd:v1.0# 加载本地镜像文件docker load -i myhttpd.tar
复制代码
实战技巧:快速排查容器问题

  • 查看容器日志:docker logs -f 容器ID(实时查看运行日志,定位启动失败原因)
  • 查看容器详情:docker inspect 容器ID(获取容器IP、挂载、网络等完整信息)
三、镜像构建:2种方式打造专属镜像

镜像构建是Docker的核心技能之一,灵活运用构建方法能满足不同场景需求:
1. docker commit:基于容器的快速构建

适合快速定制镜像,步骤简单直接:
  1. # 1. 启动基础容器并修改docker run -it --name temp-centos centos# 在容器内安装依赖、配置环境...yum install -y wget# 2. 提交为新镜像docker commit --author "xxx" --message "添加wget工具" temp-centos centos:wget
复制代码
优点:操作简单,适合临时定制;缺点:镜像层臃肿,无法追溯构建过程。
2. Dockerfile:标准化构建(推荐)

工业级镜像构建方式,通过文本文件定义构建流程,可版本控制、重复构建:
  1. # 基础镜像FROM httpd# 作者信息MAINTAINER xxx@huawei.com# 执行命令:修改首页内容RUN echo "Dockerfile构建的httpd服务" > /usr/local/apache2/htdocs/index.html# 暴露端口EXPOSE 80
复制代码
构建命令:
  1. docker build -t httpd:custom -f Dockerfile .
复制代码
核心指令说明:
  • FROM:指定基础镜像(必须为第一条指令)
  • RUN:构建时执行的命令(每一条RUN创建一个镜像层)
  • COPY/ADD:复制本地文件到镜像(ADD支持解压压缩包)
  • EXPOSE:声明容器暴露的端口(仅文档说明作用)
  • CMD/ENTRYPOINT:容器启动时执行的命令(CMD可被覆盖,ENTRYPOINT不可)
四、容器网络与存储:解决数据持久化和通信问题

1. 容器网络:3种常用网络模式

Docker默认提供3种网络模式,满足不同通信需求:
  • Bridge模式(默认):容器通过宿主机网桥连接外网,可通过端口映射对外提供服务。
    1. # 创建自定义桥接网络docker network create --driver bridge mynet# 启动容器时加入网络docker run -d --name web1 --network mynet nginx
    复制代码

  • Host模式:容器直接使用宿主机网络,无端口映射开销,适合对网络性能要求高的场景。
    1. docker run -d --net=host nginx
    复制代码

  • None模式:容器无网络配置,适合仅需本地运行的场景(如离线任务)。
2. 容器存储:3种数据持久化方案

容器默认数据存储在可写层,容器删除后数据丢失,需通过以下方式实现持久化:
  • Volume:Docker管理的存储卷,生命周期独立于容器,适合长期存储。
    1. # 创建卷docker volume create myvol# 挂载卷到容器docker run -d -v myvol:/usr/local/apache2/htdocs httpd
    复制代码

  • Bind Mount:直接挂载宿主机目录到容器,适合开发环境(实时同步代码)。
    1. docker run -d -v /root/htdocs:/usr/local/apache2/htdocs:ro httpd
    复制代码
    (:ro表示只读挂载,防止容器修改宿主机文件)
  • Volume Container:专门用于共享数据的容器,适合多个容器共享数据场景。
五、企业级实战:搭建私有镜像仓库

在企业环境中,为保障镜像安全和传输效率,通常需要搭建私有仓库:
  1. # 1. 启动私有仓库容器docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry registry# 2. 镜像打标签(必须符合仓库格式)docker tag nginx:1.7.9 192.168.1.100:5000/mynginx:v1.0# 3. 推送镜像到私有仓库docker push 192.168.1.100:5000/mynginx:v1.0# 4. 从私有仓库拉取镜像docker pull 192.168.1.100:5000/mynginx:v1.0
复制代码
注意:默认私有仓库为http协议,需配置Docker信任(修改/etc/docker/daemon.json):
  1. {  "insecure-registries": ["192.168.1.100:5000"]}
复制代码
配置后重启Docker:systemctl restart docker
六、Docker进阶:资源限制与安全

1. 资源限制:避免容器占用过多资源

通过--cpu-shares、-m等参数限制容器CPU和内存使用:
  1. # 限制容器使用1核CPU,2GB内存docker run -d --name app --cpus 1 -m 2g nginx# 限制CPU权重(相对值)docker run -d --cpu-shares 512 stress --cpu 1
复制代码
2. 安全最佳实践

  • 避免使用root用户运行容器:在Dockerfile中创建普通用户
  • 限制容器权限:使用--privileged=false禁用特权模式
  • 定期更新镜像:修复基础镜像的安全漏洞
  • 清理无用资源:避免镜像和容器占用过多磁盘
    1. # 清理悬空镜像docker image prune -f# 清理所有停止的容器、未使用的网络和卷docker system prune -a
    复制代码

七、Docker 常用命令速查表

容器生命周期管理

[tr]命令功能描述示例[/tr]
docker run创建并启动容器docker run --name httpd1 -d -p 8080:80 httpd(后台运行httpd容器,端口映射8080→80)
docker create仅创建容器(不启动)docker create --name huawei1 httpd
docker start启动容器(支持容器名/ID)docker start huawei1 或 docker start 2252def20ce2
docker stop停止容器docker stop huawei1
docker restart重启容器docker restart httpd1
docker kill强制停止容器docker kill 9c4252c22352
docker rm删除容器docker rm huawei1(删除停止的容器);docker rm -f httpd1(强制删除运行中的容器)
docker pause暂停容器docker pause 9c4252c22352
docker unpause恢复暂停的容器docker unpause 9c4252c22352
容器查看与日志

[tr]命令功能描述示例[/tr]
docker ps查看运行中的容器docker ps
docker ps -a查看所有容器(含停止状态)docker ps -a
docker inspect查看容器详细信息(IP、挂载等)docker inspect httpd1
docker logs查看容器日志docker logs -f httpd1(实时查看日志)
docker stats查看容器资源占用情况docker stats(实时监控CPU/内存/网络使用)
容器交互操作

[tr]命令功能描述示例[/tr]
docker exec进入运行中的容器(推荐)docker exec -it httpd1 bash(交互模式进入容器终端)
docker attach附加到容器终端(退出会终止容器)docker attach 9c4252c22352
docker cp容器与宿主机之间复制文件docker cp /root/index.html httpd1:/usr/local/apache2/htdocs/(宿主机→容器)
镜像管理

[tr]命令功能描述示例[/tr]
docker pull从仓库拉取镜像docker pull nginx:1.7.9(指定版本);docker pull httpd(默认latest版本)
docker images查看本地镜像docker images
docker rmi删除本地镜像docker rmi nginx:v1.1;docker rmi -f httpd(强制删除)
docker commit基于容器创建镜像docker commit --author "xxx" --message "update index" nginx1 nginx:v1.1
docker build基于Dockerfile构建镜像docker build -t httpd:v11 -f dockerfile1 /root/dockerfile(-t指定标签,-f指定Dockerfile路径)
docker tag为镜像打标签(适配仓库格式)docker tag httpd:v11 127.0.0.1:1000/michael/httpd:v11
docker save导出镜像为文件(离线传输)docker save -o mynginx.tar nginx:1.7.9
docker load导入本地镜像文件docker load -i mynginx.tar
仓库操作(Registry)

[tr]命令功能描述示例[/tr]
docker run registry启动私有仓库容器docker run -d -p 1000:5000 -v /root/myregistry:/var/lib/registry registry(挂载存储目录)
docker push推送镜像到仓库docker push 127.0.0.1:1000/michael/httpd:v11
docker pull从私有仓库拉取镜像docker pull 127.0.0.1:1000/michael/httpd:v11
curl 仓库地址/v2/_catalog查看仓库中的镜像列表curl 127.0.0.1:1000/v2/_catalog
网络管理

[tr]命令功能描述示例[/tr]
docker network ls查看所有网络docker network ls
docker network create创建网络(默认bridge模式)docker network create net1;docker network create --subnet 172.10.10.0/24 net2(指定子网)
docker network connect将容器加入网络docker network connect net2 centos1
docker network disconnect将容器退出网络docker network disconnect net2 centos1
docker network inspect查看网络详细信息docker network inspect net1
docker network rm删除网络docker network rm net1
存储管理

[tr]命令功能描述示例[/tr]
docker volume create创建数据卷docker volume create myvolume1
docker volume ls查看所有数据卷docker volume ls
docker volume inspect查看数据卷详情docker volume inspect myvolume1
docker volume rm删除数据卷docker volume rm myvolume1
docker run -v挂载存储(卷/宿主机目录)挂载卷:docker run -d -v myvolume1:/usr/local/apache2/htdocs httpd;
挂载宿主机目录:docker run -d -v /root/htdocs:/usr/local/apache2/htdocs:ro httpd(:ro只读权限)
docker run --volumes-from共享其他容器的存储docker run --name httpd3 -d -p 1003:80 --volumes-from vc httpd(复用vc容器的挂载配置)
八、资源限制(Namespace与Cgroups)

[tr]命令功能描述示例[/tr]
docker run -h设置容器hostname(UTS Namespace)docker run -h hwhost -it centos
docker run --cpu-shares设置CPU权重(相对值)docker run --name huawei1 -it --cpu-shares 512 progrium/stress --cpu 1
docker run -m --memory-swap限制内存和Swapdocker run -m 400M --memory-swap=500M -dit centos /bin/bash(内存400M,Swap100M)
系统清理

[tr]命令功能描述示例[/tr]
docker system prune清理无用资源(容器/镜像/网络/卷)docker system prune -a(-a清理所有未使用镜像)
docker image prune清理悬空镜像(无标签镜像)docker image prune -f(-f强制清理)
docker container prune清理所有停止的容器docker container prune
八、总结与展望

如果本文对你有帮助,欢迎点赞、在看、转发三连~ 你在使用Docker时遇到过哪些问题?欢迎在评论区留言交流!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

昨天 07:56

举报

您需要登录后才可以回帖 登录 | 立即注册