docker 新手入门:10分钟搞定基础使用

上周我第一次正儿八经用 Docker,不是光跑个 hello-world,而是把一个 Spring Boot 项目塞进去跑起来了。整个过程其实没想象中那么玄乎,就是几个命令来回敲。今天我就用大白话,把我踩过的坑和走通的路写下来,保证你跟着做,10 分钟也能跑起来。


装完就跑个 Nginx 试试

Docker 装好之后,别急着看文档。先跑个现成的镜像感受一下:

bash 复制代码
docker run -d -p 8080:80 nginx

然后打开浏览器,访问 http://localhost:8080,看到 "Welcome to nginx!" 页面,说明成了。

这行命令啥意思?

  • docker run:启动一个容器
  • -d:后台运行(不占着终端)
  • -p 8080:80:把本机的 8080 端口映射到容器的 80 端口
  • nginx:镜像名,Docker 会自动去 Hub 拉

我认为,这一步最关键------它让你立刻看到效果,而不是对着命令行发呆。


自己写个 Java 项目打包进 Docker

假设你有个 Spring Boot 项目,打了个 jar 包,叫 app.jar

在项目根目录新建一个文件,名字就叫 Dockerfile(没有后缀):

Dockerfile 复制代码
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY app.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

解释一下:

  • FROM:基于哪个基础镜像(这里用官方 OpenJDK 17)
  • WORKDIR:容器里的工作目录
  • COPY:把本地的 jar 复制进去
  • EXPOSE:声明容器会用 8080 端口(实际要不要映射,还得看 run 命令)
  • ENTRYPOINT:容器启动时执行的命令

然后在终端执行:

bash 复制代码
# 构建镜像,名字叫 myapp,版本 latest
docker build -t myapp:latest .

# 启动容器,把本机 9090 映射到容器 8080
docker run -d -p 9090:8080 myapp:latest

现在访问 http://localhost:9090,你的接口应该能用了。

我们的经验是:Dockerfile 别搞太复杂,先把最简版本跑通。后面再加日志、环境变量、多阶段构建什么的。


常用命令记这几个就够了

刚开始不用背所有命令,记住这几个就够日常用了:

bash 复制代码
# 查看正在运行的容器
docker ps

# 查看所有容器(包括停掉的)
docker ps -a

# 停止某个容器
docker stop <容器ID或名字>

# 删除容器
docker rm <容器ID>

# 查看本地有哪些镜像
docker images

# 删除镜像
docker rmi <镜像ID>

# 进入容器内部(调试用)
docker exec -it <容器ID> /bin/bash

比如你改了代码,重新打包 jar,想更新容器:

  1. docker stop 容器ID
  2. docker rm 容器ID
  3. 重新 docker builddocker run

在我看来,这种"删了重来"的方式虽然粗暴,但对新手最安全,不容易搞混状态。


遇到的两个小坑

  1. Mac/Windows 上路径权限问题

    如果 COPY 文件报错,可能是 Docker 没权限访问你项目的目录。去 Docker Desktop 设置里,把项目所在盘加到"File Sharing"里就行。

  2. 端口被占用

    如果 docker run 报错说端口冲突,换个本机端口就行,比如 -p 9091:8080。容器内部端口(8080)不用动,只要你的应用监听的是 8080。


别怕"浪费"镜像和容器

Docker 的好处之一就是"用完就扔"。你随便 build、run、rm,不会污染系统。

我一开始总担心删错了,后来发现:反正代码在本地,镜像随时能重建,容器就是个临时盒子

现在我们团队开发都这样:本地写代码 → 打包 → docker build → docker run 测试。比配一堆环境变量省心多了。


最后一句实在话

Docker 不是什么高深技术,它就是一个"打包+隔离运行"的工具。

你不需要懂 Linux 内核、cgroups、namespace,也能用它干活。
先跑起来,再慢慢理解原理------这是我最大的体会。

赶紧去装个 Docker,跑个 Nginx,你就已经入门了。

相关推荐
木童6624 分钟前
Kubernetes 操作管理完全指南:从陈述式到声明式,覆盖全生命周期
云原生·容器·kubernetes
DX_水位流量监测44 分钟前
大坝安全监测之渗流渗压位移监测设备技术解析
大数据·运维·服务器·网络·人工智能·安全
电商API&Tina1 小时前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php
不想画图1 小时前
Kubernetes(三)——组网概念和基础操作指令
云原生·容器·kubernetes
Mr_Xuhhh1 小时前
博客标题:深入理解Shell:从进程控制到自主实现一个微型Shell
linux·运维·服务器
f***24114 小时前
高效自动化管理临时文件的技术方案
运维·自动化
m0_738120725 小时前
应急响应——知攻善防靶场Linux-1详细应急过程
linux·运维·服务器·网络·web安全·ssh
青州从事5215 小时前
20260108【mac】【brew】【docker】安装
macos·docker·eureka
obboda5 小时前
磁盘管理(MBR、LVM)
运维·5g
kylezhao20195 小时前
S7-1200 CPU 与 S7-200 SMART S7通信(S7-1200 作为服务器)
运维·服务器