从零玩转Docker:概念、安装到核心命令一网打尽

发布时间:2026/7/13 18:55:58
从零玩转Docker:概念、安装到核心命令一网打尽 从零玩转Docker概念、安装到核心命令一网打尽引言Docker到底是什么想象一下这样的场景你在自己的电脑上开发了一个应用跑得好好的。结果部署到服务器上各种报错——环境变量不对、依赖版本不一致、操作系统差异……折腾半天心态爆炸。Docker就是为了解决这个“在我这能跑啊”的经典问题而生的。Docker是一个开源的容器化技术它允许开发者将应用程序及其所有依赖项代码、运行时、系统工具、库、配置等打包到一个轻量级、可移植的容器中。说白了就是把你的应用连同它的“生存环境”一起装进一个“箱子”里。这个箱子在任何安装了Docker的机器上都能直接打开运行完全不用担心环境差异。一句话总结Docker 打包环境 随处运行。一、Docker核心三要素要搞懂Docker只需要记住三个概念镜像、容器、仓库。1.1 镜像Image镜像是一个只读的模板包含了创建并运行一个Docker容器所需的所有指令、文件系统和参数。用做蛋糕来打个比方Dockerfile食谱写满了做蛋糕的指令比如“准备面粉”、“加入鸡蛋”镜像蛋糕模具根据食谱烤好的、还没切的完整蛋糕——只读的保证每次用它做出来的蛋糕都一样容器切下来的蛋糕从模具里切下一块来吃——可读可写的可以加草莓修改内容但不影响原来的模具镜像镜像采用分层构建机制最底层是bootfs上层是rootfs。这就是为什么拉取镜像时能看到“Pull complete”一层一层下载——每一层都是一个独立的文件系统快照。1.2 容器Container容器是镜像的运行实例。一个镜像可以创建出无数个容器每个容器都是相互隔离的。容器与宿主机系统隔离拥有自己的文件系统、网络栈和进程空间。你可以把它理解为一个轻量级的虚拟机——但比虚拟机快得多、资源消耗少得多。1.3 仓库Registry仓库是集中存储和分发Docker镜像的地方。Docker Hub是最受欢迎的公共仓库。拉取pull从仓库下载镜像到本地推送push把本地镜像上传到仓库三者关系一句话仓库存镜像镜像做模板容器跑应用。二、Docker安装以Linux为例2.1 CentOS系统① 卸载旧版本如果有bashsudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine② 安装必要工具bashsudo yum install -y yum-utils③ 设置Docker的yum仓库推荐使用阿里云镜像源bashsudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo④ 安装Docker引擎bashsudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin⑤ 启动并设置开机自启bashsudo systemctl start docker sudo systemctl enable docker2.2 Ubuntu系统① 更新包索引并安装依赖bashsudo apt-get update sudo apt-get install -y ca-certificates curl gnupg② 添加Docker官方GPG密钥bashsudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg③ 设置Docker的apt仓库bashecho deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release echo $VERSION_CODENAME) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null④ 安装Docker引擎bashsudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin2.3 验证安装运行经典的hello-world镜像验证是否安装成功bashsudo docker run hello-world如果看到Hello from Docker!的欢迎信息说明安装成功2.4 配置镜像加速器重要由于Docker Hub服务器在国外直接拉取镜像非常慢。强烈建议配置国内镜像加速器。以阿里云为例登录阿里云容器镜像服务控制台获取专属加速器地址创建或修改/etc/docker/daemon.jsonjson{ registry-mirrors: [https://你的专属加速地址.mirror.aliyuncs.com] }重启Docker服务bashsudo systemctl daemon-reload sudo systemctl restart docker三、镜像操作命令3.1 搜索镜像search从Docker Hub搜索可用的镜像bashdocker search nginx3.2 拉取镜像pull从仓库下载镜像到本地bash# 拉取最新版本 docker pull ubuntu # 拉取指定版本 docker pull redis:6.2不指定标签时默认拉取latest版本。3.3 查看本地镜像images列出本地已存在的所有镜像bashdocker images # 或 docker image ls输出字段说明字段含义REPOSITORY仓库名TAG镜像版本标签IMAGE ID镜像唯一IDCREATED创建时间SIZE镜像大小3.4 删除本地镜像rmi删除不需要的本地镜像bash# 通过名称和标签删除 docker rmi redis:6.2 # 通过镜像ID删除 docker rmi edbdd97bf78b # 强制删除即使有容器在使用 docker rmi -f redis:6.2注意如果有正在运行的容器基于该镜像创建需要先停止并删除这些容器才能成功删除镜像。docker rm删容器docker rmi删镜像别搞混了。3.5 查看镜像详细信息inspect以JSON格式返回镜像的详细元数据bashdocker inspect ubuntu:latest3.6 为镜像打标签tag为已存在的镜像创建一个新标签bashdocker tag nginx:latest myrepo/mynginx:1.0这在推送到远程仓库时是必须的一步。四、容器操作命令4.1 创建并运行容器rundocker run是最核心的命令如果本地没有指定镜像它会先自动pull再创建并启动容器。bashdocker run [OPTIONS] image_name[:tag] [COMMAND]常用参数参数含义--name为容器指定一个名称-d后台运行容器守护式容器-i以交互模式运行-t分配一个伪终端-p端口映射如-p 8080:80-e添加环境变量启动交互式容器进入容器内部操作bashdocker run -it --name myubuntu ubuntu /bin/bash退出交互模式输入exit——容器会停止按Ctrl P Q——容器继续运行只是退出终端启动守护式容器后台运行bashdocker run -d --name mynginx nginx注意如果容器没有前台进程即使加了-d也会自动退出。比如docker run -d ubuntu会立即退出因为ubuntu没有持续运行的命令。端口映射让外部能访问容器内的服务bashdocker run -d -p 8080:80 --name mynginx nginx这样访问宿主机的8080端口就会转发到容器内的80端口。4.2 查看容器ps查看正在运行的容器bashdocker ps查看所有容器包括已停止的bashdocker ps -a4.3 启停容器start/stop/restartbash# 启动已停止的容器 docker start mynginx # 停止运行中的容器 docker stop mynginx # 重启容器 docker restart mynginx # 强制停止 docker kill mynginx4.4 删除容器rmbash# 删除已停止的容器 docker rm mynginx # 强制删除运行中的容器 docker rm -f mynginx # 删除所有已停止的容器 docker container prune五、进入容器并修改内容有两种方式进入正在运行的容器5.1 docker exec推荐在容器中打开新的终端启动新的进程。用exit退出不会导致容器停止bashdocker exec -it mynginx /bin/bash5.2 docker attach直接进入容器启动命令的终端不会启动新进程。用exit退出会导致容器停止bashdocker attach mynginx建议日常操作优先使用docker exec更安全、更灵活。5.3 修改容器内容进入容器后就可以像操作普通Linux一样修改文件了。例如修改Nginx的欢迎页bashdocker exec -it mynginx /bin/bash # 进入容器后 echo Hello Docker! /usr/share/nginx/html/index.html exit5.4 宿主机与容器之间拷贝文件cpbash# 从容器拷贝到宿主机 docker cp mynginx:/usr/share/nginx/html/index.html ./index.html # 从宿主机拷贝到容器 docker cp ./myfile.txt mynginx:/tmp/六、提交改变生成新镜像commit如果你在容器里做了一些修改比如安装了新软件、修改了配置文件想把这些改动保存成一个新的镜像就用docker commit。bashdocker commit [容器名或ID] [新镜像名:标签]bash# 将修改后的容器保存为新镜像 docker commit mynginx mynginx-custom:v1 # 查看新镜像 docker images工作原理docker commit在原来镜像的基础上叠加一层容器的存储层构成新的镜像。注意docker commit适合紧急情况下保留现场或快速制作测试镜像。正式环境推荐用Dockerfile构建镜像更规范、可重复。七、镜像保存与加载save/load当你需要在离线环境无网络、内网部署中迁移镜像时docker save和docker load是核心工具。7.1 保存镜像为tar文件save将本地镜像打包成.tar归档文件bashdocker commit [容器名或ID] [新镜像名:标签]7.2 从tar文件加载镜像loadbashdocker load -i nginx_latest.tar适用场景离线环境部署、版本回滚、团队共享基础镜像避免重复构建。八、镜像推送到远程仓库push把你制作好的镜像分享给团队或部署到生产环境需要推送到镜像仓库。8.1 登录Docker Hubbashdocker login8.2 为镜像打标签推送前必须用docker tag给镜像打上符合仓库格式的标签bashdocker tag mynginx-custom:v1 你的用户名/mynginx-custom:v18.3 推送镜像bashdocker push 你的用户名/mynginx-custom:v18.4 登出可选bashdocker logout前置条件需要在Docker Hub上提前创建好仓库。九、数据卷挂载Volume容器一旦被删除里面的数据就永久丢失了。为了让数据持久化或者让多个容器共享数据就需要用到数据卷挂载。9.1 挂载主机目录bashdocker run -d -p 8080:80 -v /宿主机路径:/容器内路径 --name mynginx nginx9.2 挂载时可能遇到的权限问题如果挂载时报错cannot open directory .: Permission denied需要在命令中加上--privilegedtruebashdocker run -d -p 8080:80 -v /host/data:/container/data --privilegedtrue --name mynginx nginx原因CentOS 7的SELinux安全模块默认禁止了目录挂载行为。加上--privilegedtrue后容器内的root才拥有真正的root权限。9.3 数据卷容器volumes-from多个容器共享同一个数据卷bash# 先创建一个数据卷容器 docker create -v /data --name data_container ubuntu # 其他容器继承这个数据卷 docker run -d --volumes-from data_container --name container1 ubuntu docker run -d --volumes-from data_container --name container2 ubuntu十、命令补充速查分类命令作用系统docker version查看Docker版本docker info查看Docker系统信息docker system prune清理未使用的镜像、容器、卷、网络镜像docker history nginx查看镜像构建历史docker image prune删除所有悬空镜像容器docker logs mynginx查看容器日志docker top mynginx查看容器内运行的进程docker inspect mynginx查看容器详细信息容器导出docker export -o container.tar mynginx导出容器文件系统cat container.tar | docker import - myimage:v1从tar创建镜像网络docker network ls查看网络列表docker network create mynet创建自定义网络总结通过本文你应该已经掌握了Docker的核心知识体系三大概念镜像只读模板、容器运行实例、仓库存储分发安装部署CentOS/Ubuntu系统的Docker安装与镜像加速器配置镜像操作search、pull、images、rmi、tag容器操作run、ps、start/stop/restart、rm进入与修改exec进入容器cp拷贝文件提交改变commit将容器保存为新镜像镜像迁移save导出、load导入镜像推送login→tag→push数据持久化-v挂载主机目录--privilegedtrue解决权限问题Docker的学习曲线并不陡峭掌握这些核心命令你就能应对绝大多数日常场景。从今天开始把你的应用装进Docker这个“箱子”里吧

相关新闻