Docker入门指南:从基础操作到镜像构建与分发
立即解锁
发布时间: 2025-08-25 01:31:13 阅读量: 3 订阅数: 5 

# Docker 入门指南:从基础操作到镜像构建与分发
## 1. Docker 存储驱动与客户端基础
### 1.1 Docker 镜像存储方式
Docker 镜像在硬盘上的存储方式由存储驱动负责。Docker 可使用不同驱动以不同方式(和位置,如 AWS 的 S3)存储镜像。默认驱动会将镜像存储在硬盘上,为每个镜像层创建一个文件,文件名使用该层的校验和。
### 1.2 Docker 客户端常用命令
Docker 客户端命令可能较为冗长且不够直观。常见的命令组合是 `docker run -i -t <docker-image>`,它以交互模式运行容器并分配伪终端,让我们能与容器内的命令进行交互。例如:
```bash
docker run -i -t ubuntu
```
执行该命令后,会进入容器内部,提示符会变为类似 `root@248ff3bcedc3:/#` 的形式。若要退出容器,输入 `exit` 即可,此时容器会在后台继续运行。
有时我们希望容器在后台运行,比如启动 Jenkins 服务器时,不希望终端一直与之关联。这时可使用 `-d` 选项(守护进程模式),并去掉 `-i` 和 `-t`:
```bash
docker run -d jenkins
```
镜像拉取并启动后,终端会返回控制权,输出的最后一行是一个长字符串,这是运行中容器的哈希值。执行 `docker ps` 可查看正在运行的容器,输出中的 `CONTAINER ID` 与前面命令的哈希值前几位匹配。
然而,当我们尝试通过浏览器访问 `http://localhost:8080` 时,可能无法打开页面,这是因为未将容器端口绑定到主机的本地端口。
### 1.3 停止容器的方法
停止容器有两种方式:
- **停止容器(`stop`)**:发送 `SIGTERM` 信号给容器内的主进程,等待其在宽限期内完成操作,然后发送 `SIGKILL` 信号。
- **杀死容器(`kill`)**:直接发送 `SIGKILL` 信号给容器内的主进程,强制其立即退出,无法保存状态。
在生产环境中,使用 `kill` 命令前需谨慎,因为 `stop` 命令能让运行的软件有机会保存当前事务并优雅退出。例如:
```bash
docker kill 9f6a
```
Docker 很智能,只需提供容器标识符的前几位就能识别并操作容器。若要删除已停止的容器层,可使用 `docker rm` 命令:
```bash
docker rm 9f6a
```
### 1.4 端口映射与日志查看
为了能通过浏览器访问 Jenkins 实例,需使用 `-p` 选项进行端口映射。例如:
```bash
docker run -p 8080:8080 -p 50000 -d jenkins
```
此命令将主机的 8080 端口映射到容器的 8080 端口,50000 端口同理。也可将主机端口映射到不同的容器端口:
```bash
docker run -p 8081:8080 -p 50001:50000 -d jenkins
```
Jenkins 启动后会要求输入初始密码,该密码可在日志或文件系统中找到。使用 `docker logs` 命令可获取容器的日志:
```bash
docker logs 11872
```
这里的 `11872` 是容器 ID 的前几位,执行该命令可获取 Jenkins 的启动日志,用于故障排除或恢复初始化密码。
### 1.5 传递环境变量
在 Docker 中,有三种方式可配置容器内的应用程序:环境变量、数据卷和从网络获取配置。以官方 MySQL 镜像为例,可使用 `-e` 选项传递环境变量:
```bash
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
```
执行该命令后,可使用 `docker inspect` 命令查看容器的详细信息,其中 `Config` 部分的 `Env` 子部分会显示传递的环境变量:
```bash
docker inspect caa40cc7d45f
```
## 2. Dockerfile 构建镜像
### 2.1 Dockerfile 简介
使用 `commit` 命令构建镜像存在不可重复的问题,当镜像中的软件因新漏洞或版本更新而打补丁时,难以再次构建相同的镜像。Docker 提供了更好的解决方案——Dockerfile。
Dockerfile 是一个包含一系列有序命令的文件,用于准备可使用的镜像。常见操作包括安装软件、升级内核版本和添加用户等。以下是一个示例:
```Dockerfile
FROM node:latest
RUN mkdir -p /app/
WORKDIR /app/
COPY package.json /app/
RUN npm install
COPY . /app
EXPOSE 8080
CMD [ "npm", "start" ]
```
该 Dockerfile 的操作步骤如下:
1. 基于最新的 Node.js 镜像创建新镜像。
2. 在 `/app` 目录下创建新文件夹。
3. 设置工作目录为 `/app`。
4. 复制 `package.json` 并安装 Node.js 依赖项。
5. 复制其余源代码。
6. 暴露 8080 端口。
7. 运行 `npm start` 命令。
### 2.2 RUN 与 CMD 的区别
在 Dockerfile 中,`RUN` 和 `CMD` 都用于运行命令,但有区别:
- `RUN`:在构建镜像时运行命令,通常会创建一个新的镜像层。
- `CMD`:在基于生成的镜像启动容器时运行命令,使用容器的可写层存储更改,不会创建新层。
### 2.3 测试 Dockerfile
在构建镜像前,需创建一个简单的 Node.js 应用程序,包含 `package.json`、`i
0
0
复制全文
相关推荐










