当前位置: 首页 > article >正文

Docker 学习

Docker 学习

Docker 概念

img

Docker 安装

一般是在服务器里

img

Docker阿里云镜像加速

img

配置主要是Linux命令

Docker命令大纲及帮助文档的使用

docker帮助文档

查看docker命令

docker --help

查看某个命令,例如ps的详细文档

docker ps --help

也可查阅 [docker官方帮助手册](docker images | Docker Docs)

镜像和容器

  1. 搜索镜像

容器需要镜像来创建,要创建容器首先要搜索镜像

docker search + 镜像名称 可以搜索,但一般不直观,可以通过科学上网访问docker hub,搜索

  1. 下载镜像

img

docker pull (镜像仓库地址默认是docker hub可以不指定) 镜像名 (标签不指定默认是latest,docker hub网站的tags有对应版本命令可参考)
  1. 列出镜像信息

img

探索告诉我们:遇到不会的,需要多看看帮助文档

  1. 列出容器信息

img

容器 exit 的原因是没有前台在运行

  1. 创建并运行容器

img

  • 一般多用后台运行,不会退出;
  • 默认运行方式是会执行DockerFile最后的CMD命令,容易自动退出,一般不用;
  • 交互式运行多使用bash,用于进入容器内部学习和调试
  1. 删除容器

img

  1. 进入容器执行命令

img

  1. 查看容器日志

img

  1. 容器和宿主机之间的文件拷贝

img

  1. 停止和运行容器
docker stop [容器ID/容器名...]
docker start [容器ID/容器名...]

run 命令详解

前情回顾

docker run -d 镜像名 // 后台创建并运行容器
docker run -it 容器名 bash // 交互式创建并运行容器

  1. 发布端口

    容器需要开放端口,和宿主机端口映射,使得通过访问宿主机端口从而访问到容器端口

docker run -p 宿主机端口:容器端口 镜像名

img

  1. 数据卷基础

问题一:当容器被删除后,它的数据也会被删除,无法持久化保存

问题二:宿主机修改了文件,容器内数据不能共享(自动同步)

img

img

  1. 设置环境变量

方便不同容器个性化设置变量,比如设置容器密码

img

  1. 容器命名

img

  1. 设置重启策略

img

  1. 其他

img

常见docker命令

docker --help  // 查看docker命令
docker ps --help  // 查看某个命令,例如ps的详细文档

docker pull 镜像名[:tags]   // 下载镜像,版本tags可不填,默认最新

docker images  // 列出所有镜像信息(不包括隐藏镜像)
docker images -q  // 只列出镜像的镜像id(不包括隐藏镜像)
docker images -aq 	// 只列出所有镜像的镜像id
-f 过滤,具体使用看docker帮助文档

docker ps  // 默认显示正在运行的容器信息
docker ps -a  // 所有容器信息

docker run -d 镜像名  // 后台创建并运行容器
docker run -it 容器名 bash // 交互式创建并运行容器

docker rm [容器ID/容器名...]	// 删除容器,但无法删除正在运行的容器,会报错,...表示可跟多个
docker rm -f [容器ID/容器名...] // 强制删除,正在运行的容器就会被删除
$()命令替换,如docker rm -f $(docker ps -aq) // 删除所有容器

docker exec -it 容器id bash // 进入容器交互式执行命令

docker cp /宿主机/xx.文件 容器id:/容器/xx.文件  // 拷贝文件,将宿主机文件拷贝到容器中
docker cp 容器id:/容器/xx.文件 /宿主机/xx.文件  // 反过来

docker stop [容器ID/容器名...]  // 停止(多个)容器
docker start [容器ID/容器名...] // 运行容器

run 命令详解
docker run -p 宿主机端口:容器端口 镜像名  // 发布容器端口,和宿主机端口映射

docker run -v 宿主机目录:容器目录[:读写权限ro/rw] 镜像名 // 挂载数据卷,实现宿主机和容器数据共享和持久化
docker run -v 数据卷别名:容器目录[:读写权限ro/rw] 镜像名 // 不需要写宿主机目录,docker会分配,若数据卷不存在会创建
docker volume ls // 列出所有数据卷
docker volume inspect 数据卷名 // 查看数据卷详情
docker volume create 数据卷名 // 创建数据卷,可通过docker volume inspect查看数据卷位置
docker volume rm 数据卷名 // 删除数据卷,正在被使用的数据卷无法-f强制删除,可以先删除容器在删除数据卷

docker run -e 变量名=变量值 镜像名 // 设置环境变量,具体变量名看DockerHub文档
docker run --name 重命名 镜像名 // 容器命名
docker run --restart 重启策略(默认no/always/on-failure[:max-retries]/unless-stopped) 镜像名 // 设置重启策略
docker 网络
docker network create 网络名 // 创建网络
docker network ls // 列出网络
docker run --network 网络名 镜像名 // 加入网络 法一:在创建容器时加入
docker network connect 网络名 容器名/容器ID // 加入网络 法二:创建后加入
docker network inspect 网络名/网络ID // 查看网络详情
docker network rm 网络名/网络ID // 删除网络

相关知识:

curl是一种快速测试网络服务和API的好方法。它很容易使用,速度快,而且可以用于HTTP和HTTPS连接

curl https://www.tutorialspoint.com

whereis 名称,寻找路径

echo 用于向终端发送文本或变量,还可以跟>> 或 > 添加或覆盖文件中的文本。

[echo详解]([Linux中的echo命令|极客教程 (geek-docs.com)](https://geek-docs.com/linux/linux-basic/t_the-echo-command-in-linux.html#:~:text=Linux中的echo命令 1 简介 echo 命令是Linux中的一个基本命令,用于向终端发送文本或变量。 它是最基本和最重要的Linux命令之一,掌握它对初学者来说是非常必要的,可以更容易地浏览命令行。 … 2,命令还可以与输入和输出重定向运算符结合使用。 大于(>`)运算符用于将命令的输出重定向到一个文件。 … 5 总结 echo 命令是一个强大而通用的命令,是所有Linux用户必须掌握的。 ))

数据卷是被设计用来持久化数据的,它的生命周期独立于容器, Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。

Docker 网络

docker会给每个容器分配IP地址,可以通过docker inspect 查看,但是一旦删除容器重新创建,IP地址会改变,写死不方便,可以通过创建网络中的名称代替IP地址;同时,为使得容器之间能够通信,可以将几个容器加入到网络中

img

Docker部署应用

docker部署mysql

img

docker部署redis

img

redis aof

docker部署后端应用

img

img img

镜像分层

不同镜像是一点点变更的

img

DockerFile学习

概述

应用场景:DockerFile 可以自定义镜像,简便部署,之前的镜像不能很好满足需求

基本语法:

  • 不区分大小写,但习惯大写
  • 基本以 FROM 指令开头
  • #开头代表注释

入门案例

img

常用指令

FROM 和 CMD

img

ENV

img

WORKDIR

img

RUN

img
应用
img

ADD

img

docker build 遇到报错做法:1. 可以通过报错发现问题 2. 可以先#注释掉报错那一行再运行docker build 然后docker exec进入容器内部排查问题

EXPOSE

使用EXPOSE 只是声明端口,告诉使用者需要开放哪个端口,最终还是需要-p 开放端口

img

应用

img

img

COPY

img

ENTRYPOINT

和 COPY 类似,不同点是不能被覆盖,比如,执行docker logs 时,CMD的命令就会被bash覆盖,而ENTRYPOINT就不能会报错:invalid option “bash”

img

部署应用

后端:

img

img

前端:

img

实际公司开发打包流程参考

img

推送镜像到镜像仓库

img

DockerCompose

Services top-level elements | Docker Docs

img

img

img

其他元素和用法可参考文档 Services top-level elements | Docker Docs

项目部署案例

将docker run 命令 翻译成 YAML 文件的内容

img img img

docker run --name 在YAML中不需要,因为有服务名称就不需要定义容器名称

传统虚拟机 | Docker | K8s 的区别

物理服务器:实体电脑,机房电脑等,一台物理服务器可以分割成多台虚拟机,

VPS(Virtual Private Server)虚拟专有服务器:每个虚拟机都有独立的操作系统、CPU、内存、存储、网络,这样的虚拟机就叫VPS

VPS 不能自主升降级和动态调整,而ECS可以,VPS加入这样的功能就是ECS,比如可以将1核1g的服务器升级成2核2g

ECS(Elastic Compute Service)弹性计算服务器

Docker容器:img

总结:物理服务器上跑ECS,ECS上跑Docker容器,多个Docker共享ECS实例操作内核

Namespace:使得像一个操作系统,Cgroup限制使用资源

docker:

docker架构原理:

docker的命令基础 docker容器和虚拟机有什么区别:

docker compose是什么:

docker swarm是什么:

docker compose和docker swarm的区别是什么:

docker和kubernetes(k8s)的关系是什么:

docker swarm和kubernetes(k8s)的差异是什么:


http://www.kler.cn/a/444312.html

相关文章:

  • 合并比对学习资料
  • javaScriptBOM
  • ChatGPT重大更新:新增实时搜索和高级语音
  • Hive内部表和外部表的区别
  • 【服务器】MyBatis是如何在java中使用并进行分页的?
  • Android Java Ubuntu系统如何编译出 libopencv_java4.so
  • electron打包linux环境
  • 【操作系统】每日 3 题(六十八)
  • Marp 教程:如何在 VSCode 中引入自定义样式和主题
  • 量子芯片在新医疗领域的应用研究展望
  • # Oracle 深入学习 Part 11: Managing Tables(管理表)
  • 【模型压缩】原理及实例
  • SQL 外联结与全联结的使用详解
  • 常见异构程序设计语言
  • hpe服务器更新阵列卡firmware
  • Tomcat快速入门(Java环境介绍+Tomcat快速安装+Tomcat配置文件+Tomcat配置虚拟主机+Tomcat管理界面)
  • Linux实现两台服务器之间ssh连接
  • 【漫话机器学习系列】013.贝叶斯误差(Bayes Error)
  • C++小细节笔记
  • 详细指南:在Ubuntu 20.04 ROS 1环境下设置和使用OpenNI2 SDK
  • 3.8 路由选择器协议
  • 记一次dockerfile中使用环境变量无效的解决方式
  • RTU 通信模块赋能智慧路灯远程开关管理,点亮智慧城市节能增效
  • C/S软件授权注册系统(Winform+WebApi+.NET8+EFCore版)
  • javascript页面设计案例【使用HTML、CSS和JavaScript创建一个基本的互动网页】
  • IEC101/104中的监视点与控制点