docker 入门
# Docker
## 基本概念
Docker 是一个工具,可以将应用程序及其依赖环境打包成一个独立的、可移植的“容器”,让应用程序在任何地方都能快速、一致地运行。
- 镜像(Image): Docker 镜像是一个只读的模板,用来创建容器,简单来说就是为容器运行提供需要的程序、资源、配置等, 他在构建成功后就不会变化,只用于启动容器
- 容器(Container): 容器是镜像的运行实例,可以被启动、停止、删除 ,一个Docker镜像可以例化出来多个容器,每个容器之间是独立的。Docker的容器是用来运行程序的,可以理解为Docker的容器就是一个操作系统,目的是运行我们写的程序。
- 仓库(Repository): 用来存储和分发 Docker 镜像的地方 Dockerhub 有点类似于github用户可以在上面托管镜像
## **Docker 常用命令**
### **1. 镜像操作**
#### **1.1 拉取镜像**
从 Docker Hub 拉取镜像:
```bash
docker pull <镜像名称>:<标签>
```
示例:
```bash
docker pull nginx:latest
```
#### **1.2 查看本地镜像**
列出本地所有镜像:
```bash
docker images
```
#### **1.3 删除镜像**
删除本地镜像:
```bash
docker rmi <镜像ID或名称>
```
示例:
```bash
docker rmi nginx:latest
```
#### **1.4 构建镜像**
通过 Dockerfile 构建镜像:
```bash
docker build -t <镜像名称>:<标签> .
```
示例:
```bash
docker build -t my-app:1.0 .
```
---
### **2. 容器操作**
#### **2.1 运行容器**
基于镜像运行容器:
```bash
docker run -d -p <端口号> --name <容器名称> <镜像名称>
```
示例:
```bash
docker run -d -p 3000:80 --name my-nginx nginx:latest
```
#### **2.2 查看容器**
查看运行中的容器:
```bash
docker ps
```
查看所有容器(包括已停止的):
```bash
docker ps -a
```
#### **2.3 停止容器**
停止运行中的容器:
```bash
docker stop <容器ID或名称>
```
示例:
```bash
docker stop my-nginx
```
#### **2.4 启动已停止的容器**
启动已停止的容器:
```bash
docker start <容器ID或名称>
```
示例:
```bash
docker start my-nginx
```
#### **2.5 删除容器**
删除已停止的容器:
```bash
docker rm <容器ID或名称>
```
示例:
```bash
docker rm my-nginx
```
#### **2.6 进入容器**
进入运行中的容器:
```bash
docker exec -it <容器ID或名称> /bin/bash
```
示例:
```bash
docker exec -it my-nginx /bin/bash
```
#### **2.7 查看容器日志**
查看容器日志:
```bash
docker logs <容器ID或名称>
```
实时查看日志:
```bash
docker logs -f <容器ID或名称>
```
---
### **3. 网络操作**
#### **3.1 查看网络**
列出所有网络:
```bash
docker network ls
```
#### **3.2 创建网络**
创建自定义网络:
```bash
docker network create <网络名称>
```
示例:
```bash
docker network create my-network
```
#### **3.3 连接容器到网络**
运行容器并连接到指定网络:
```bash
docker run -d -p <端口号> --name <容器名称> --network <网络名称> <镜像名称>
```
示例:
```bash
docker run -d -p 3000:80 --name my-nginx --network my-network nginx:latest
```
---
### **4. 数据卷操作**
#### **4.1 创建数据卷**
创建数据卷:
```bash
docker volume create <卷名称>
```
示例:
```bash
docker volume create my-volume
```
#### **4.2 查看数据卷**
列出所有数据卷:
```bash
docker volume ls
```
#### **4.3 挂载数据卷**
运行容器并挂载数据卷:
```bash
docker run -d --name <容器名称> -v <卷名称>:<容器内路径> <镜像名称>
```
示例:
```bash
docker run -d --name my-nginx -v my-volume:/app nginx:latest
```
---
### **5. Docker Compose 操作**
#### **5.1 启动服务**
使用 `docker-compose.yml` 启动服务:
```bash
docker-compose up -d
```
#### **5.2 停止服务**
停止并删除服务:
```bash
docker-compose down
```
#### **5.3 查看服务状态**
查看运行中的服务:
```bash
docker-compose ps
```
---
### **6. 其他常用命令**
#### **6.1 查看 Docker 版本**
```bash
docker --version
```
#### **6.2 清理未使用的资源**
删除未使用的镜像、容器、网络和数据卷:
```bash
docker system prune
```
#### **6.3 查看容器资源使用情况**
查看容器的 CPU、内存等资源使用情况:
```bash
docker stats
```
---
### **7. 示例**
#### **7.1 打包并运行一个 Node.js 应用**
1. 编写 Dockerfile:
```dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
```
2. 构建镜像:
```bash
docker build -t my-node-app .
```
3. 运行容器:
```bash
docker run -d -p 3000:3000 my-node-app
```
#### **7.2 使用 Docker Compose 部署多容器应用**
1. 编写 `docker-compose.yml`:
```yaml
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
```
2. 启动服务:
```bash
docker-compose up -d
```

浙公网安备 33010602011771号