HoRain云--Docker部署实战:从入门到精通

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

使用 Docker 来搭建服务能有效解决环境一致性问题,并简化部署流程。下面我将为你介绍 Docker 的核心概念、基本服务部署方法,以及一些实用技巧。
🐳 理解 Docker:容器化技术简介
Docker 是一种容器化技术,允许你将应用程序及其所有依赖项(如库、配置文件等)打包到一个标准化的单元中,这个单元就称为容器。容器与宿主机共享操作系统内核,因此比传统虚拟机更加轻量、启动更快、资源占用更少。
-
镜像 (Image):可以看作是一个只读的模板,里面包含了运行某个软件所需的所有内容。它用于创建容器。
-
容器 (Container):是镜像的一个运行实例。你可以创建、启动、停止、移动或删除容器。容器之间相互隔离。
-
Dockerfile:一个文本文件,里面包含了一系列用于构建 Docker 镜像的指令。
-
Docker Compose:一个工具,用于通过一个 YAML 文件来定义和运行多个相互关联的容器。
📦 常见服务的 Docker 部署命令
下表汇总了部署常见服务时通常会用到的基础 Docker 命令,你可以快速了解每个服务部署的关键参数:
|
服务 |
基础镜像 |
部署命令 (示例) |
关键参数说明 |
|---|---|---|---|
|
Nginx |
|
|
|
|
MySQL |
|
|
|
|
Redis |
|
|
|
|
Node.js |
需自定义构建 |
|
需先编写 Dockerfile 构建镜像。 |
🔧 部署基础服务:Nginx 和 MySQL 示例
1. 部署 Nginx Web 服务器
Nginx 是一个流行的 Web 服务器和反向代理服务器。
-
拉取镜像:
docker pull nginx # 拉取最新的官方Nginx镜像 -
运行容器:
docker run -d --name my-nginx -p 8080:80 nginx-
-d:让容器在后台运行。 -
--name my-nginx:为容器取一个名字,方便后续管理。 -
-p 8080:80:将宿主机的 8080 端口映射到容器内的 80 端口(Nginx 默认端口)。访问http://你的服务器IP:8080就能看到 Nginx 的欢迎页面。
-
2. 部署 MySQL 数据库
部署 MySQL 时,数据持久化和设置初始密码非常重要。
-
拉取镜像:
docker pull mysql -
运行容器:
docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 -v /path/on/host:/var/lib/mysql mysql-
-e MYSQL_ROOT_PASSWORD=your_password:设置 MySQL root 用户的密码(务必更改your_password)。 -
-p 3306:3306:端口映射,方便从宿主机或外部连接数据库。 -
-v /path/on/host:/var/lib/mysql:数据持久化关键! 将宿主机的目录挂载到容器内 MySQL 的数据存储目录。这样即使容器被删除,数据也不会丢失。请将/path/on/host替换为你服务器上的实际路径。
-
🧩 使用 Docker Compose 编排多容器应用
当你的应用需要多个服务(例如,一个 Web 应用同时需要 Web 服务器和数据库)时,使用 Docker Compose 可以轻松管理。只需编写一个 docker-compose.yml文件。
-
创建
docker-compose.yml文件:version: '3' # 指定Compose文件版本 services: web: # 定义Web服务 image: nginx # 使用Nginx镜像 ports: - "8080:80" # 端口映射 db: # 定义数据库服务 image: mysql environment: MYSQL_ROOT_PASSWORD: example_password # 设置数据库密码 volumes: - mysql_data:/var/lib/mysql # 使用命名卷进行数据持久化 volumes: # 声明卷 mysql_data: # 定义一个名为mysql_data的卷 -
启动服务:
在包含
docker-compose.yml文件的目录下,运行:docker-compose up -d # -d表示后台运行这将按照文件定义,启动所有服务(这里指
web和db两个服务)。
💡 实用技巧与注意事项
-
使用非 root 用户运行容器:出于安全考虑,如果应用支持,尽量在容器内使用非 root 用户运行进程。
-
限制容器资源:为防止某个容器耗尽所有资源,可以使用
--memory和--cpus参数限制容器能使用的最大内存和 CPU。docker run -d --name my-app --memory="512m" --cpus="1" my-app-image -
选择合适的基础镜像:对于生产环境,通常推荐使用 Alpine Linux 基础的镜像,因为它们非常轻量(例如
node:alpine,python:alpine)。但需注意 Alpine 使用musl libc,有时可能会遇到兼容性问题。如果追求极简且兼容性好,Slim 版本(如python:slim)也是不错的选择。 -
镜像优化与多阶段构建:对于需要编译的应用(如 Go、Java),可以使用 多阶段构建 来减小最终镜像的大小。它允许你在一个 Dockerfile 中使用多个基础镜像,只将必要的文件和构件复制到最终的运行镜像中。
-
查看容器日志:
docker logs [容器名或ID] # 查看容器的日志输出,对排查问题非常有帮助
⚠️ 常见问题 (FAQ)
-
"端口已占用"错误怎么办?
这意味着宿主机上你试图映射的端口(如
8080)已被其他程序使用。解决方法:要么停止正在使用该端口的程序,要么在docker run的-p参数中改为映射一个宿主机上未被占用的端口,例如-p 8081:80。 -
如何进入正在运行的容器?
使用
docker exec命令:docker exec -it [容器名] /bin/bash # 或 /bin/sh-it参数为你提供一个交互式的终端。 -
如何让容器随 Docker 服务自动启动?
在
docker run中加入--restart unless-stopped或--restart always参数:docker run -d --name my-app --restart unless-stopped my-app-image这样,除非你手动停止容器,否则 Docker 服务重启时它会自动启动。
-
如何删除不再需要的容器和镜像?
-
删除已停止的容器:
docker rm [容器名或ID] -
强制删除运行中的容器:
docker rm -f [容器名或ID] -
删除镜像:
docker rmi [镜像名或ID] -
清理无用数据:
docker system prune(注意:这会删除所有已停止的容器、未被使用的网络、构建缓存和悬空镜像,使用时请留意)
-
Docker 的世界很大,但掌握这些基础知识已足以让你顺利搭建起常见的基本服务。多动手实践是熟悉它的最好方式。如果你在搭建特定服务时遇到具体问题,我很乐意提供更进一步的帮助。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐



所有评论(0)