Docker 新手入门:从安装到跑起第一个容器
第一次听说 Docker 的人,常常会被一堆新名词绕晕:镜像、容器、仓库、Dockerfile……其实抓住一条主线就够了:Docker 是为了解决“环境不一致”而生的。下面这篇短文,带你从安装一路走到跑起第一个属于自己的容器。
一、为什么用 Docker
1. 告别“在我机器上能跑”
开发环境装的是 Python 3.11,测试服务器是 3.9,线上又是 3.8——版本差异导致的 bug 排查起来最折磨人。Docker 把应用连同它依赖的运行环境一起打包成镜像,在哪里运行都是一模一样的环境。
2. 比虚拟机轻得多
虚拟机要虚拟一整套硬件和操作系统,启动按分钟计;容器共享宿主机的操作系统内核,启动只要几秒,资源占用也小得多。一台普通的开发机同时跑十几个容器毫无压力。
3. 分发和部署极快
镜像一次构建、处处运行。想给同事演示?发他一个镜像,docker run 一下就能跑,不用再附一份“环境配置说明书”。
先记住三个核心概念:**镜像(Image)**是只读的应用模板,好比“安装包”;**容器(Container)**是镜像运行起来的实例,好比“运行中的程序”;**仓库(Registry)**是集中存放镜像的地方,Docker Hub 就是最大的公共仓库。
二、安装要点
- Linux(推荐 Ubuntu):跟着 Docker 官方文档用 apt 安装
docker-ce即可。装完建议把当前用户加入docker用户组,这样以后执行 docker 命令不用每次都加sudo。 - Windows / macOS:安装 Docker Desktop,它会在后台起一个轻量虚拟机。Windows 上需要先启用 WSL2。
- 验证安装:执行
docker --version能看到版本号,再跑docker run hello-world——如果它能自动拉取镜像并打印出 “Hello from Docker!”,说明安装成功。 - 国内网络注意:默认从 Docker Hub 拉镜像可能很慢或超时,建议配置国内镜像加速地址,这是新手最容易卡住的第一关。
三、常用命令
docker pull nginx # 从仓库拉取镜像
docker images # 查看本地有哪些镜像
docker run -d -p 8080:80 --name my-nginx nginx # 后台运行容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器(含已停止)
docker logs my-nginx # 查看容器日志
docker exec -it my-nginx bash # 进入容器内部
docker stop my-nginx # 停止容器
docker rm my-nginx # 删除容器
docker build -t my-app . # 根据 Dockerfile 构建镜像
几个常用参数的含义:-d 是后台运行;-p 8080:80 把宿主机的 8080 端口映射到容器的 80 端口;--name 给容器起个名字方便管理;-it 组合让你能交互式地进入容器。
四、一个完整小例子:把自己的页面跑起来
只跑别人的 nginx 不过瘾,我们亲手构建一个镜像:
第 1 步,新建一个文件夹,里面写一个 index.html:
<h1>Hello Docker,这是我的第一个容器!</h1>
第 2 步,同目录下写一个 Dockerfile(注意文件名首字母大写、无后缀):
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
意思是:以轻量的 nginx 镜像为底,把我们的页面拷进它的默认网页目录。
第 3 步,构建镜像:
docker build -t hello-docker .
第 4 步,运行它:
docker run -d -p 8080:80 --name hello hello-docker
第 5 步,浏览器打开 http://localhost:8080,看到 “Hello Docker” 就成功了!
玩完记得清理:docker stop hello && docker rm hello,好习惯从第一天养成。
五、常见坑
- 端口被占用:
docker run报端口冲突时,换个宿主机端口映射即可,比如-p 8081:80。 - 容器“消失”了:
docker ps看不到刚启动的容器?记住容器是“前台进程结束就退出”的,用docker ps -a找到它,再用docker logs看退出的报错。 - 权限不足:Linux 下报
permission denied,多半是当前用户不在docker组,重新登录 shell 或用sudo解决。 - 拉镜像超时:先检查网络,再确认镜像加速器配好了没。
- 容器删了数据就没了:容器内部的文件系统随容器删除而消失,重要数据要用
-v把宿主机目录挂载进去持久化。 - 镜像越做越大:Dockerfile 里每条
RUN都会产生一层,能合并的尽量用&&合并;再配个.dockerignore把 node_modules、.git 这类目录排除在构建上下文之外。
写在最后
到这里,你已经走完了 Docker 的最小闭环:安装 → 拉镜像 → 跑容器 → 自己构建镜像。下一步可以试试 docker-compose,用一个 YAML 文件把“应用 + 数据库 + 缓存”这样的多容器组合一次编排起来,那才是 Docker 在日常开发里真正的甜蜜点。
- 点赞
- 收藏
- 关注作者
评论(0)