Docker 入门:从安装到第一个容器的完整上手指南
Docker 入门:从安装到第一个容器的完整上手指南
引言
在日常开发中,你是否遇到过这样的困扰:代码在我电脑上能跑,换到服务器上就各种报错?环境配置文档写了十几页,新同事照着装还是装不起来?Docker 就是为解决这类问题而生的。它把应用和它依赖的环境打包成一个轻量、可移植的“集装箱”,无论在哪里运行,行为都保持一致。本文将带你从零安装 Docker,一直跑通你的第一个容器。
一、Docker 是什么
简单来说,Docker 是一个容器化平台。容器(Container)和虚拟机很像,都是隔离的运行环境,但容器共享宿主机的操作系统内核,不需要为每个应用单独安装一套完整系统,所以它启动快(秒级)、占用资源少。
Docker 有三个核心概念:
- 镜像(Image):容器的“安装包”,是一个只读模板,里面打包好了应用及其依赖。
- 容器(Container):镜像运行起来的实例,是真正干活的进程。
- 仓库(Registry):存放镜像的地方,比如 Docker Hub,就像代码的 GitHub。
三者的关系可以这样理解:仓库里有镜像,镜像跑起来就是容器。
二、安装 Docker
Linux(以 Ubuntu 为例)
# 更新软件源
sudo apt update
# 安装依赖
sudo apt install -y ca-certificates curl gnupg
# 添加 Docker 官方 GPG 密钥和软件源(略)
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
Windows / macOS
直接从 Docker 官网下载 Docker Desktop,图形化安装一路“下一步”即可。安装完成后,命令行里能跑通 docker --version 就算成功。
三、常用命令速查
| 命令 | 作用 |
|---|---|
docker pull nginx |
从仓库拉取镜像 |
docker images |
查看本地镜像 |
docker run -d -p 8080:80 nginx |
后台运行容器,端口映射 |
docker ps |
查看运行中的容器 |
docker stop <容器ID> |
停止容器 |
docker rm <容器ID> |
删除容器 |
docker logs <容器ID> |
查看容器日志 |
docker exec -it <容器ID> bash |
进入容器内部 |
建议新手把这几个命令背下来,日常 90% 的操作都用它们。
四、第一个实战:跑起一个 Nginx
我们来运行一个 Nginx 网页服务器,只需一条命令:
docker run -d --name my-nginx -p 8080:80 nginx
解释一下参数:-d 表示后台运行;--name 给容器起个名字;-p 8080:80 把宿主机的 8080 端口映射到容器的 80 端口。执行后打开浏览器访问 http://localhost:8080,看到 Nginx 欢迎页,就说明你的第一个容器跑起来了!
五、用 Dockerfile 构建自己的镜像
当你想把自己的应用容器化时,就需要写一个 Dockerfile。在项目根目录新建 Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
然后构建并运行:
docker build -t my-app:v1 .
docker run -d -p 3000:3000 my-app:v1
docker build 会按照 Dockerfile 的指令一步步生成镜像,-t 是给镜像打标签。之后这个镜像可以在任何装了 Docker 的机器上运行,环境完全一致。
六、数据卷与网络:让容器更实用
容器默认是“无状态”的,删掉容器,里面的数据就没了。想持久化数据,用数据卷:
docker run -d -v /data:/app/data my-app:v1
-v /data:/app/data 把宿主机目录挂载到容器内部,数据就落在了宿主机上。
多个容器之间想互相通信,可以创建自定义网络:
docker network create my-net
docker run -d --network my-net --name web my-app:v1
docker run -d --network my-net --name db mysql:8
同一网络下的容器可以直接用容器名互相访问,比如 web 连接数据库只需填主机名 db。
七、新手常见问题
- 权限不足:Linux 下提示
permission denied,把当前用户加入 docker 组:sudo usermod -aG docker $USER,然后重新登录。 - 拉取镜像慢:配置国内镜像加速器,在 Docker Desktop 或
/etc/docker/daemon.json里设置registry-mirrors。 - 端口被占用:换个宿主机端口,比如
-p 8081:80。 - 容器一起就退出:用
docker logs <容器ID>看日志,九成问题出在启动命令或配置上。
结语
到这里,你已经掌握了 Docker 的核心概念、安装方法和日常命令。建议接下来继续学习 Docker Compose(用一个 YAML 文件管理多容器应用),它会让本地开发环境搭建变得异常轻松。容器化是云原生时代的基本功,花一个周末动手实践,回报会远超你的想象。
- 点赞
- 收藏
- 关注作者
评论(0)