Linux系统中Docker使用技能分享
在Linux系统中,Docker作为轻量级容器化技术,凭借“隔离性强、部署高效、资源占用低”的核心优势,成为开发者、运维人员必备的工具——它能快速打包应用及其依赖环境,实现“一次构建、到处运行”,彻底解决“环境不一致”的痛点。本文聚焦Linux系统下Docker的实用使用技能,从基础安装、核心操作到进阶技巧,全程贴合实战场景,兼顾新手入门与老手进阶,助力高效运用Docker开展工作。
一、前置准备:Linux系统Docker安装(新手必会)
Docker支持绝大多数Linux发行版(如CentOS、Ubuntu、Debian),不同发行版安装命令略有差异,以下是最常用的两种发行版安装方法,全程复制命令即可完成,避免复杂配置。
1. Ubuntu系统(推荐,新手首选)
Ubuntu系统对Docker支持更友好,安装步骤简洁,终端依次输入以下命令:
bash # 1. 更新软件包列表 sudo apt update # 2. 安装必要的依赖包(允许apt通过HTTPS使用仓库) sudo apt install -y apt-transport-https ca-certificates curl software-properties-common # 3. 添加Docker官方GPG密钥(验证软件包完整性) curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 4. 设置Docker稳定版仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 5. 再次更新软件包列表,安装Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # 6. 验证安装是否成功(启动Docker并查看版本) sudo systemctl start docker sudo docker --version |
若终端显示Docker版本信息(如Docker version 24.0.7),说明安装成功。
2. CentOS系统安装
CentOS系统安装步骤与Ubuntu类似,终端依次输入:
bash # 1. 卸载旧版本Docker(若有) sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 2. 安装必要的依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 3. 设置Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 4. 安装Docker Engine sudo yum install -y docker-ce docker-ce-cli containerd.io # 5. 启动Docker并设置开机自启(关键,避免重启系统后Docker失效) sudo systemctl start docker sudo systemctl enable docker # 6. 验证安装 sudo docker --version |
安装避坑要点
1必须使用sudo权限执行安装命令,否则会提示权限不足;
1若安装过程中提示“仓库无法访问”,检查网络连接,或更换国内镜像源(后续会讲);
1安装完成后,若执行docker命令仍需sudo,可配置用户权限(后续进阶技巧会讲)。
二、Docker核心基础操作(高频使用,必掌握)
Docker的核心操作围绕“镜像(Image)”和“容器(Container)”展开——镜像是应用的“模板”(包含应用及依赖环境),容器是镜像的“运行实例”,掌握以下操作,可满足日常80%的使用需求。
1. 镜像相关操作(镜像管理核心)
bash # 1. 搜索镜像(从Docker Hub搜索需要的镜像,如nginx、mysql) sudo docker search 镜像名# 示例:sudo docker search nginx # 2. 拉取镜像(下载镜像到本地,默认拉取最新版本,加:tag指定版本) sudo docker pull 镜像名:tag# 示例:sudo docker pull nginx:latest(最新版)、sudo docker pull mysql:8.0(指定8.0版本) # 3. 查看本地所有镜像 sudo docker images # 4. 删除本地镜像(需先删除依赖该镜像的容器,否则报错) sudo docker rmi 镜像ID/镜像名:tag# 示例:sudo docker rmi nginx:latest # 5. 查看镜像详细信息 sudo docker inspect 镜像ID/镜像名 |
2. 容器相关操作(实战核心,重点掌握)
bash # 1. 启动容器(最常用,-d后台运行,-p端口映射,--name指定容器名) # 格式:sudo docker run -d -p 主机端口:容器端口 --name 容器名 镜像名 # 示例:启动nginx容器,映射主机80端口到容器80端口,后台运行,命名为my-nginx sudo docker run -d -p 80:80 --name my-nginx nginx:latest # 2. 查看正在运行的容器 sudo docker ps # 3. 查看所有容器(包括停止的) sudo docker ps -a # 4. 停止容器 sudo docker stop 容器ID/容器名# 示例:sudo docker stop my-nginx # 5. 启动已停止的容器 sudo docker start 容器ID/容器名 # 6. 重启容器 sudo docker restart 容器ID/容器名 # 7. 删除容器(需先停止容器,-f强制删除运行中的容器) sudo docker rm 容器ID/容器名# 示例:sudo docker rm my-nginx sudo docker rm -f 容器ID/容器名# 强制删除 # 8. 进入容器内部(交互模式,用于调试、修改配置) sudo docker exec -it 容器ID/容器名 /bin/bash# 示例:sudo docker exec -it my-nginx /bin/bash # 退出容器:输入exit即可 # 9. 查看容器日志(排查容器运行异常) sudo docker logs 容器ID/容器名# 实时查看日志:sudo docker logs -f 容器ID/容器名 |
基础操作避坑指南
1端口映射时,避免主机端口被占用(如80端口被Apache占用,需更换主机端口,如8080:80);
1删除镜像前,必须先删除依赖该镜像的所有容器,否则会提示“镜像被容器引用”;
1进入容器后,修改的配置的是容器内部的文件,容器重启后会丢失(需用数据卷挂载,后续进阶会讲)。
三、Docker进阶实用技能(提升效率,实战必备)
掌握基础操作后,以下进阶技能能大幅提升Docker使用效率,解决实际工作中的复杂场景(如配置持久化、加速镜像拉取、批量管理容器)。
1. 配置Docker国内镜像源(解决拉取镜像慢的问题)
默认Docker Hub镜像源在国外,拉取镜像速度慢,配置国内镜像源(如阿里云、网易云),可大幅提升拉取速度:
bash # 1. 新建/修改Docker配置文件(若/etc/docker/daemon.json文件不存在,直接创建) sudo vi /etc/docker/daemon.json # 2. 输入以下内容(阿里云镜像源,稳定推荐) { "registry-mirrors": [ "https://docker.mirrors.aliyun.com", "https://hub-mirror.c.163.com" ] } # 3. 保存退出(vi编辑器:按Esc,输入:wq,回车) # 4. 重启Docker服务,使配置生效 sudo systemctl daemon-reload sudo systemctl restart docker # 5. 验证配置是否生效 sudo docker info # 若看到“Registry Mirrors”中显示配置的国内镜像源,说明配置成功 |
2. 数据卷挂载(实现容器数据持久化)
容器默认的数据存储在内部,容器删除后数据会丢失,通过数据卷(Volume)挂载,可将容器内的目录映射到主机目录,实现数据持久化(如nginx配置文件、mysql数据):
bash # 1. 创建数据卷(可选,也可直接挂载主机目录) sudo docker volume create nginx-volume # 2. 挂载数据卷启动容器(将nginx容器的/usr/share/nginx/html目录,挂载到主机的/root/nginx/html目录) # 方式1:挂载自定义数据卷 sudo docker run -d -p 80:80 --name my-nginx -v nginx-volume:/usr/share/nginx/html nginx:latest # 方式2:直接挂载主机目录(更灵活,推荐) sudo mkdir -p /root/nginx/html# 主机创建目录 sudo docker run -d -p 80:80 --name my-nginx -v /root/nginx/html:/usr/share/nginx/html nginx:latest # 说明:挂载后,修改主机/root/nginx/html目录下的文件,容器内对应目录会同步变化,容器删除后,主机目录数据仍保留 |
3. 配置Docker免sudo操作(提升使用便捷性)
默认情况下,执行docker命令需加sudo,配置免sudo操作,无需输入密码即可执行:
bash # 1. 将当前用户加入docker用户组 sudo usermod -aG docker $USER # 2. 重启Docker服务 sudo systemctl restart docker # 3. 注销当前用户,重新登录(或重启系统),配置生效 # 验证:重新登录后,执行docker ps,无需sudo即可正常显示 |
注意:该操作仅针对当前用户,若有其他用户需要免sudo,需重复上述步骤。
4. 容器自启动配置(避免重启系统后容器失效)
Linux系统重启后,Docker容器默认不会自动启动,配置自启动,可减少手动操作:
bash # 1. 启动容器时,直接配置自启动(--restart=always) docker run -d -p 80:80 --name my-nginx --restart=always nginx:latest # 2. 给已存在的容器配置自启动 docker update --restart=always 容器ID/容器名# 示例:docker update --restart=always my-nginx # 3. 取消容器自启动 docker update --restart=no 容器ID/容器名 |
5. 批量管理容器(高效运维必备)
当有多个容器时,批量操作可大幅提升效率,常用批量命令:
bash # 1. 批量停止所有正在运行的容器 docker stop $(docker ps -q) # 2. 批量删除所有已停止的容器 docker rm $(docker ps -a -q) # 3. 批量删除所有镜像(谨慎使用,会删除所有本地镜像) docker rmi $(docker images -q) # 4. 批量查看所有容器的状态 docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}" |
四、常见问题与排查技巧(实战避坑,快速解决)
使用Docker过程中,难免遇到报错,以下是最常见的问题及排查方法,新手可直接对照解决。
1. 问题1:Docker启动失败,提示“Job for docker.service failed”
排查方法:
1查看Docker启动日志,定位错误原因:sudo journalctl -u docker
1常见原因1:daemon.json配置错误(如语法错误),重新修改配置文件,确保JSON格式正确;
1常见原因2:端口被占用,关闭占用端口的服务,或更换容器端口。
2. 问题2:拉取镜像时,提示“timeout”(超时)
排查方法:
1检查网络连接,确保Linux系统能正常访问外网;
1配置国内镜像源(参考进阶技能1),重新拉取镜像;
1若仍超时,手动下载镜像压缩包,导入本地:docker load -i 镜像压缩包路径。
3. 问题3:进入容器后,无法使用vim、ping等命令
排查方法:容器内部默认未安装这些工具,需在容器内安装:
bash # 进入容器后,执行以下命令安装(Ubuntu容器) apt update && apt install -y vim iputils-ping # CentOS容器 yum install -y vim iputils-ping |
4. 问题4:容器挂载数据卷后,主机目录无法访问(权限不足)
排查方法:给主机目录赋予足够权限,示例:
bash sudo chmod -R 777 /root/nginx/html# 给主机挂载目录赋予读写执行权限 # 或修改目录所有者,与容器内用户一致(更安全) sudo chown -R 101:101 /root/nginx/html# nginx容器内默认用户ID为101 |
五、实用场景实战(将技能落地,快速上手)
结合实际工作场景,分享2个高频实战案例,帮助新手快速将Docker技能落地。
实战1:用Docker快速部署Nginx服务
bash # 1. 拉取nginx最新镜像 docker pull nginx:latest # 2. 创建主机挂载目录(用于存放nginx配置和网页文件) mkdir -p /root/nginx/{conf,html,logs} # 3. 复制容器内默认配置到主机(便于修改) docker run -d --name temp-nginx nginx:latest# 临时启动容器 docker cp temp-nginx:/etc/nginx/nginx.conf /root/nginx/conf/# 复制配置文件 docker rm -f temp-nginx# 删除临时容器 # 4. 挂载目录启动nginx,配置自启动 docker run -d -p 80:80 --name my-nginx --restart=always \ -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /root/nginx/html:/usr/share/nginx/html \ -v /root/nginx/logs:/var/log/nginx \ nginx:latest # 5. 验证:浏览器访问Linux主机IP(如http://192.168.1.100),能看到nginx默认页面即成功 |
实战2:用Docker部署MySQL服务(持久化数据)
bash # 1. 拉取MySQL 8.0镜像 docker pull mysql:8.0 # 2. 创建数据卷(持久化MySQL数据) docker volume create mysql-data # 3. 启动MySQL容器,设置密码,配置自启动 docker run -d -p 3306:3306 --name my-mysql --restart=always \ -v mysql-data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \# 设置root密码为123456 mysql:8.0 # 4. 验证:进入容器,登录MySQL docker exec -it my-mysql /bin/bash mysql -u root -p# 输入密码123456,能成功登录即部署成功 |
六、总结
Linux系统中Docker的使用,核心是掌握“镜像管理+容器操作”,再结合进阶技能(国内镜像、数据卷、免sudo、自启动),就能满足日常开发、运维的绝大多数需求。Docker的核心价值在于“隔离、高效、可移植”,它能让开发者摆脱环境配置的困扰,让运维人员实现快速部署、批量管理,大幅提升工作效率。
新手建议从基础操作入手,先熟练掌握镜像拉取、容器启停、端口映射等核心命令,再逐步尝试数据卷挂载、自启动配置等进阶技能,结合实战场景多练习,就能快速上手。后续可深入学习Docker Compose(批量管理多容器)、Docker Swarm(容器集群)等高级特性,进一步提升Docker使用能力,适配更复杂的业务场景。
|(注:文档部分内容可能由 AI 生成)