docker
docker
docker的基本组成
- 镜像
- 容器
- 仓库
安装docker
- 检查linux版本
- 卸载老版本linux
- 安装gcc【yum install gcc / yum install gcc-c++】
run干了什么
Docker命令
帮助启动类命令
镜像命令
-
查看docker镜像 ----------- docker images
-
查找某个镜像----------------------docker search hello-world
- 拉取镜像-------------docker pull
- 查看镜像/容器/容器卷所占用的空间-------docker system df
- 删除镜像----------docker rmi 镜像名字/ID
面试题
什么是虚悬镜像
容器命令
环境
拉去ubuntu的镜像
- 新建+启动容器--------------------------------docker run 选项 镜像 参数
- 罗列出所有正在运行的docker容器-----------docker ps 选项
- 退出容器------------------------exit(退出即容器停止)/ctrl+p+q(退出容器不停止)
- 启动已经停止运行的容器-----------------docker start 容器ID或者容器名
- 重启容器------------------------docker restart 容器ID或者容器名
- 停止容器------------------------docker stop 容器ID或者容器名
- 强制停止容器------------------docker kill 容器ID或容器名
- 删除已停止的容器 -----------docker rm 容器ID/容器名 dockerrm -f
- 启动守护式容器---------------docker run -d 镜像名(有些只能用交互式)
- 查看容器日志------------------docker logs 容器ID
- 查看容器内运行的进程------docker top 容器ID
- 查看正在运行的容器并以命令行交互-----docker inspect 容器ID
- 重新进入交互-------docker exec -it 容器ID bashShell
容器文件------->主机
- 备份
- 只备份容器内某文件 docker cp 容器ID:文件目录 主机目录
将容器导出为tar
docker export 容器Id > 名字
将tar导入成镜像
cat abc.tar | docker import - 用户名/镜像名:镜像版本
镜像的分层概念
docker commit提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息"-a="作者" 容器ID要创建的目标镜像名:[标签名]
docker私有库
如何拥有自己的私服
- docker pull registry-------拉去镜像
- docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry-privileged=true registry
案例
在原装ubuntu上安装ifconfig命令推送到私服
- 启动ubuntu容器
- 更新
- 安装 net-tools
- 发现ifconfig安装完成
- commint生成镜像
- 运行容器发现存在ifconfig命令
- 查看私服库有哪些镜像
- 将镜像修改为复合私服规范的Tag
- clone一份镜像用于做规范Tag
- 修改配置文件使私服库允许使用http
- 推送到私服
容器卷
当开启这个后,容器内的root才是真正的root,否则知识一个普通用户
容器卷的作用
容器卷是什么
- 使用案例
容器卷能干吗
容器卷与主机互通互联
-
命令添加 见上面
-
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
-
在容器内创建文件回到主机查看是否存在,在主机创建文件回到容器查看是否存在
-
-
查询容器内部-----docker inspect 容器id
-
思考:如果docker容器挂掉了在宿主机进行操作,重启docker容器后,容器能看到修改吗
答案:docker容器重启后任然可以获得主机的操作
容器卷ro和rw读写规则
默认就是rw同上面
目的:将容器内部改为只读----->read only
容器卷之间的继承
命令
使用后:在容器2内增加文件,在容器1以及主机都会拥有
思考1:如果容器1停掉,容器2会受影响吗?
不会,容器2只是继承了容器1的挂载路径,容器2和容器1是解耦的
思考2:如果容器1重新启动,能读到容器2创建的文件吗?
可以读到容器2创建的文件
docker上安装软件
安装Tomcat
-
docker pull tomcat
-
-
启动成功后查看能否访问
- 原因,新版本首页文件不在默认路径
- 解决办法:
- 进入容器:docker exec -it tomcat容器ID /bin/bash
- 将路径下的webapps删除掉----rm -f webapps
- 将webapps.dist修改为webapps
- 重新访问8080
使用免修版本的tomcat
- docker pull billygoo/tomcat8-jdk8
- 启动该版本
安装mysql(简单版)
- docker pull mysql:5.7
- docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
连接navicat
插入数据失败
原因:docker上默认字符编码隐患
存在问题:中文乱码问题,没有做容器卷备份
安装mysql(实战版)
-
命令:docker run -d -p 3306:3306 --privileged=true -v /yhduse/mysql/log:/var/log/mysql -v /yhduse/mysql/data:/var/lib/mysql -v /yhduse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
-
-
新建my.cnf---->通过容器卷同步给mysql容器实例解决中文乱码问题
-
创建my.cnf
-
[root@localhost conf]# vim my.cnf
-
[client] default_character-set=utf8 [mysqld] collation_server=utf8_general_ci character_set_server=utf8
-
重启mysql容器实例
-
用navicat插入中文发现成功--解决乱码问题
安装Redis
-
启动redis----->docker run -d -p 6379:6379 redis:6.0.8
-
启动redis命令----->
-
docker run -p 3306:3306 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
-
这边踩到坑,配置文件有问题------>我直接赋值文件过去
-
解决问题
-
问题:如何证明使用的是自己的配置文件
-
证明:在主机修改配置问津数据库个数,重启容器进去使用select 15
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类