docker

docker

docker的基本组成

  • 镜像
  • 容器
  • 仓库

image-20230217143759247

image-20230217143941461

image-20230217144348083

安装docker

  • 检查linux版本
  • 卸载老版本linux
  • 安装gcc【yum install gcc / yum install gcc-c++】

run干了什么

image-20230217164133089

image-20230217165131547

Docker命令

帮助启动类命令

image-20230217165411090

镜像命令

  • 查看docker镜像 ----------- docker images

    image-20230217190249968

  • 查找某个镜像----------------------docker search hello-world

image-20230217190643643

  • 拉取镜像-------------docker pull

image-20230217193623728

  • 查看镜像/容器/容器卷所占用的空间-------docker system df
  • image-20230219101715434

  • 删除镜像----------docker rmi 镜像名字/ID

面试题

什么是虚悬镜像

image-20230217195827302

容器命令

环境

拉去ubuntu的镜像

image-20230219101834044

  • 新建+启动容器--------------------------------docker run 选项 镜像 参数

image-20230219102138094

image-20230219102648407

image-20230219102805559

  • 罗列出所有正在运行的docker容器-----------docker ps 选项

image-20230219103639947

image-20230219103216481

  • 退出容器------------------------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

容器文件------->主机

image-20230219121001122

  • 备份
  1. 只备份容器内某文件 docker cp 容器ID:文件目录 主机目录

image-20230219192358546

将容器导出为tar

docker export 容器Id > 名字

image-20230219192747035

将tar导入成镜像

cat abc.tar | docker import - 用户名/镜像名:镜像版本

image-20230219193624179

镜像的分层概念

image-20230219194927931

image-20230219195050602

image-20230219195153369

image-20230219195300104

image-20230219195737825

image-20230219200005143

docker commit提交容器副本使之成为一个新的镜像

docker commit -m="提交的描述信息"-a="作者" 容器ID要创建的目标镜像名:[标签名]

image-20230219201214238

docker私有库

image-20230221205311878

如何拥有自己的私服

  • docker pull registry-------拉去镜像
  • docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry-privileged=true registry
  • image-20230221210136988

image-20230221210406744

案例

在原装ubuntu上安装ifconfig命令推送到私服

  • 启动ubuntu容器

image-20230221210918810

  • 更新
  • image-20230221211220549
  • 安装 net-tools
  • image-20230221211402069
  • 发现ifconfig安装完成
  • image-20230221211445508
  • commint生成镜像
  • image-20230221211816310
  • 运行容器发现存在ifconfig命令
  • image-20230221212153429
  • 查看私服库有哪些镜像
  • image-20230221212507065
  • 将镜像修改为复合私服规范的Tag
  • image-20230221212625483
  • clone一份镜像用于做规范Tag
  • image-20230221212826957
  • 修改配置文件使私服库允许使用http
  • image-20230221213721659
  • 推送到私服
  • image-20230221225639148

容器卷

image-20230223192929511

当开启这个后,容器内的root才是真正的root,否则知识一个普通用户

容器卷的作用

image-20230223193812339

容器卷是什么

image-20230223194007375

  • 使用案例
  • image-20230223194128970

容器卷能干吗

image-20230223194248195

容器卷与主机互通互联

  • 命令添加 见上面

  • docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
    
    
  • 在容器内创建文件回到主机查看是否存在,在主机创建文件回到容器查看是否存在

  • image-20230223195912294

  • 查询容器内部-----docker inspect 容器id

  • image-20230223223459599

思考:如果docker容器挂掉了在宿主机进行操作,重启docker容器后,容器能看到修改吗

答案:docker容器重启后任然可以获得主机的操作

容器卷ro和rw读写规则

image-20230223230920499

默认就是rw同上面

目的:将容器内部改为只读----->read only

image-20230223231041881

容器卷之间的继承

命令

image-20230223231805041

使用后:在容器2内增加文件,在容器1以及主机都会拥有

思考1:如果容器1停掉,容器2会受影响吗?

不会,容器2只是继承了容器1的挂载路径,容器2和容器1是解耦的

思考2:如果容器1重新启动,能读到容器2创建的文件吗?

可以读到容器2创建的文件

docker上安装软件

安装Tomcat

  • docker pull tomcat

  • image-20230224101019697

  • 启动成功后查看能否访问

image-20230224101053870

  • 原因,新版本首页文件不在默认路径
  • 解决办法:
  • 进入容器:docker exec -it tomcat容器ID /bin/bash
  • 将路径下的webapps删除掉----rm -f webapps
  • 将webapps.dist修改为webapps
  • 重新访问8080
  • image-20230224101953651

使用免修版本的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
  • image-20230224104227183

连接navicat

image-20230224104440811

插入数据失败

原因:docker上默认字符编码隐患

image-20230224104728862

存在问题:中文乱码问题,没有做容器卷备份

安装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

  • image-20230224110438723

  • 新建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

  • image-20230224145516437

posted @   我是一个大废物  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示