摘自bilibili视频,感谢黑马程序员老师精彩讲授
- docker 安装
参考文档:https://docs.docker.com/engine/install/centos/ - 先卸载
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
- 设置资源库
sudo yum install -y yum-utils
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
Install Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-pluginsudo systemctl start docker
- 配置镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
docker images --help
- 镜像常用命令
docker save --help
docker load --help
docker images --help
docker rmi --help
docker pull --help
docker push --help
1.把镜像保存到指定镜像中
例子: docker save -o nginx.tar nginx:latest
2.删除镜像
docker rmi nginx:latest
- 加载镜像
docker load -i nginx.tar
练习:https://hub.docker.com/_/redis
docker pull redis
docker images
docker save -o redis.tar redis:latest
docker rmi redis:latest
docker load -i redis.tar
- 容器相关命令
docker run --name mn -p 80:80 -d nginx
docker ps
docker ps -a
docker start mn
docker logs mn
持续查看日志
docker logs -f
进入容器
docker exec -it mn bash
sed -i 's/a/b/g' index.html
停掉mn容器
docker stop mn
docker rm --help
强制删除运行中的容器
docker rm -f mn
- docker 数据卷
docker volume COMMAND
docker volume --help
docker volume create html
docker volume ls
查看数据卷存在哪里
docker volume inspect html
移除所有未使用的卷
docker volume prune
删除某个卷
docker volume rm html
挂载逻辑卷
docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx
查看数据卷挂载的真实目录
docker inspect html
挂载目录:
docker run --name my-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker load -i mysql.tar
docker run --name mm -v /tmp/mysql/data:/var/lib/mysql -v /tmp/mysql/conf/ycon.conf:/etc/mysql/conf.d/ycon.conf


20220722 进一步研究
https://www.bilibili.com/video/BV1wQ4y1Y7SE?p=17
- Docker 引擎安装 (运行容器的平台)
https://docs.docker.com/engine/install/centos/
docker version
docker info
- 结构
镜像 : 软件
容器: 隔离的操作系统
镜像运行产生容器
仓库:
hub.docker.com
- 镜像加速
登录阿里云网站
容器镜像服务->镜像工具->镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xyz.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
- 检测加速配置是否成功
docker info
- 启动mysql
docker pull mysql:5.7
docker run --name mysql57 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /tmp/mysql/conf:/etc/mysql/conf.d -v /tmp/mysql/data:/var/lib/mysql -d mysql:5.7
// 看日志
docker logs -f mysql57
- docker 重启之后要自动重启 mysql57
systemctl restart docker
docker ps
加上参数:
--restart=always
(base) [root@localhost ~]# docker run --name mysql57 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /tmp/mysql/conf:/etc/mysql/conf.d -v /tmp/mysql/data:/var/lib/mysql --restart=always -d mysql:5.7
- 持久化数据到宿主机
-v 参数加上后 , 即使容器被删了再重启数据不会丢
- 删除所有容器
docker rm -f $(docker ps -qa)
- 在mysql导出sql文件,利于跨机器数据迁移(用navicate更直接)
导出所有:
docker exec mysql57 sh -c 'exec mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --all-databases'>/root/all-databases2.sql
导出单个表:
docker exec mysql57 sh -c 'exec mysqldump --databases learn -u root -p"MYSQL_ROOT_PASSWORD"'>/root/learn.sql
- 用docker 安装 redis
docker pull redis:latest
docker exec 容器ID sh -c 'exec redis-cli'
docker run --name mr -p 6378:6379 --restart=always -d redis
redis 内存数据持久化
aof:redis服务器将所有redis客户端的写操作以命令方式记录到日志文件中
redb持久化: 快照某一时间数据
Redis持久化
start with persistent storage
$ docker run --name some-redis -p 6379:6379 -v /tmp/redisdata:/data --restart=always -d redis redis-server --save 60 1 --loglevel warning
AOF
$ docker run --name some-redis -p 6379:6379 -v /tmp/redisdata:/data --restart=always -d redis redis-server --appendonly yes
- 自定义配置文件启动redis
如何获取?可下载对应版本 copy到宿主机某个目录如/tmp/redis/conf
运行容器用宿主机的配置文件
docker run --name some-redis -p 6379:6379 -v /tmp/redis/conf:/data --restart=always -d redis redis-server /data/redis.conf