03初始Docker

news2024/11/17 10:02:41

一、初始Docker

1.什么是Docker

问题

①大型项目组件复杂,运行环境复杂,部署时依赖复杂,出现兼容性问题。

②开发,测试,生产环境有差异。不同的环境操作系统不同

解决

①Docket将应用、依赖、函数库、配置一起打包,形成可移植镜像。每个应用放在隔离容器运行,避免相互干扰。

②Docker镜像包含完整的运行环境,包括系统库函数,仅依赖系统的Linux内核。可以在任意的linux系统运行。

 2.Docker架构

镜像

将应用程序及其依赖、环境、配置打包在一起

容器

镜像运行起来的就是容器,一个镜像可以运行多个容器

Docker架构

服务端:接收命令或远程请求,操作镜像或容器

客户端:发送操作或者请求到Docker的服务端

DockerHub

一个镜像托管的服务器

3.镜像操作命令

 案例:从DockerHub中拉取一个nginx镜像并查看

systemctl start docker  # 启动docker服务

①去镜像仓库搜索nginx镜像

 ②在linux通过命令拉取到本地 docker pull nginx

 ③查看本地的镜像docker images

案例:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

①把镜像包导出tar

docker save -o nginx.tar nginx:latest

②把导出的tar加载到本地镜像

docker load -i nignx.tar

 镜像操作有哪些?

  • docker images  查看镜像
  • docker rmi 删除镜像
  • docker pull 拉取镜像到本地
  • docker push 把镜像推到仓库
  • docker save 把镜像打包成tar
  • docker load 把tar文件加载到本地镜像

4.容器相关命令

①docker run 创建容器

②docker pause 暂停容器

③docker unpause 暂停到运行容器

④docker stop 停止容器

⑤docker start 停止到运行容器

⑥docker ps 查看运行的容器的状态

⑥docker rm 删除指定容器

⑦docker logs 查看容器运行日志

⑧docker exec 进入容器执行其他命令

5.Docker基本操作-容器

案例一:创建并运行一个Nginx容器

命令: docker run --name mn -p 80:80 -d nginx

①docker run创建并运行一个容器

②--name给容器起了名字是mn

③-p虚拟机的端口与容器端口映射 虚拟机端口:容器端口

④-d 后台运行

⑤nginx镜像名称

测试:

查看运行容器的状态docker ps

 ①访问虚拟机的ip地址

②持续查看容器日志

docker logs mn -f

 总结

 

案例二: 进入Nginx容器,修改HTML文件内容,添加“Hello world”

①进入容器docker exec -it mn bash

docker exec 进入容器内部,执行命令

-it与容器交互

mn进入容器的名称

bash进入容器后执行的命令,bash是一个linux终端交互命令

②进入nginx的HTML所在目录 /usr/share/nginx/html

cd /usr/share/nginx/html

③修改index.html的内容

sed -i 's#Welcome to nginx# Hello world #g' index.html

sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

总结

练习:进入redis容器,并执行redis-cli客户端命令,存入num=666

①创建并允许一个Redis容器

docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes

②进入redis容器

docker exec -it redis bash

③执行redis-cli客户端命令

redis-cli

④设置数据 set num 666

⑤获取数据get num

二、数据卷Volume

1.数据卷简介

数据卷解决容器与数据耦合问题。将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

数据卷Volume是一个虚拟目录,指向虚拟机系统的某个目录(/var/lib/docker/volumes)

容器目录与虚拟机目录相关联,容器与虚拟机修改同时更新。

2.数据卷操作

docker volume[写命令]

①create 创建一个volume

②inspect 显示一个或多个volume信息

③ls 列出所有的volume

④prune 删除未使用的volume

⑤rm 删除一个或多个指定的volume

3.案例:创建一个数据卷,并查看数据卷在宿主机的目录位置

①创建数据卷html

docker volume create html

②查看所有的数据卷

docker volume ls

③查看数据卷的详细信息

docker volume inspect

④删除指定的html数据卷,-f是强制删除

docker volume rm -f html

4.挂载数据卷-V(volume)

创建容器时,通过-v参数来挂载一个数据卷到某个容器目录。

 

案例:创建一个nginx容器,修改容器内的html目录内的index.html内容

①创建容器并挂载数据卷到容器内的HTML目录

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html  -d nginx

-v 数据卷:容器目录的路径

如果容器运行时volume的html不存在,会自动被创建出来

②进入html数据卷所在位置,并修改HTML内容

# 查看html数据卷的位置

docker volume inspect html

# 进入该目录

cd /var/lib/docker/volumes/html/_data

# 修改文件

vi index.html

三、Dockerfile自定义镜像

概念:镜像将应用程序以及系统函数库,环境,配置,依赖打包而成。

结构:以mysql镜像为例子

 

①基础镜像:mysql应用依赖的系统函数库,环境,配置,文件。

②层:在基础镜像基础上添加安装包,依赖,配置,每次操作后都形成一个层 。镜像是分层的

③入口:启动的脚本

2.Dockerfile语法

概念:Dockerfile是一个文本文件,包含一个个指令,用指令说明执行的操作来构建镜像。每一个指令形成一层Layer

3.案例:基于Ubuntu镜像构建一个新镜像,运行一个java项目

Dockerfile

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

步骤:

①新建一个空文件夹docker-demo,把资料复制在这个文件夹

②运行命令:

docker build -t javaweb:1.0 .

③查看镜像:

④启动此镜像:

docker run --name web -p 8090:8090 -d javaweb:1.0

⑤访问:

http://192.168.137.129:8090/hello/count

四、DockerCompose

1.什么是DockerCompose

①DockerCompose基于Compose文件快速部署分布式应用,无需手动一个个创建和运行容器

②Compose是一个文本文件,通过指令定义集群中每个容器怎样运行

 

2.案例:将cloud-demo微服务集群利用DockerCompose部署

①查看课前资料提供的cloud-demo文件夹,里面已经编写好了docker-compose文件

② 修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名

③使用maven打包工具,将项目中的每个微服务都打包为app.jar

④将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中

⑤将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署

http://192.168.137.129:10010/user/2?authorization=admin

⑥停止是docker-compose down

五、Docker镜像仓库

1.搭建私有镜像仓库

①配置Docker信任地址

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker

②创建Compose

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=私有仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

③部署

docker-compose up -d

2.向镜像仓库推送镜像

①推送镜像到私有镜像服务必须先tag

docker tag nginx:latest 192.168.137.129:8080/nginx:1.0

②上传

docker push 192.168.137.129:8080/nginx:1.0

3.从镜像仓库拉取镜像

docker pull 192.168.137.129:8080/nginx:1.0

4.总结

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

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

相关文章

ChatGPT AIGC 完成 Excel多条件求和操作

企业产品销售额是企业在一定时间内通过销售其产品获取的收入总额。 这个指标通常用于衡量企业的销售能力、市场占有率以及企业的健康度。企业产品销售额具体的计算方法是将企业在销售商品或服务时所取得的所有收入加总而得出。 在这个过程中,通常会考虑到可能存在的退货、折…

基于nodejs+vue备忘记账系统mysql

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

上传和下载文件到google drive/Local pc

1 上传 参考&#xff1a;使用 Python 将文件上传到 Google 云端硬盘_迹忆客 Upload file to google drive using Python - CodeSpeedy (没起作用&#xff0c;但可以参考一下) 第 1 步&#xff1a;Google API Playground 我们可以通过搜索 Google 找到更多关于 Google API Pla…

Linux 开机启动一条PHP命令

当你开机的时候要自动的启动一条PHP命令场景&#xff1a;比如webman 你需要手动启动项目进程 你可以这样操作 流程&#xff1a; 1、准备好你要执行的命令 2、将命令写入一个服务文件 3、开机自启这个服务 实例&#xff1a; 1、比如这个命令 /usr/local/php/bin/php /ho…

Class类文件中的“咖啡宝贝”

Class文件是一组以8个字节为基础单位的二进制流&#xff0c;各个数据项目严格按照顺序紧凑地排列在文件之中&#xff0c;中间没有添加任何分隔符&#xff0c;整个Class文件中存储的内容几乎全部是程序运行的必要数据&#xff0c;没有空隙存在。 字节码&#xff08;Byte Code&am…

11、Python -- 列表去重的三种方法

目录 方法1&#xff1a;新列表搜集方法2&#xff1a;利用set集合方法3&#xff1a;使用itertools模块 新列表搜集法 使用set集合去重 使用itertools模块的groupby函数去重 方法1&#xff1a;新列表搜集 &#xff08;1&#xff09;创建新列表 &#xff08;2&#xff09;遍历源列…

Webpack 基础以及常用插件使用方法

目录 一、前言二、修改打包入/出口配置步骤 三、常用插件使用html-webpack-plugin打包 CSS 代码提取 CSS 代码优化压缩过程打包 less 代码打包图片文件 一、前言 本质上&#xff0c;Webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时…

如何完善文件传输审批流程,降低企业文件安全风险?

在当今高度信息化的时代&#xff0c;数据的价值日益凸显。然而&#xff0c;如果在文件对外传输过程中缺乏必要的审批和留痕记录&#xff0c;可能会带来严重的安全隐患。企业面临巨额的经济损失&#xff1b;其次&#xff0c;企业的品牌形象也受到了严重损害&#xff1b;此外&…

FreeRTOS 任务调度和任务的状态

目录 什么是任务调度&#xff1f; FreeRTOS的任务调度规则是怎样的&#xff1f; 抢占式调度运行过程​编辑 时间片调度运行过程​编辑 任务的状态 任务调度和任务的状态案例分析 什么是任务调度&#xff1f; 调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。…

NotePad格式化SQL语句

NotePad格式化SQL步骤 今日自己在进行导出一些后台执行的SQL语句,但是在NOTEPAD上是未排版的,想想有没有这个插件呢? 1.导入插件 进入后,输入PoorManT-SqlFormatt进行搜索 2.点击格式化SQL 3.执行效果

Constellation 介绍:Chainlink 黑客马拉松

在 2020 年&#xff0c;Chainlink 举办了其第一次线上黑客马拉松。当时&#xff0c;DeFi 作为一个类别刚刚开始蓬勃发展&#xff0c;而 NFT 也只是刚刚起步。这次黑客马拉松吸引了来自 45 个国家的 1,000 多名注册参与者&#xff0c;并收到了来自 70 个项目提交。 从那时起&am…

分库分表-ShardingSphere 4.x(2)

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

软考机考 画图

文章目录 绘制 前导图绘制 双代号网络图绘制 双代号时标网络图绘制 七格图绘制 类图绘制 时序图绘制 ER 图ER模型 简介 绘制表格 绘制 前导图 第一步&#xff1a;先画出所有活动&#xff0c;将活动命名 第二步&#xff1a;如需调整大小&#xff0c;选中要调整大小的元件&#…

CSS 快速实现水平垂直居中

CSS 快速实现水平垂直居中 文章目录 CSS 快速实现水平垂直居中一、前言二、弹性布局普遍做法三、弹性布局的妙用参考资料&#x1f498;推荐博文&#x1f357; 一、前言 本文探究的是如何快速实现水平垂直居中&#xff0c;重点在于快速两个字&#xff0c;我对于快速的理解&…

智慧公厕:细致入微的城市贴心服务与便捷方便的生活配套

在现代城市生活中&#xff0c;公厕作为重要的城市基础设施&#xff0c;一直是城市发展的关键环节之一。然而&#xff0c;传统的公厕常常存在着设施陈旧、管理不善和卫生状况差等问题&#xff0c;给市民的生活品质和城市形象带来了一定的影响。为了提供更好的城市公厕服务&#…

Pillow(PIL)库的主要方法介绍

Pillow&#xff08;Python Imaging Library&#xff09;是Python中一个强大的图像处理库&#xff0c;它允许你进行图像的创建、打开、编辑、保存和显示等操作。Pillow 是 PIL&#xff08;Python Imaging Library&#xff09;的分支&#xff0c;支持多种图像格式&#xff0c;并提…

VLOOKUP函数的使用方法

VLOOKUP是一个查找函数&#xff0c;给定一个查找的目标&#xff0c;它就能从指定的查找区域中查找返回想要查找到的值。它的基本语法为&#xff1a; VLOOKUP&#xff08;查找目标&#xff0c;查找范围&#xff0c;返回值的列数&#xff0c;精确OR模糊查找)下面以一个实例来介绍…

Spring Cloud之微服务

目录 微服务 微服务架构 微服务架构与单体架构 特点 框架 总结 SpringCloud 常用组件 与SpringBoot关系 版本 微服务 微服务&#xff1a;从字面上理解即&#xff1a;微小的服务&#xff1b; 微小&#xff1a;微服务体积小&#xff0c;复杂度低&#xff0c;一个微服…

SpringBoot整合XXL-JOB详解

❤️作者简介&#xff1a;2022新星计划第三季云原生与云计算赛道Top5&#x1f3c5;、华为云享专家&#x1f3c5;、云原生领域潜力新星&#x1f3c5; &#x1f49b;博客首页&#xff1a;C站个人主页&#x1f31e; &#x1f497;作者目的&#xff1a;如有错误请指正&#xff0c;将…

【ESP8266】:基于ESP8266的LED时钟

项目场景&#xff1a; 在嘉立创看到一个好看的LED时钟&#xff0c;自己复刻一个。 项目效果&#xff1a; 视频效果&#xff1a; ESP8266LED时钟 项目介绍&#xff1a; 随着物联网的快速发展&#xff0c;嵌入式系统成为了现代生活中不可或缺的一部分。本论文基于ESP8266开发板&a…