1.拉取redis镜像
docker hub直达

docker pull redis:latest
1
查看镜像

PS C:\Windows\System32> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 0e403e3816e8 3 days ago 113MB
mysql 5.7 ae552624b4bd 5 days ago 448MB
docker/getting-started latest 26d80cd96d69 3 months ago 28.5MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB

2.创建redis配置文件,为挂载操作做准备
在D盘创建2个文件夹
conf目录用于挂载配置文件
data目录用于存放数据持久化文件

在conf文件夹新建redis.conf文件,内容如下

#用守护线程的方式启动 后台运行
daemonize no
#给redis设置密码
requirepass 123456
#redis持久化  默认是no
appendonly yes
#防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300
tcp-keepalive 300

3.构建并启动redis容器
映射到宿主16379端口

docker run --name redis -p 16379:6379 -v /D/docker/redis/conf/redis.conf:/etc/redis/redis_6379.conf -v /D/docker/redis/data:/data/ -d redis:latest redis-server /etc/redis/redis_6379.conf --appendonly yes
1
–name=“容器新名字”:为容器指定一个名称
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-d: 后台运行容器,并返回容器ID
-v /D/docker/redis/conf/redis.conf:/etc/redis/redis_6379.conf 把宿主机配置好的redis.conf放到容器内的这个位置中
-v /D/docker/redis/data:/data/ 把redis持久化的数据在宿主机内显示,做数据备份
–net=host

4.查看容器已经在运行中

使用 QuickRedis客户端 测试链接

接下来就可以愉快的玩耍啦

进入容器

auth “123456” 注意是字符串格式的密码
redis-cli表示运行一个redis客户端 (-a 123456 指定密码)

业务代码key格式 采用 ** : 分割** user:token:10001

常见命令

keys * 匹配查找key 由于单线程 key很多时候 效率会降低
help @groupname ex: help @string 也可以直接命代码 tab会有提示
del key 删除一个key
EXISTS key [key ...] 查看key是否存在
expier key 1 给key设置有效期单位秒
ttl key 查看key的有效期剩余 单位秒
查看镜像:docker images
获取一个新镜像:docker pull 镜像(ubuntu:16.04)
创建镜像:1、从已经创建的容器中更新镜像,并提交这个镜像;2、使用Dockerfile指令来创建一个新的镜像。
查看容器:docker ps -a(带-a是查看所有的,不带-a是查看启动的)
查看容器内运行的进程:docker top 容器号
查看应用程序日志:docker logs -f 容器号
创建容器:docker run -it --name 容器名 镜像名 /bin/bash
启动容器:docker start 容器名/号
重启容器:docker restart 容器名/号
停止容器:docker stop 容器名/号
删除容器:docker rm 容器名/号
进入容器:docker exec -it 容器名/号 /bin/bash

容器间通信
要想多容器之间互通,从 Web 容器访问 mysql 容器,我们只需要把他们放到同个网桥中就可以了
设置网桥以后,容器之间天然互通

#查看现有网桥
1 docker network ls
#新增我的网桥
2 docker network create -d bridge mysql_pageplug
# 网桥分别绑定两个容器name
3 docker ps
docker network connect mysql_pageplug mysql8.0
docker network connect mysql_pageplug pageplug
# 查看我们的网桥组中容器的IP
4 docker network ls
docker inspect mysql_pageplug

也可以在创建容器时使用网络别名(运行 Redis 在 test-net 网络中,别名redis) docker run -d --name redis --network test-net --network-alias redis redis:latest

当然 如果你使用 docker-compose 只需要描述依赖哪些服务放在一个yml文件下

# 创建网络
networks:
test_net:
driver: bridge

其他网络命令

#主机模式启动
network_mode: "host"
restart: always

指定网络网段和IP docker network create --subnet=172.18.0.0/16 mynetwork

docker网络

目录挂载
为什么要目录挂载

使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新build和run,很是麻烦。
容器里面产生的数据,例如 log 文件,数据库备份文件,容器删除后就丢失了。
几种挂载方式
3. bind mount 直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上
4. volume 由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上
5. tmpfs mount 适合存储临时文件,存宿主机内存中。不可多容器共享。

 

bind mount 方式用绝对路径 -v D:/code:/app 挂载数组代码-> 容器
volume 方式,只需要一个名字 -v db-data:/app

docker inspect mysql8.0
参数 “RW”: false的话表示只读模式,路径内文件不能被容器内程序修改

# 启动容器时挂载具名卷,Docker会为您创建该卷
docker run -d -p 1234:80 -v mynginx:/usr/share/nginx/html nginx:latest
docker volume ls
docker (volume) inspect mynginx

“$(pwd)”/html
目录挂载