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 的组成

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第1张图片

  • 镜像(image)

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

  • 容器(container)

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

  • 仓库(repository)

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

3.3、安装 Docker

3.3.1、环境准备

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

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第2张图片

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

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

说明:

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

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第3张图片

安装成功

输入docker version

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第4张图片

测试一下

输入命令 docker run hello-world

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第5张图片

查看镜像 docker images

image-20211106014315332

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

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第6张图片

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

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第7张图片

说明:

  • 第一步选择你的 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学习从零开始到精通一(跟随狂神 Docker 课程学习)_第8张图片

为什么 Docker 比 VM 快

  1. Docker 有着比虚拟机更少的抽象层,由于 Docker 不需要 hypervisor 实现硬件资源虚拟机化,运行在 Docker 容器上的程序直接使用的都是实际物理机的硬件资源。因此在 CPU、内存利用率上 Docker 将会在效率上有明显优势。
  2. Docker 利用的是宿主机的内核,而不需要 Guest OS
    • GuestOS:vm 里的系统
    • HostOS:物理机里的系统
    • Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第9张图片

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

4、Docker 的常用命令

4、1帮助命令

  • docker version:(显示版本信息)

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第10张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第11张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第12张图片

  • 帮助文档地址

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

4.2、镜像命令

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第13张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第14张图片

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

    问题:image-20211106032730413

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

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第15张图片

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

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

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第16张图片

    说明:

    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学习从零开始到精通一(跟随狂神 Docker 课程学习)_第17张图片

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

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

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

      Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第18张图片

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

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

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

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

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

4.4、常用其他命令

  • docker run -d 镜像名:(后台启动命令)

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第19张图片

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第20张图片

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

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第21张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第22张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第23张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第24张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第25张图片

5、小结

5.1、docker 所有命令

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第26张图片

5.2、Docker 命令帮助文档

命令 介绍
attach 当前 shell 下 attach 连接指定运行的镜像
build 通过 dockerfile 定制镜像
commit 提交当前容器为新的镜像
cp 拷贝文件
create 创建一个新的容器
diff 查看 docker 容器的变化
events 从服务获取容器实时时间
exec 在运行中的容器上运行命令
export 导出容器文件系统作为一个 tar 归档文件(对应 import)
history 展示一个镜像形成的历史
images 列出系统当前的镜像
import 从 tar 包中导入内容创建一个文件系统镜像
info 显示全系统信息
inspect 查看容器详细信息
kill kill 指定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)

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第27张图片

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第28张图片

  • 思考问题:

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

5.3.2、docker 安装 tomcat

端口暴露示意图

Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第29张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第30张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第31张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第32张图片

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第33张图片

  • 为什么无法访问:

    这是一个阉割版的,你进入容器中会发现少了 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 官网找适合你的版本)

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第34张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第35张图片

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

    image-20211101035809060

  • 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")

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第36张图片

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

    Docker学习从零开始到精通一(跟随狂神 Docker 课程学习)_第37张图片

你可能感兴趣的:(Docker,从零开始到精通,Linux,从入门到精通,docker,容器,运维,ubuntu)