首页 > 其他分享 >Docker_学习记录1

Docker_学习记录1

时间:2024-02-20 22:22:05浏览次数:36  
标签:容器 记录 -- redis 学习 镜像 Docker docker

Docker简介

Docker概述

image

Docker:一次镜像,处处运行 -- 保证运行环境相同
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟

Docker的三要素:镜像(image), 容器(container), 仓库(repository)
镜像:静态的,不可修改
容器:有镜像创建
仓库:存放镜像的地方,docker hub等

Docker运行原理

image

Docker run helloworld实现流程:
image

阿里云镜像仓库:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

卸载Docker,出现无法删除/var/lib/docker的问题:

参考:

  1. https://blog.csdn.net/qq_28284093/article/details/80117367
  2. https://docs.docker.com/engine/install/ubuntu/

image




Docker常用命令

帮助启动类命令

启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
设置开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker总体帮助文档:docker --help
查看docker命令帮助文档:docker 具体命令 -help

镜像命令

docker images

  • 列出本地所有的镜像
  • OPTIONS说明:-a 列出本地主机上的镜像 ;-q:只显示镜像ID

docker search 某个xx镜像名字

  • 网站:https://hub.docker.com
  • docker search [options] image_name
  • OPTIONS说明:
    • --limit:只列出N个镜像
    • docker search --limit 5 redis

docker pull 某个xx镜像名字

  • docker pull image_name [:TAG]
  • 未标注TAG,则下载默认的最新版(:latest)
  • docker pull redis
  • docker pull redis:6.0.8

docker system df:查看镜像/容器/数据卷所占的空间
docker rmi 某个xxx镜像名字/镜像ID

  • remove images
  • 删除多个镜像:docker rmi image1 image2 ……
  • 删除全部镜像:docker rmi -f $(docker images -qa)

面试题:谈谈docker虚悬镜像是什么?

  • 仓库名和标签均为<none>
  • image

容器命令

  1. 新建+启动容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • OPTIONS说明:启动交互式容器(前台命令行)
  • image
  • -it 选项
  • image
  • image
  1. 列出当前正在运行的容器:docker ps [optins]
  • image
  1. 退出容器
  • exit:run进去容器,exit退出,容器停止
  • ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
  1. 启动已停止运行的容器 -- docker start 容器ID或者容器名
  2. 重启容器 -- docker restart 容器ID或者容器名
  3. 停止容器 -- docker stop 容器D或者容器名
  4. 强制停止容器 -- docker kill 容器ID或容器名
  5. 删除已停止的容器 -- docker rm 容器ID或容器名

补充重要概念:

  1. 命令式启动与后台守护运行:
    image

后台模式启动:docker run -d centos
前台模式启动:docker run -it centos

  1. 查看容器日志:docker logs [OPTIONS] CONTAINER

  2. 查看容器内运行的进程:docker top CONTAINER [ps OPTIONS]

  3. 查看容器内部运行细节:docker inspect [OPTIONS] NAME | ID [NAME|ID...]
    image

  4. 重新进入doker容器:docker exec -it 容器ID bashShell

image

不小心关闭ubuntu,未退出;下面重新进入Ubuntu
image

重新进入docker attach容器D
案例演示,用centos或者unbuntu都可以

上述两个区别:

  • attach直接进入容器启动命令的终端,不会启动新的进程用exit退出,会导致容器的停止。(过河拆桥)
  • exec是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。(推荐使用)
  • image
  1. 从容器拷贝文件到主机:docker cp 容器:容器内路径 目的主机路径

image

  1. 导入和导出容器
  • export 导出容器的内容流,作为一个tar归档文件,[对应import命令]
    • docker export 容器ID > tar包路径
    • image
  • import 从tar包中的内容创建一个新的文件系统,再导入为镜像 [对应export]
    • cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
    • image
    • image



Docker镜像

是什么?

定义

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时周要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)

分层的镜像

镜像是分层的
image

UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂我到同一个虚拟文件系统下(unite several directories into a single virtual fileSystem)。Union文件系统是Docker镜像的墨础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系绕,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起米,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像加载原理

image
image

为什么Docker镜像要采用这种分层结构呢

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用
比如说有多个镜像都从相同的base镜像构建而来,那么Docker Host只需在磁盘上保存一份base镜像:同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

重点理解

Docker镜像层都是只读的,容器层是可写的
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
image

Docker镜像commit操作案例

image
image

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

总结

image




本地镜像发布到阿里云

与 Git 相似
image
image

https://cr.console.aliyun.com/repository/cn-guangzhou/yiransz/ubuntu/details

发布到私有库

https://hub.docker.com/
Docker Registry




Docker容器数据卷

docker挂载目录增加权限
--privileged=true

容器目录 -- 映射 -- 主机目录

卷:数据的持久化

docker run-it-privileged:=true-v/宿主机绝对路径目录:/容器内目录 镜像名

image

容器卷案例

  1. 宿主 vs 容器之间映射添加容器卷

    1. 直接命令添加
    2. image
    3. docker run -it --priviledged=true -v /tmp/host_data:/tmp/docker_data --name=u1_ubuntu
    4. host_data:hostin.txt <--> docker_data:hostin.txt
  2. 读写规则映射添加说明

    1. 默认规则:可读可写image
    2. ro: Read-Only
    3. 读写规则限制的是容器
  3. 卷的继承和共享

    1. image
    2. 容器1和容器2共享:docker run -it --privileged=true--volumes-from--name u2 ubuntu
    3. 任何一个容器挂掉,重启后都能够共享数据



Docker常用安装简介

总体步骤

搜索镜像 -- 拉取镜像 -- 查看镜像 -- 启动镜像 -- 停止容器 -- 移除容器
search pull docker images run stop rm

安装Tomcat

运行Tomcat容器【最新版10.1.18】:
image
image

报错404:关闭防火墙,将webapps.dist替换webapps
image
image
image

tomcat增加jdk的版本:8.0.53
image

报错:image
解决方案:(中途关闭了防火墙)重启docker
image
image

安装mysql

docker pull mysql:5.7
ps -ef | grep 3306【保证3306端口未被占用】
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker exec -it  容器ID  /bin/bash

image

mysql实际应用:

解决中文乱码,以及docker容器删除后数据保存问题
使用容器卷(日志log, 数据data, 配置configure)
image

中文乱码

mysql5 中由于编码规则,会出现中文乱码,mysql8 则不会出现。
解决中文乱码问题【修改配置文件】:
容器卷:-v /zzyyuse/mysql/conf:/etc/mysql/conf.d

  1. 在配置文件/yiran/mysql/conf中写入my.cnf文件,如下
    image

  2. 重启mysql,即可解决
    image
    image

  3. 查看字符集编码
    image

docker容器删除后数据保存

删除容器后,里面的数据怎么办?
挂载容器卷到宿主机,重启后会自动同步
image

安装redis

拉取redis:6.0.8,并执行
image
image


如何按照特定的配置文件启动redis?
修改宿主机/app/redis/redis.conf配置文件,由于挂载容器卷,启动redis后,docker中的redis配置也会更新。
【redis-server启动读取/etc/redis/redis.conf配置文件】
image

标签:容器,记录,--,redis,学习,镜像,Docker,docker
From: https://www.cnblogs.com/syr463/p/18022128

相关文章

  • Flask 学习100-Flask-SocketIO 结合 xterm.js 实现网页版Xshell
    前言xterm.js是一个使用TypeScript编写的前端终端组件,可以直接在浏览器中实现一个命令行终端应用。可以实现web-terminal功能,类似于Xshell操作服务器。Flask-SocketIO快速入门与使用基础参考前面这篇https://www.cnblogs.com/yoyoketang/p/18022139前后端交互前端代码......
  • ControNet基础学习
    1.使用背景AI绘画虽然能够利用图生图的方式,生成类似图片风格特征的一种新图片,但是,大体上还是无法精准控制整体图片的细节特征,如果用于自娱自乐的倒也可以,但是在更专业的场景上,精准控制出图成为了AI绘画的一个重大难题。2.基础原理在控制原理上ControNet和LoRA是有很多相似的......
  • 记录一次grpc打包的坑
    GRPC打包的坑今天做的项目需要用到grpc,然后需要打jar包进行引用,打包的时候却失败了报了protocdidnotexitcleanly.Reviewoutputformoreinformation.--grpc-java_out:protoc-gen-grpc-java:Thesystemcannotfindthepathspecified.的相关错误很明显就是路径的问......
  • 组合数学学习笔记
    p3744.打扑克直接递推了。p3745.combination使用卢卡斯定理切掉。longlongc(longlongn,longlongm){ returnf[n]*g[m]*g[n-m]%mod;}longlonglcs(longlongn,longlongm){ if(m==0) return1; returnlcs(n/mod,m/mod)*c(n%mod,m%mod)%mod;}3342.【模......
  • 数论学习笔记
    如题。链接:https://h.hszxoj.com/d/hzoj/training/64ae62d5016fac9fb4da7086?uid=4823336.cf1444A洛谷link小数学题。gxyz上的很好A,但是CF上的数据确实超级大。先判断\(\displaystyleq/p\)是否成立,若不成立则直接cout<<p;否则就要遍历\(q\)的质因数,然后再找对应质......
  • 递归学习笔记
    本文同步发表在洛谷博客我们充分发扬人类智慧:将递推和递归混为一谈在\(dp\)的基础上来学递归然后把递推和\(dp\)混为一谈然后我就发现:™的我\(dp\)没学好!然后去学\(dp\),然后发现我递推没学好,所以四舍五入我递归也学不好,那就不学了!好了让我们步入正题正文......
  • 高斯消元 学习笔记
    \[\Large\text{GaussianElimination}\]数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。——百度百科说实话,我不相信这是高斯发明的。感觉像是个小学生都学过的加减消元法。它的时间复杂度与方程个数、未知数个数有关,一般来讲,是\(O......
  • 基于yolov2深度学习网络的血细胞检测算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本MATLAB2022a 3.算法理论概述         血细胞检测是医学图像处理领域的重要任务之一,对于疾病的诊断和治疗具有重要意义。近年来,深度学习在医学图像处理领域取得了显著成果,尤其是目标检测算法在血细胞检测方面表现出......
  • 记录--源码视角,Vue3为什么推荐使用ref而不是reactive
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助ref 和 reactive 是Vue3中实现响应式数据的核心API。ref 用于包装基本数据类型,而reactive用于处理对象和数组。尽管 reactive 似乎更适合处理对象,但 Vue3官方文档更推荐使用 ref。 我的想法,ref就......
  • ADB学习记录
        ADB安装   1、adb下载,下载成功后,在本地解压;      Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip   2、配置环境变量:把解压路径放到系统变量里去(Path);         3、按ctrl+R,输入cm......