快速开始使用 Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上。
Docker 核心组件
为什么使用 Docker?
在 Docker 出现之前,开发和运维之间经常会出现“在我的机器上能运行”的问题。Docker 通过环境隔离解决了这一痛点:
- 一致性:无论是在开发环境、测试环境还是生产环境,容器运行的表现完全一致。
- 隔离性:多个容器可以在同一台主机上运行而互不干扰。
- 高效:容器共享宿主机的内核,启动速度通常在秒级。
核心概念
| 概念 | 描述 |
|---|---|
| 镜像 (Image) | 一个只读的模板,包含运行容器所需的所有指令。 |
| 容器 (Container) | 镜像的可运行实例,是一个轻量级的沙盒。 |
| 仓库 (Repository) | 存放镜像的地方,如 Docker Hub。 |
常用基础命令
1. 镜像操作
首先,尝试从远程仓库拉取一个镜像并查看本地镜像列表。
# 拉取最新版的 Ubuntu 镜像
docker pull ubuntu:latest
# 查看本地已有的所有镜像
docker images2. 容器操作
使用镜像启动一个交互式的容器:
# 启动并进入容器终端
docker run -it --name s7ar-test ubuntu /bin/bash
# 在容器内查看系统信息
cat /etc/issue
# 退出容器
exit实战:打包一个简单的应用
假设你有一个简单的 Node.js 项目,你需要创建一个 Dockerfile 来定义你的环境。
第一步:创建 Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]第二步:构建镜像
# 构建名为 s7ar-app 的镜像
docker build -t s7ar-app .第三步:启动容器
# 将容器的 3000 端口映射到宿主机的 8080 端口
docker run -d -p 8080:3000 s7ar-app常见问题排查
[!TIP] 权限问题:如果你在执行命令时遇到
Permission Denied,请尝试在命令前加上sudo,或者将当前用户加入docker用户组。
sudo usermod -aG docker ${USER}[!WARNING] 端口占用:如果启动容器失败,请检查端口是否被占用。你可以使用
lsof -i:端口号来查看。
lsof -i:端口号