栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习) 1、前言

狂神的 Docker 课程:https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0

2、Docker 概述 2.1、Docker 为什么出现?

传统:开发jar,运维来做!

现在:开发打包部署上线,一套流程做完!

安卓流程:java — apk —发布(应用商店)一 张三使用apk一安装即可用!

docker流程: java-jar(环境) — 打包项目帯上环境(镜像) — ( Docker仓库:商店)-----

Docker给以上的问题,提出了解决方案!

Docker 的思想来自于集装箱!

JRE – 多个应用(端口冲突) – 原来都是交叉的!

隔离:Docker核心思想!打包装箱!每个箱子是互相隔离的。

Docker通过隔离机制,可以将服务器利用到极致!

2.2、Docker 为什么这么活?

原因:十分的轻巧!

在容器技术出来之前,我们都是使用虚拟机技术!

虚拟机:在window中装一个VMware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!

虚拟机也属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

  • vm : linux centos 原生镜像(一个电脑!) 隔离、需要开启多个虚拟机! 几个G 几分钟

  • docker: 隔离,镜像(最核心的环境 4m + jdk + mysql)十分的小巧,运行镜像就可以了!小巧!

几个M 秒级启动!

Docker基于Go语言开发的!开源项目!

docker官网:https://www.docker.com/

文档:https://docs.docker.com/

仓库:https://hub.docker.com/

2.3、Docker 能做什么?

比较 Docker 和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一个硬盘,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了。
  • 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
3.1、Docker 安装(Ubuntu 安装) 3.2、Docker 的组成

  • 镜像(image)

    docker 镜像就好比是一个目标,可以通过这个目标来创建容器服务,tomcat 镜像 = => run = =容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中

  • 容器(container)

    Docker 利用容器技术,独立运行创建一个或者一组应用,通过镜像创建的,启动、停止、删除、基本命令等

  • 仓库(repository)

    仓库就是存放镜像的地方,这里跟 maven 的仓库类似,也分为私有仓库和公有仓库

3.3、安装 Docker 3.3.1、环境准备

我的Linux 内核是 5.x 的,Ubuntu 是 20x

你可以根据帮助文档进行安装也可以安装我的方式安装

帮助文档:https://docs.docker.com/engine/install/

说明:

#安装命令  使用 aliyun 安装速度更快
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#说明如果显示下面的错误需要你去安装 curl 指令
sudo apt install curl

安装成功

输入docker version

测试一下

输入命令 docker run hello-world

查看镜像 docker images

配置阿里云镜像加速(首先需要的是你有阿里云账号且实名认证)

自己注册个人版后找到镜像加速(选择不同的版本,老胡用的是 Ubuntu)

说明:

  • 第一步选择你的 Linux 版本

  • 第二步创建 daemon.json 文件 (vim /etc/docker/daemon.json)

  • 第三步在文件中添加你的阿里云镜像地址

  • 第四步输入下面两条命令重载

    sudo systemctl daemon-reload

    sudo systemctl restart docker

ok 阿里云镜像加速配置成功!

3.3.2、底层原理

Docker 是怎么工作的?

Docker 是一个 client-server 结构的系统,Docker 的守护线程运行在主机上。通过 socket 从客户端访问。Docker-server 接收到 Docker-client 的指令,就会执行这个命令。

为什么 Docker 比 VM 快

  1. Docker 有着比虚拟机更少的抽象层,由于 Docker 不需要 hypervisor 实现硬件资源虚拟机化,运行在 Docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU、内存利用率上 Docker 将会在效率上有明显优势。
  2. Docker 利用的是宿主机的内核,而不需要 Guest OS
    • GuestOS:vm 里的系统
    • HostOS:物理机里的系统

因此,当新建一个容器时,Docker 不需要和虚拟机一样重新加载一个操作系统内核。然后避免引导、加载操作系统内核是个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载 GuestOS,这个新建过程是分钟级别的。而 Docker 由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个 Docker 容器只需要几秒钟的时间。

4、Docker 的常用命令 4、1帮助命令
  • docker version:(显示版本信息)

  • docker info:(显示 docker 的系统信息,包括镜像和容器的数量)

  • docker 命令 --help:(帮助命令)

  • 帮助文档地址

    https://docs.docker.com/engine/reference/commandline/build/

4.2、镜像命令
  • docker images:(查看所有本地主机上的镜像,可以使用 docker image ls 代替)

  • docker search 镜像:(搜索镜像)

  • docker push 镜像:[版本号]:(下载镜像方式一:可以指定版本,若不指定就是最新版本)

    问题:

    因为我的是mac 的m1 在 docker 上没有适配的mysql(因为 m1 是 arm64 架构的所以这时候我们要使用其他的命令去拉去)

  • docker pull mysql/mysql-server:latest(m1 Mac)

    注意:好像是只能使用 latest,我换了 5 但是告诉我拉取失败,你们可以试一试来告诉老胡

    分层下载:就是说,当你需要更新 mysql 版本的时候,它会根据你之前下载的版本与现在版本进行比对,对于相同的是不需要下载的,直接拿来使用,节省了空间

  • docker rmi 镜像 id :(删除镜像)

    说明:

    docker rmi 删除镜像 :(与 docker image rm 相似)

    docker rmi -f $(docker images -aq) :(删除全部的镜像)

4.3、新建容器并启动
  • **docker run [可选参数] image **:(run 也可以写为 container 是一样的)

    • 参数说明

      –name=“name”:(容器名字 tomcat1 tomcat2 用来区分容器)

      -d:(后台方式运行)

      -it:(使用交互方式运行,进入容器查看内容)

      -p:(指定容器的端口 -p 8080(宿主机):8080(容器))

      ​ -p ip:(主机端口:容器端口)

      ​ -p 主机端口:容器端口(常用)

      ​ -p 容器端口

      -P:(大写的 P,随机指定端口)

  • docker ps [可选参数]:(列出当前正在运行的容器)

    • -a:(列出所有执行过的容器)

    • -n:(列出 n 个最近展示的)

    • **注意:**若你想容器退出不停止使用(ctrl +P +Q )

  • docker start 容器 id:(删除指定的容器,不能删除正在运行的容器,如果强制删除 rm -rf)

  • docker restart 容器 id:(重启容器)

  • docker stop 容器 id:(停止当前正在运行的容器)

  • docker kill 容器 id:(强制停止当前容器)

4.4、常用其他命令
  • docker run -d 镜像名:(后台启动命令)

  • docker logs [可选参数]:(查看日志,可以通过可选参数来进行日志的选择性输出)

  • docker top 容器 id:(查看容器中进程信息)

  • docker inspect 容器 id:(查看镜像的元数据)

  • docker exec -it 容器 id bashshell:(方式一:进入容器,这种方式是进入当前容器后开启一个新的终端。可以在里面操作)

  • docker attach 容器 id:(方式二:进入容器,这种方式是进入容器中正在执行的终端)

  • docker cp 容器 id:路径/文件 /当前 Linux 路径:(从容器中拷贝文件到 Linux 中)

5、小结 5.1、docker 所有命令

5.2、Docker 命令帮助文档
命令介绍
attach当前 shell 下 attach 连接指定运行的镜像
build通过 dockerfile 定制镜像
commit提交当前容器为新的镜像
cp拷贝文件
create创建一个新的容器
diff查看 docker 容器的变化
events从服务获取容器实时时间
exec在运行中的容器上运行命令
export导出容器文件系统作为一个 tar 归档文件(对应 import)
history展示一个镜像形成的历史
images列出系统当前的镜像
import从 tar 包中导入内容创建一个文件系统镜像
info显示全系统信息
inspect查看容器详细信息
killkill 指定docker 容器
load从一个 tar 包或标准输入中加载一个镜像
login登录
logout登出
log s日志
ps当前运行的容器列表
pull从仓库拉取镜像
push上传一个镜像到仓库中
rename重命名一个容器
restart重启一个或多个容器
rm删除一个或多个容器
rmi删除一个或多个镜像
run运行一个容器
save保存一个或多个镜像为 tar 包
search搜索 docker 仓库中存在的镜像
start启动一个或多个容器
stats显示容器资源使用统计信息的实时流
stop停止一个或多个正在运行的容器
tag创建引用源图像的标记目标图像
top展示一个容器中正在运行的进程
unpause取消一个或多个容器中的所有进程
update更新一个或多个容器配置
version展示docker 版本信息
wait阻止停止一个或多个容器,然后打印其输出
5.3、练习 5.3.1、使用 Docker 创建 Nginx
  • 拉取 nginx

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsh9mrxQ-1635711562527)(https://gitee.com/HJIC/upload_image3/raw/master/img/image-20211106181531639.png)]

  • curl localhost:3344:(是否能够访问到 nginx)

  • 思考问题:

    我们每次改动 nginx 配置文件,都需要进入容器内部?十分的麻烦,要是可以在容器外部提供一个映射文件,达到在容器修改文件名,容器内部就可以自动修改?数据卷

5.3.2、docker 安装 tomcat

端口暴露示意图

  • docker run it --rm tomcat:8:(官方使用,rm 是删除的意思,即一般是用来测试用完就删除)

  • docker pull tomcat:(拉取 最新版tomcat)

  • docker run -d -p 8080:8080 --name tomcat01 tomcat:(启动运行)

  • 为什么无法访问:

    这是一个阉割版的,你进入容器中会发现少了 webapps,即阿里云镜像为了保证最小镜像,将不会要的都剔除了(为了保证最小可运行环境!)

思考问题:

我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,能够自动同步就好了!

5.3.3、docker 部署 es+kibana
  • es 暴露的端口很多
  • es 十分耗内存
  • es 的数据一般需要放置到安全目录!挂载
  • –net somenetwork ? 网络配置

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” elasticsearch:7.14.1

  • docker run -d --name elasticsearch5 -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” elasticsearch:7.14.1:(注意我的版本是 m1 的所以最好的是去 docker 官网找适合你的版本)

  • curl localhost:9200:(查看是否启动成功)

  • 注意 es 是十分耗内存的,甚至出现了占用 1 个 G 多的内存,使用 docker stats 容器 id

  • docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.14.1:(添加参数解决占 CPU 过高问题:ES_JAVA_OPTS="-Xms64m -Xmx512m")

  • 思考:如何使用 kibana 连接es

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/450592.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号