真正开发里:
Docker 最常干的事情其实就几个:
txt
拉镜像
启动容器
查看容器
停止容器
删除容器
进入容器
查看日志
掌握这些:
基本就能满足日常开发。
一、Docker 工作流程(先建立概念)
Docker 日常操作:
本质就三步:
txt
镜像(Image)
↓
创建容器(Container)
↓
运行程序
二、查看本地镜像
bash
docker images
作用:
txt
查看本机已有镜像
输出:
txt
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest xxxxxxx 3 days ago 117MB
mysql latest xxxxxxx 5 days ago 600MB
三、下载镜像(pull)
例如下载 Redis:
bash
docker pull redis
下载 MySQL:
bash
docker pull mysql
四、为什么 pull 后就能运行
因为:
txt
镜像本身就包含:
程序 + 环境
例如:
txt
Redis镜像
已经自带Redis环境
所以:
不用自己安装。
五、运行容器(最重要)
启动 Redis
bash
docker run redis
Docker 会:
txt
创建容器
↓
启动 Redis
六、后台运行(重点)
正常:
bash
docker run redis
终端会被占用。
所以开发里:
一般:
bash
docker run -d redis
-d 是什么
txt
detached
意思:
txt
后台运行
七、查看运行中的容器
bash
docker ps
输出:
txt
CONTAINER ID IMAGE COMMAND STATUS
xxxxxx redis ... Up 10 minutes
八、查看所有容器
bash
docker ps -a
包括:
txt
运行中的
已停止的
九、容器名字(重点)
默认:
Docker 会随机名字:
txt
happy_cat
busy_dog
很乱。
所以:
一般会:
bash
docker run --name myredis redis
--name
作用:
txt
给容器取名字
后面操作:
更方便。
十、端口映射(非常重要)
例如:
bash
docker run -d -p 6379:6379 redis
什么意思
txt
宿主机端口 : 容器端口
为什么必须映射
Redis 在容器内部。
如果不映射:
txt
外面访问不到
6379:6379
表示:
txt
电脑6379
↓
映射到
容器6379
这样:
Go 程序:
go
localhost:6379
才能连接。
十一、查看容器日志
bash
docker logs 容器名
例如:
bash
docker logs myredis
十二、持续查看日志
类似:
txt
tail -f
命令
bash
docker logs -f myredis
十三、停止容器
bash
docker stop 容器名
例如:
bash
docker stop myredis
十四、启动已停止容器
bash
docker start myredis
十五、重启容器
bash
docker restart myredis
十六、删除容器
bash
docker rm 容器名
例如:
bash
docker rm myredis
十七、为什么删不掉
如果容器正在运行:
txt
无法删除
必须:
先停止:
bash
docker stop myredis
再删除。
十八、强制删除
bash
docker rm -f myredis
-f
表示:
txt
force
强制删除
十九、删除镜像
bash
docker rmi redis
二十、进入容器(重点)
很多时候:
需要:
txt
进入容器内部
例如:
- 看文件
- 执行命令
- 进入 Redis CLI
命令
bash
docker exec -it myredis bash
二十一、exec 是什么
txt
在容器内部执行命令
二十二、-it 是什么
这个新人非常容易懵。
-i
txt
保持输入流
-t
txt
开启终端
合起来
txt
进入交互式终端
二十三、为什么有时候 bash 不存在
有些镜像:
非常轻量。
没有:
txt
bash
这时候:
用:
bash
docker exec -it myredis sh
二十四、进入 Redis 容器后
可以:
bash
redis-cli
进入 Redis 命令行。
二十五、查看容器详细信息
bash
docker inspect 容器名
例如:
bash
docker inspect myredis
可以查看:
- IP
- 端口
- 配置
- 挂载
二十六、容器自动删除
bash
docker run --rm redis
--rm
表示:
txt
容器停止后自动删除
适合:
txt
临时测试
二十七、数据卷(重点)
如果:
直接删容器:
txt
数据也没了
所以:
需要:
txt
数据持久化
挂载目录
bash
docker run -d \
-v /mydata:/data \
redis
什么意思
txt
宿主机目录
↓
映射到
容器目录
这样:
容器删了:
数据还在。
二十八、MySQL 最经典启动方式
真实开发:
经常这样:
bash
docker run -d \
-p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
二十九、-e 是什么
txt
环境变量
例如:
txt
MYSQL_ROOT_PASSWORD
设置 MySQL 密码。
三十、Docker 日常操作核心流程
真正开发:
天天都在:
txt
docker pull
docker run
docker ps
docker logs
docker exec
docker stop
docker rm
循环。
三十一、后端开发最常见容器
你以后:
大概率天天开:
| 服务 | 用途 |
|---|---|
| mysql | 数据库 |
| redis | 缓存 |
| nginx | 网关 |
| rabbitmq | 消息队列 |
| minio | 对象存储 |
三十二、最后总结
Docker 日常操作核心:
| 命令 | 作用 |
|---|---|
| docker images | 查看镜像 |
| docker pull | 下载镜像 |
| docker run | 创建运行容器 |
| docker ps | 查看容器 |
| docker logs | 查看日志 |
| docker exec | 进入容器 |
| docker stop | 停止容器 |
| docker rm | 删除容器 |
真正重要理解:
txt
镜像是模板
容器是真正运行的程序
开发里:
Docker 最大作用:
txt
快速搭环境
统一环境
快速部署