Dcoker学习笔记(一)

Dcoker学习笔记一

  • 一、 初识Docker
    • 1.1 简介
    • 1.2 虚拟机和docker的区别
    • 1.3 Docker架构
    • 1.4 安装Docker(Linux)
  • 二、 Dcoker基本操作
    • 2.1 镜像操作
    • 2.2 容器操作
      • 练习
    • 2.3 数据卷volume(容器数据管理)
      • 简介
      • 数据卷语法
      • 数据卷挂载
    • 2.4 自定义镜像
      • 2.4.1 镜像结构
      • 2.4.2 Dockerfile
    • 2.4 DockerCompose编排
      • 简介
    • 待续未完

一、 初识Docker

1.1 简介

Docker是一个快速交付应用,运行应用的技术:

Docker可以解决大型项目依赖关系复杂,不同组件依赖的兼容性问题

  • docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植的镜像
  • docker应用运行在容器中,使用沙箱机制,相互隔离

Docker如何解决开发、测试、生产环境有差异的问题

  • docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

在这里插入图片描述

1.2 虚拟机和docker的区别

在这里插入图片描述

docker和虚拟机的差异:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好、虚拟机体积大、启动速度慢、性能一般

1.3 Docker架构

Docker架构主要有两个内容:镜像容器

镜像(Image):docker进应用程序及其所需依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是docker会给容器做隔离,对外不可见

怎么进行镜像共享?可以通过Docker Rrgistry进行镜像共享

DockerHub:docker镜像托管平台。这样的平台称为Docker Rrgistry

在这里插入图片描述

1.4 安装Docker(Linux)

首先需要大家虚拟机联网,安装yum工具

输入如下命令

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

然后更新本地镜像源:

# 设置docker镜像源
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

然后输入命令进行安装:

yum install -y docker-ce

等待安装完成输入

docker-v

出现插图这表明安装成功

在这里插入图片描述

启动docker先关闭防火墙

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

启动、停止、重启docker命令

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

二、 Dcoker基本操作

2.1 镜像操作

镜像名称规范:

镜像名称一般分成两部分组成:【repository】:【tag】在这里插入图片描述

操作命令
在这里插入图片描述

案例1:从dockerHub中拉取一个Nginx进行并查看

1.首先去镜像仓库搜索Nginx镜像,比如
DockerHub

2.复制命令

 docker pull nginx #默认拉取最新版本  

在这里插入图片描述

在这里插入图片描述

拉取完成后查看镜像版本

docker images

在这里插入图片描述

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

步骤一:利用docker xx --help命令查看docker save,将其打包

在这里插入图片描述
从上面我们可以看到,假如把nginx镜像打包成一个压缩文件的命令为:
docker save -o nginx.tar nginx:latest

接下来我们查看是否打包成功
在这里插入图片描述

可以看到已经成功了,
接下来我们把原来的镜像给删除掉:
docker rmi nginx:latest

在这里插入图片描述
然后我们进行load --help命令查看load 操作命令,并加载出来

在这里插入图片描述

可以看出命令为:

docker load -i nginx.tar

接下来查看是否加载完成
在这里插入图片描述

可以看出已经成功被加载完成了

2.2 容器操作

操作容器的命令

在这里插入图片描述

扩展:

docker logs -f [容器名称] #持续日志输出 

案例1:创建运行一个nginx容器

步骤一:去docker hub 查看nginx的容器运行命令

在这里插入图片描述
在这里插入图片描述
命令:
在这里插入图片描述
输入docker run --name mynginx -p 80:80 -d nginx

在这里插入图片描述
从上面可以看出,我们已经让该镜像成功运行起来了

接着我们访问宿主机的IP和端口

在这里插入图片描述
访问成功!

案例2:进入nginx容器,修改HTML文件内容,添加“chushay was best!”

步骤一:进入容器。进入到刚才创建的nginx容器命令

docker exec -it mynginx bash![在这里插入图片描述](https://img-blog.csdnimg.cn/6abf8bd70a1c44769d31d099aeca1a57.png)

然后我们去dockerhub找到nginx的路径

在这里插入图片描述

步骤二:进入nginx的HTML所在目录
/usr/share/nginx/html

cd /usr/share/nginx/html

步骤三:修改index.html的内容

sed -i 's#Welcome to nginx#chushay was best!#g' index.html

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

修改之后,我们通过浏览器验证一下
在这里插入图片描述
我们可以看到已经修改成功!

总结:
在这里插入图片描述

练习

创建并运行一个Redis容器,并支持数据持久化

步骤一:到DdockerHub搜索Redis镜像
在这里插入图片描述

步骤二:查看Redis镜像文档中的帮助信息

拉取镜像:
docker pull redis

步骤三:利用docker run ,命令运行一个Redis容器

在这里插入图片描述

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

在这里插入图片描述
从上图中我们可以看出Redis镜像已经启动称为容器,接下来我们通过Redis连接工具来测试一下

在这里插入图片描述

我们可以看到,连接成功!

接下来,进入容器
docker exec -it myredis bash

进入Redis客户端
redis-cli

注 :可以直接进入到redis-cli: docker exec -it myredis redis-cli

添加一个key

set num 666

接下来我们查看Redis,被成功的添加了
在这里插入图片描述

2.3 数据卷volume(容器数据管理)

在这里插入图片描述

简介

在这里插入图片描述

数据卷语法

在这里插入图片描述

实践小操:

1.创建一个名为html的数据卷:

docker volume create html
在这里插入图片描述

2.查看创建的数据卷:
docker volume ls
在这里插入图片描述
3.查看创建的数据卷路径:
docker volume inspect html
在这里插入图片描述

4.删除数据卷

删除未使用的卷
docker volume prune

删除指定的卷
docker volume rm [卷名]

总结
在这里插入图片描述

数据卷挂载

在这里插入图片描述

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

在这里插入图片描述

创建容器并挂载数据卷
docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx

查看数据卷路径
在这里插入图片描述
进入该路径并查看数据卷
在这里插入图片描述

修改html内容:

vi index.html

总结:

在这里插入图片描述

案例2:
创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

在这里插入图片描述

在这里插入图片描述

步骤一:拉取MySQL镜像

docker pull mysql

查看镜像
在这里插入图片描述
步骤二:创建目录

mkdir -p mysql/data

mkdir -p mysql/conf

步骤三:把MySQL配置文件传到mysql/conf目录下

在这里插入图片描述
步骤四:去DockerHub查阅资料,创建并运行MySQL容器:要求:

  • ①挂载/tmp/mysql/data到mysql容器内数据存储目录

  • ②挂载/tmp/mysql/conf/hmy.cnf到mysql容器配置文件

  • ③设置mysql密码

      docker run --name mysql -e MYSQL_ROOT_PASSWORD=654321 -p 3306:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -d mysql
    
docker run \ #启动
--name mysql \ #容器名称
-e MYSQL_ROOT_PASSWORD=654321 \  #mysql环境配置
-p 3306:3306 \                   #mysql端口配置      
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ #挂载/tmp/mysql/conf/hmy.cnf到mysql容器配置文件
-v /tmp/mysql/data:/var/lib/mysql \#挂载/tmp/mysql/data到mysql容器内数据存储目录
-d \                             #允许后台运行
mysql							 #镜像名称	

启动成功之后我们通过连接mysql数据库查看

在这里插入图片描述

2.4 自定义镜像

2.4.1 镜像结构

镜像概念:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成的整体。

以mysql镜像为例解析镜像结构:
在这里插入图片描述

总结:

镜像是分层结构,每一层称为一个Layer

  • BaseImage层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其他:在baseImage基础上添加依赖、安装程序、完成整个应用的安装和配置

2.4.2 Dockerfile

Dcokerfile就是一个文本文件,其中包含一个个指令,用来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer

在这里插入图片描述

更多指令语法

案例1:基于Ubuntu镜像构建一个新镜像,运行一个Java项目

步骤一:新建一个空文件夹docker-demo
步骤二:拷贝课件资料中的docker-demo.jar文件到docker-demo这个目录
步骤三:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
步骤四:拷贝课前资料提供的Dockerfile到docker-demo这个目录
步骤五:进入docker-demo
步骤六:运行命令
docker build -t javaweb:1.0v .

步骤一:新建一个空文件夹docker-demo
在这里插入图片描述
步骤二:拷贝课件资料中的docker-demo.jar文件到docker-demo这个目
在这里插入图片描述

步骤三:拷贝课前资料中的jdk8.tar.gz文件到docker-demo这个目录
在这里插入图片描述
步骤四:拷贝课前资料提供的Dockerfile到docker-demo这个目录

在这里插入图片描述

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.0v .

在这里插入图片描述

启动镜像:

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

在这里插入图片描述

访问成功!
在这里插入图片描述

案例2:基于Java:8-alpine镜像,将一个Java项目构建为镜像

实现思路如下:

  • ① 新建一个空的目录,然后在,目录中新建一个文件,命名为Dockerfile
  • ②拷贝课前资料提供的docker-demo.jar到这个目录中
  • ③编写Dockerfile文件:
    • a)基于Java:8-alpine作为基础镜像
    • b)将app.jar拷贝到镜像中
    • c)暴露端口
    • d)编写入口ENTRYPOINT
  • ④使用docker build命令构建镜像
  • ⑤使用docker run创建容器并运行

① 新建一个空的目录,然后在,目录中新建一个文件,命名为Dockerfile
还是使用原来的文件目录

②拷贝课前资料提供的docker-demo.jar到这个目录中
还是使用原来的文件目录

③编写Dockerfile文件

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

# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar

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

④使用docker build命令构建镜像

docker build -t javaweb:2.0v .

⑤使用docker run创建容器并运行
在这里插入图片描述

docker run --name web -p 8090:8090 -d javaweb:2.0v

访问:
在这里插入图片描述

总结:
在这里插入图片描述

2.4 DockerCompose编排

简介

Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker
公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML
格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器

注:引用CSDN博主「山河亦问安」,原文链接点击查看原文,这也是一篇关于DockerCompose不错的文章,值得推荐!


Compose文件是一个文本文件,在文件中通过定义集群中的每个容器如何运行

docker-compose格式:
在这里插入图片描述

version: "3.8"				//compose版本

service:
  mysql: 					//容器名称
  	images: mysql:5.7.25 	//镜像名称
  	environment: 			//环境名称
  	  MYSQL_ROOT_PASSWORD: 654321
  	volumes: 				//数据卷
  	  - /tmp/mysql/data:/var/lib/mysql
  	  - /tpm/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cof
  web:
  	build: .   				//从当前目录构建镜像
  	ports:     				//暴露端口
  	  - 8090: 8090  

CentOS7安装DockerCompose:

Linux下需要通过命令下载:

# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

出现下图,表示安装成功
在这里插入图片描述

修改文件权限

# 修改权限
chmod +x /usr/local/bin/docker-compose

查看docker-compose版本

docker-compose --version

在这里插入图片描述
安装成功!

待续未完

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Node.js入门】1.1Node.js 简介

Node.js入门之—1.1Node.js 简介 文章目录 Node.js入门之—1.1Node.js 简介什么是 Node.js错误说法 Node.js 的特点跨平台三方类库自带http服务器非阻塞I/O事件驱动单线程 Node.js 的应用场合适合用Node.js的场合不适合用Node.js的场合弥补Node.js不足的解决方案 什么是 Node.j…

前端缓存机制——强缓存、弱缓存、启发式缓存

强缓存和弱缓存的主要区别是主要区别在于缓存头携带的信息不同。 强缓存&#xff1a; 浏览器发起请求&#xff0c;查询浏览器的本地缓存&#xff0c;如果找到资源&#xff0c;则直接在浏览器中使用该资源。若是未找到&#xff0c;或者资源已过期&#xff0c;则浏览器缓存返回未…

Java进阶(JVM调优)——JVM调优参数 JDK自带工具使用 内存溢出和死锁问题案例 GC垃圾回收

前言 JVM作为Java进阶的知识&#xff0c;是需要Java程序员不断深度和理解的。 本篇博客介绍JVM调优的相关知识&#xff0c;给出了一个demo案例&#xff0c;介绍了JVM调优的主要参数&#xff1b;介绍了jdk自带的jvm分析工具的使用&#xff1b;给出了一个内存溢出的调优场景&am…

Unity中Shader再议ATTENUATION

文章目录 前言一、实现实时阴影的投射1、直接复制之前实现投射阴影的Pass 二、实现实时阴影的接受&#xff0c;同时实现光照衰减1、在 v2f 中使用这个2、在 顶点着色器 中使用这个3、在 片元着色器 中使用这个 前言 在之前文章中&#xff0c;实现了 Global Illumination 的直接…

leetcode经典面试150题---5.多数元素

目录 题目描述 前置知识 代码 方法一 排序法 思路 实现 复杂度 方法二 哈希表 思路 实现 题目描述 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给…

mybatis嵌套查询子集合只有一条数据

我们再用mybatis做嵌套查询时&#xff0c;有时会遇到子集合只有1条数据的情况&#xff0c;例如下这样&#xff1a; 数据库查询结果 xml <resultMap id"userMap" type"com.springboot.demo.test.entity.User"><id column"uid" property…

【容器化】Docker

文章目录 概述环境配置的难题虚拟机Linux 容器Docker 核心概念安装命令启动与停止命令镜像相关命令容器相关命令 部署MySQL 部署Tomcat 部署Nginx 部署Redis 部署 迁移与备份Dockerfile 制作镜像Docker 私有仓库将镜像上传到私有仓库从私有仓库拉取镜像 来源 概述 环境配置的难…

TIA博途中已经被调用的变量,为什么交叉引用时却没有显示调用信息?

TIA博途中已经被调用的变量&#xff0c;为什么交叉引用时却没有显示调用信息&#xff1f; 故障现象&#xff1a; 如下图所示&#xff0c;在HMI的画面中&#xff0c;已经连接了对应的变量&#xff0c; 如下图所示&#xff0c;这里为HMI变量表&#xff0c; 如下图所示&#xff…

野火霸天虎 STM32F407 学习笔记_5 按键输入;位带操作介绍

输入——按键点灯 开发板按键电路如下&#xff1a; 按键未按下接地&#xff0c;按下后为高电平。电容起到消抖作用&#xff0c;软件处理就不需要手动延时消抖了。 编程没啥难度&#xff0c;就是改了一下输入模式。使用 ReadInputDataBits 读取。 //bsp_button.c #include &q…

SpringCloudAlibaba系列之Nacos配置管理

目录 说明 认识配置中心 Nacos架构图 Nacos配置管理实现原理 核心源码分析-客户端 核心源码分析-服务端 配置修改的实时通知 主流配置中心对比 小小收获 说明 本篇文章主要目的是从头到尾比较粗粒度的分析Nacos配置中心的一些实现&#xff0c;很多细节没有涉及&#…

uniapp H5预览PDF支持手势缩放、分页、添加水印、懒加载、PDF下载

效果预览 项目说明 uniapp vue2 node&#xff1a;v14.18.3 npm&#xff1a; 6.14.15 安装pdfh5.js插件 pdfh5 - npm (npmjs.com)pdfh5.js 基于pdf.js和jQuery pdfh5 - npm (npmjs.com) npm install pdfh5 由于我安装最新的pdfh5.js后运行时报错 所以我选择降低版本,可能是node…

【Node.js入门】1.2 部署Node.js开发环境

1.2 部署Node.js开发环境 在 Windows 系统上安装 Node.js 两种文件格式的安装包 Windows安装包&#xff08;.msi&#xff09;Windows二进制文件&#xff08;.exe&#xff09;安装包 检查Node.js版本 node --version 在 Linux 系统上安装 Node.js Linux操作系统上安装Nod…

基础:JavaScript的怪癖之一:提升(Hoisting)

JavaScript&#xff0c;通常被称为“Web 语言”&#xff0c;是一种多功能且广泛使用的编程语言。它以其怪癖而闻名&#xff0c;其中之一就是 hoisting&#xff08;提升&#xff09;。无论你是经验丰富的开发人员还是刚刚开始你的编码之旅&#xff0c;理解提升对于编写干净和高效…

汽车标定技术(六)--基于模型开发如何生成完整的A2L文件(2)

目录 1. 自定义ASAP2文件 2. asap2userlib.tlc需要修改的部分 3. 标定量观测量地址替换 3.1 由elf文件替换 3.2 由map文件替换 3.3 正则表达式&#xff08;含asap2post.m修改方法&#xff09; 4.小结 书接上文汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)-C…

时间序列预测中的数据分析->周期性、相关性、滞后性、趋势性、离群值等特性的分析方法

本文介绍 本篇文章给大家介绍的是&#xff0c;当我们在进行有关时间序列相关的工作或者实验时&#xff0c;需要对数据进行的一些数据分析操作(包括周期性、相关性、滞后性、趋势性、离群值等等分析)的方法。在本篇文章中会以实战的形式进行讲解&#xff0c;同时提供运行代码和…

若依 验证码出不来 Fontconfig head is null, check your fonts or fonts configuration

是因为使用的OenJDK不支持awt包下的字体 解决方法&#xff1a; 安装FontConfig组件即可 yum install -y fontconfig

C语言--分段函数--switch语句

如何用switch语句写分段函数呢&#xff1f;⭐️ 首先介绍一下switch语句的语法规则⭐️ switch(整形表达式) {case 常量表达式1&#xff1b; //标签必须唯一语句块1;break;case 常量表达式2&#xff1b; //if(a0),而case中时系统自动加语句块2&#xff1b;break&#xff1b;c…

每天一点python——day65

#每天一点Python——65 #字符串的内容对齐操作类似于word中左对齐、右对齐、居中对齐如图 #例&#xff1a; s1hello,python print(s1.center(20,*))#设置宽度20&#xff0c;填充图是*s1有12个字符&#xff0c;这个字符串的宽度设置为20&#xff0c; 20-128 因为center是居中对齐…

MVCC中的可见性算法

在之前的文章 MVCC详解-CSDN博客中我们已经介绍过了MVCC的原理&#xff08;read viewundo log&#xff09;&#xff0c;今天来详细的说一下readview的匹配规则&#xff08;可见性算法&#xff09; 隔离级别在RC&#xff0c;RR的前提下 Read View是如何保证可见性判断的呢&#…

多篇论文介绍-摘要

论文地址https://arxiv.org/pdf/2301.10051.pdf 目录 01CIEFRNet&#xff1a;面向高速公路的抛洒物检测算法 02改进 YOLOv5 的 PDC 钻头复合片缺损识别 03 基于SimAM注意力机制的DCN-YOLOv5水下目标检测 04 基于改进YOLOv7-tiny 算法的输电线路螺栓缺销检测 ​编辑05 基于改进Y…