Docker
开始1

快速开始使用 Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上。

Docker Logo

Docker 核心组件

为什么使用 Docker?

在 Docker 出现之前,开发和运维之间经常会出现“在我的机器上能运行”的问题。Docker 通过环境隔离解决了这一痛点:

  • 一致性:无论是在开发环境、测试环境还是生产环境,容器运行的表现完全一致。
  • 隔离性:多个容器可以在同一台主机上运行而互不干扰。
  • 高效:容器共享宿主机的内核,启动速度通常在秒级。

核心概念

概念描述
镜像 (Image)一个只读的模板,包含运行容器所需的所有指令。
容器 (Container)镜像的可运行实例,是一个轻量级的沙盒。
仓库 (Repository)存放镜像的地方,如 Docker Hub。

常用基础命令

1. 镜像操作

首先,尝试从远程仓库拉取一个镜像并查看本地镜像列表。

# 拉取最新版的 Ubuntu 镜像
docker pull ubuntu:latest
 
# 查看本地已有的所有镜像
docker images

2. 容器操作

使用镜像启动一个交互式的容器:

# 启动并进入容器终端
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:端口号