docker学习笔记——狂神说视频学习笔记

news2024/11/24 3:14:11

Ubuntu上docker安装

UBUNTU 20.04 LTS 安装DOCKER看高博主的博文,一键复制命令安装即可。

docker命令

docker version查看你docker版本信息
在这里插入图片描述
docker info显示docker系统级别的信息
在这里插入图片描述
docker --helpdocker命令查询

在这里插入图片描述
docker docs的referrence介绍了docker的详细命令

在这里插入图片描述

镜像操作

docker images镜像命令

docker search搜索镜像

docker pull下载镜像

docker pull [镜像名或Id][:tag]下载指定镜像

镜像是一种分层的结构,是一层一层构建的,镜像之间有明显的层次结构,不同镜像之间累加完成共有的任务,镜像的叠加是由顺序的。


例如使用docker引擎构建一个tomcat环境,需要先构建ubuntu或者centos镜像,在再该镜像上构建jdk环境,再构建tomcat环境。构建mysql也是如此,实际上docker镜像的层次分化的更细,从下载的过程也能看出来,是层次下载的。

在这里插入图片描述
先下载了mysql最新版,然后再下载mysql5.7版,之前的镜像下载好了无需再下载,只需要下载mysql5.7的部分即可。

docker rmi 删除镜像

容器命令

下载完镜像后需要根据镜像配置自定义的容器,用于运行定制化的服务,基于镜像构建容器的命令是docker run

该命令参数较多比较复杂,请移步官网查看。

docker log查看容器内部日志

docker top查看容器内部镜像进程

docker exec在正在运行的容器操作命令

docker attach连接后台运行的docker容器并进入。

docker cp克隆容器数据到主机

在这里插入图片描述

镜像阉割

有时候构建一个mysql镜像,进去linux底层发现好多命令都被阉割了,仅支持运行服务的最小内核,该镜像仅当部署使用。

数据同步

docker是一个相对封闭的空间,需要通过端口映射来实现访问,通过docker部署引用必然需要将文件上传到docker内部,然而docker只是主机上的一个服务,显然不存在文件上传到容器内部一说。

在docker中存在数据卷的概念,也就是docker服务的专属文件夹,docker服务的数据使用该文件夹的内容,该文件夹和docker内部的数据同步修改。简单来说就是为docker服务配置一个专属目录,docker服务所使用和产生的数据都会保存于此。

docker run -v [主机目录:容器目录]命令实现。

需要注意的是只能挂在文件夹,不能挂在文件,因此如果需要挂在文件夹下若干文件中的其中一个是需要提前在主机上新建文件。

-v [主机文件夹]:[容器文件或文件夹]主机只能是文件夹,容器是文件时就会同步到主机文件夹下,是文件夹是会同步两个文件夹。

在这里插入图片描述

# 不然会报错如下
docker: Error response from daemon: failed to create task for container: failed to create 
shim task: OCI runtime create failed: runc create failed: unable to start container 
process: error during container init: error mounting "/home/docker-volumes/nginx/conf" to 
rootfs at "/etc/nginx/nginx.conf": mount /home/docker-
volumes/nginx/conf:/etc/nginx/nginx.conf (via /proc/self/fd/6), flags: 0x5000: not a 
directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check
 if the specified host path exists and is the expected type.

还有情况是路径不对主机路径不对,如下

在这里插入图片描述
映射路径为/home/docker-volumes但是实际却是/home/xwh

由于nginx.conf是文件,其他两个都是目录,所以需要现在目录下新建文件
在这里插入图片描述

docker run -id --name nginx-proxy -p 80:80 
-v /home/xwh/docker-volumes/nginx/html:/usr/share/nginx/html 
-v /home/xwh/docker-volumes/nginx/nginx.conf:/etc/nginx/nginx.conf 
-v /home/xwh/docker-volumes/nginx/conf.d:/etc/nginx/conf.d  
nginx

这个命令本身没有问题,但是如果没有新建文件就会报错,conf.d和html都是文件夹,nginx.conf是文件。
在这里插入图片描述

虽然编号出来了但是还是没启动原因是,如下niginx.conf出现问题。

在这里插入图片描述
解决方案:docker nginx -v 挂载配置文件问题

给nginx挂载卷,要先有一个配置文件才能挂载,具体做法就是先以不挂载卷的形式正常启动一个nginx容器,然后从中cp拷贝一份配置文件,删除这个容器,再重新以挂载卷的形式启动一个新容器。

解决方案:

  1. 不挂在数据卷生成容器,目的是生成配置文件

在这里插入图片描述
成功运行,如下

在这里插入图片描述
2. 将容器生成的配置文件copy到主机

先停掉容器将容器的nginx.conf克隆到主机到主机中,查看nginx.conf有正常配置文件即可。
在这里插入图片描述

  1. 再次重新挂在,如下
docker run -id --name nginx-proxy -p 80:80 -v /home/xwh/docker-volumes/nginx/html:/usr/share/nginx/html -v /home/xwh/docker-volumes/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/xwh/docker-volumes/nginx/conf.d:/etc/nginx/conf.d nginx

在这里插入图片描述
如上图所示,容器成功运行,nginx服务也启动了。

dockerfile

使用docker拉取镜像后可以根据需求自定义镜像,并将镜像打包,或者上传到docker hub供任何人使用,而每次进入镜像的对镜像镜像自定义的DIV确实十分繁琐的。

dockerfile提供了一种语法,按照一定语法编写可以自定义docker镜像,官方提供了相关命令运行dockerfile用于构建镜像。

docker中文学习网站

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

指令描述
FROM指明基础镜像信息(镜像都是一层一层叠加的,但都是在基础镜像之上)
MAINTAINER指明维护者信息
RUNRUN 指令将对镜像执行跟随的命令。每运行一条 RUN 指令,镜像添加新的一层,并提交。格式为:RUN<command>RUN ["executable", "param1", "param2"]。前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。
CMDCMD 指令来指定运行容器时的操作命令。
EXPOSE指定Docker 服务端容器暴露的端口号
WORKDIR格式为 WORKDIR /path/to/workdir。为后续的 RUN、CMD、ENTRYPOINT 指令配置工作目录。
ENV格式为:ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
ADD格式为:ADD <src> <dest>,该命令将复制指定的 <src>到容器中的 <dest>,若是压缩包会自动解压
COPY格式为COPY <src> <dest>。复制本地主机的 <src>(为 Dockerfile 所在目录的相对路径)到容器中的 <dest>
ENTRYPOINT配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
VOLUME创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
USER指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。
ONBUILD格式为 ONBUILD [INSTRUCTION]。配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。

CMD命令与ENTRYPOINT的区别在于前者只生效最后一个命令,后者可以执行若干命令。

编写完dockerfile后通过docker build 命令来创建镜像。也可以通过.dockerignore文件(每一行添加一条匹配模式)来让 Docker 忽略路径下的目录和文件。要指定镜像的标签信息,可以通过-t 选项。

dockerfile构建完镜像后可以发布到docker hub中央仓库,需要先注册一个账号,步骤如下:

  1. docker login -u [username]
  2. docker push [镜像名称]:[tag]

docker tag命令为镜像设置标签,需要设置标签才能正常提交,不然没有版本信息

镜像服务器

在开发过程中例如java最终会生成一个jar包,那么其他开发者拿到jar包后直接java -jar就可以运行jar包。但是有前提条件的:

  1. jdk环境
  2. 数据库环境
  3. 中间件环境

如果java使用的jdk11,就需要开发者在机器上安装jdk11版本,如果使用的mysql8还需要安装mysql对应版本,同理以及各种中间件。这些都需要严格按照开发环境的配置。但是docker的存在使这些都可以一键化配置,不会在出现版本问题。

例如通过dockerfile编写jdk环境,mysql环境,redis环境生成一个dockerfile,然后将代码的jar文件和dockerfile打包为一个镜像,那么任何拿到镜像直接构建容器就能运行了,无需配置任何环境。

docker网络

在主机未安装docker是只有两个网卡,如下,一个是本机地址另一个是内网地址。
在这里插入图片描述
本机地址是用来访问本机的网络服务的,例如在本机运行一个tpc服务,或者http的web服务都需要使用本机地址127.0.0.1,每个机器的主机都是127.0.0.1。内网地址是在同一局域网下区分不同不同主机的,在网络原理是学习了每个电脑都是一个固定的ip实现计算机的通讯,但实际每个电脑有一个固定ip是不现实的,其实只有一个网络有一个固定的ip,也就是一个网线对应一个ip。

连接在同一网线下的电脑实现通讯就是内网实现的,在统一网络下实现了一个局域网,也就是192.168开头的私网,由于路由器作用内网ip是有dhcp服务器自动分配的,因此不会重复,所以每台计算机在统一网络下但有不同的内网ip,也是唯一的也能实现通讯。

但是在主机上启动的dcoker服务只是主机上的进程显然也是公用内网ip的,通过端口区分不同服务。docker服务通过端口映射实现外部访问。docker又可以构建一个独立的服务,如果docker之间要实现访问网络服务的话,就需要自己的ip了,没有ip是无法实现网络服务的。

docker有自己的网络服务docker0,实现docekr内部的网络服务,如下

在这里插入图片描述
docker内部实现了新的路由机制,是基于B类地址也就是172开头的,该类地址可容纳65535太计算机因此也就意味这台硬件支持的能力下,一台主机可以启动最大这莫多的docker服务。局域网使用C类地址也就是192只能容纳小部分计算机,是计算机默认局域网使用的ip地址。

启动容器时docker网络会自动生成一个B类地址,作为docker服务的专属ip地址,ip之间通过桥接连接。
在这里插入图片描述

下载nginx镜像
在这里插入图片描述
在docker中提供了--link来绑定网络实现网络的联通。

docker网络

docker

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chrome查看浏览器内核日志

由于经常在网页上调试播放音视频&#xff0c;但是总遇到一些未知原因&#xff0c;导致无法正常播放&#xff0c;亟需查看浏览器内核日志&#xff0c;分析原因&#xff0c;做一下笔记。 (1) 查看浏览器快捷键属性 &#xff08;2&#xff09;在快捷键启动位置补充参数 --enable-…

[ 容器 ] Docker 的数据管理

目录 一、Docker 的数据管理1.1 数据卷2. 数据卷容器 二、 端口映射三、容器互联&#xff08;使用centos镜像&#xff09;四、Docker 镜像的创建1&#xff0e;基于现有镜像创建2&#xff0e;基于本地模板创建3&#xff0e;基于Dockerfile 创建3.1 联合文件系统&#xff08;Unio…

vue3前端分页,全选翻页状态保持

直接贴代码&#xff0c;代码中有注释 <template><div class"viewer-container" id"viewer-container"><!-- 表格 --><el-table:row-key"getRowKeys":data"data.tableDataCopy"style"width: 100%"ref&…

Go语言开发小技巧易错点100例(八)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

Linux网络--UDP套接字

文章目录 预备知识socket套接字UDP网络编程 一、预备知识 1.源IP地址和目的IP地址 IP地址&#xff1a;标识计算机在网络中的唯一性。 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址。 源IP地址 &#xff1a; 网络通信的发起者。 目的IP地址 &#xff1a; …

element ui 上传控件携带参数到后端

1.携带固定参数&#xff1a; 2.携带不固定参数&#xff1a; <el-row> <el-col :span"24"> <el-upload :multiple"false" :show-file-list"false" :on-success"f_h…

矿井人员视频行为分析算法 opencv

矿井人员视频行为分析算法通过opencvpython网络模型技术&#xff0c;矿井人员视频行为分析算法实时监测人员的作业行为&#xff0c;并与安全标准进行比对&#xff0c;可以及时发现不符合安全要求的行为&#xff0c;预防事故的发生。OpenCV的全称是Open Source Computer Vision …

json-server Node.js 服务,前端模拟后端提供json接口服务

json-server Node.js 服务,前端模拟后端提供json接口服务 背景&#xff1a; 前后端分离的项目&#xff0c;如果前端写页面的话&#xff0c;必须的后端提供接口文件&#xff0c;作为前端等待时间太久&#xff0c;不便于开发进行&#xff0c;如果前端写的过程中自己搭建一个简要的…

vue3+taro+Nutui 开发小程序(一)

前言&#xff1a;最近在调研开发小程序&#xff0c;发现现在taro框架逐渐成熟&#xff0c;能完美地使用vue3来进行开发&#xff0c;调研中发现京东的Nutui也不错所以准备写一个由0到1的vue3taroNutui的小程序。 这篇我们首先搭建一个框架&#xff1a; vscode插件准备环节&…

【C++详解】——异常

目录 C语言传统的处理错误的方式 C异常概念 异常的使用 异常的抛出和捕获 异常的重新抛出 异常安全 异常规范 自定义异常体系 C标准库的异常体系 异常的优缺点 C语言传统的处理错误的方式 传统的错误处理机制 终止程序&#xff0c;如assert。缺陷&#xff1a;用户难…

国产化测试工具的特色有哪些?

在软件开发和系统运维过程中&#xff0c;测试工具的选择和应用对于确保软件质量和系统稳定性至关重要。随着我国信息技术的快速发展&#xff0c;国产化测试工具以其独特的特色在市场上崭露头角。那国产化测试工具的特色有哪些&#xff1f; 一、技术创新&#xff1a; 适应多样化…

在英特尔 CPU 上微调 Stable Diffusion 模型

扩散模型能够根据文本提示生成逼真的图像&#xff0c;这种能力促进了生成式人工智能的普及。人们已经开始把这些模型用在包括数据合成及内容创建在内的多个应用领域。Hugging Face Hub 包含超过 5 千个预训练的文生图 模型。这些模型与 Diffusers 库 结合使用&#xff0c;使得构…

【Qt】安装Qt 5.7.1 MSVC2013 64bit版本的说明

【Qt】安装Qt 5.7.1 MSVC2013 64bit版本的说明 1、背景2、安装Qt 5.7.13、运行Qt Creator 1、背景 刚开始Qt是C库&#xff0c;后来Qt发展就越来越强大了。后来Qt 发展成为一套跨平台C图形用户界面应用程序开发框架。 注意它不但可以开发GUI程序&#xff0c;而且也可用于开发非…

【数据架构】Data Fabric 架构是实现数据管理和集成现代化的关键

D&A 领导者应该了解数据编织架构的关键支柱&#xff0c;以实现机器支持的数据集成。 在日益多样化、分布式和复杂的环境中&#xff0c;数据管理敏捷性已成为组织的任务关键优先事项。为了减少人为错误和总体成本&#xff0c;数据和分析 (D&A) 领导者需要超越传统的数据…

LangChain+LLM大模型问答能力搭建与思考

1. 背景 最近&#xff0c;大模型&#xff08;LLMs&#xff0c;Large Language Models&#xff09;可谓是NLP领域&#xff0c;甚至整个科技领域最火热的技术了。凑巧的是&#xff0c;我本人恰好就是NLP算法工程师&#xff0c;面临着被LLMs浪潮淘汰的窘境&#xff0c;决定在焦虑…

【趟坑记录】d3.zoom()的正确使用姿势 @d3.v7

【趟坑记录】d3.zoom()的正确使用姿势 d3.v7 文章目录 【趟坑记录】d3.zoom()的正确使用姿势 d3.v7问题重现原因分析解决方案放缩平移写法特殊修改transform函数的写法 总结 在开发一个D3应用的时候遇到了一个 zoom相关的问题&#xff0c;记录解决思路与方案 问题重现 最近在…

nodejs+vue+elementui学习交流和学习笔记分享系统

Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进…

【Hello mysql】 mysql的事务

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的事务 mysql的事务 事务的概念事务功能测试事务的隔离级别如何理解隔离性&#xff08;粗浅理解&#xff09;隔离级别查看和设置隔离级别四种隔离级别详解读 -- 未提交读 - 提交可重复读串行化一致性的理解 总结 …

前端学习——ajax (Day4)

同步代码和异步代码 回调函数地狱和 Promise 链式调用 回调函数地狱 Promise - 链式调用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&quo…

python识别极验4滑块验证码实战

闲得无聊&#xff0c;趁着休息研究了一下极验4滑块验证码的安全性&#xff0c;是否有机器识别、自动化拖拽的可能性。首先看一下效果 如何识别验证码 1、下载图片 下载图片可以参考博客《采集极验4滑块验证码图片数据》 2、标记图片 3、标记滑动距离 实现代码 __author__ &…