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.reposed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum 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: 654321volumes: 				//数据卷- /tmp/mysql/data:/var/lib/mysql- /tpm/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cofweb: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

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

待续未完

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

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

相关文章

高性能三防工业平板电脑 防摔防爆电容屏工控平板

HT1000是一款高性能工业三防平板&#xff0c;10.1英寸超清大屏&#xff0c;厚度仅14.9mm&#xff0c;超薄机身&#xff0c;可轻松插入袋中&#xff0c;方便携带&#xff0c;搭载8核2.0GHz高性能CPU&#xff0c;行业领先的Android 11.0&#xff0c;设备性能大幅提升&#xff0c;…

机器人制作开源方案 | 管内检测维护机器人

一、作品简介 作者&#xff1a;李泽彬&#xff0c;李晋晟&#xff0c;杜张坤&#xff0c;禹馨雅 单位&#xff1a;运城学院 指导老师&#xff1a;薛晓峰 随着我国的社会主义市场经济的飞速发展和科学技术的革新&#xff0c;各行各业的发展越来越离不开信息化和网络化的…

【深度学习】卷积层填充和步幅以及其大小关系

参考链接 【深度学习】&#xff1a;《PyTorch入门到项目实战》卷积神经网络2-2&#xff1a;填充(padding)和步幅(stride) 一、卷积 卷积是在深度学习中的一种重要操作&#xff0c;但实际上它是一种互相关操作&#xff0c;&#xff0c;首先我们来了解一下二维互相关&#xff…

ros1 自定义topic 主题的发布,监听以及和消息体的定义

1. 在功能包下新增msg 文件夹 在功能包的下面新建 msg 文件夹&#xff0c;如下图所示 2. 新增Person.msg 消息实体 右键打开命令框&#xff0c;输入 touch Person.msg 就会在msg 目录下新增 Person.msg 文件 在Person.msg中输入如下内容完成.msg文件的创建&#xff0c;msg文…

关于卷积神经网络中如何计算卷积核大小(kernels)

首先需要说明的一点是&#xff0c;虽然卷积层得名于卷积&#xff08; convolution &#xff09;运算&#xff0c;但我们通常在卷积层中使用更加直观的计算方式&#xff0c;叫做互相关&#xff08; cross-correlation &#xff09;运算。 也就是说&#xff0c;其实我们现在在这里…

安装 Node.js

首先&#xff0c;我们需要安装 Node.js 和相关的库&#xff0c;如 request 和 cheerio。 npm install request cheerio然后&#xff0c;我们可以使用以下代码来爬取网页内容&#xff1a; const request require(request); const cheerio require(cheerio);request({url: js…

基于ubuntu1604的ROS安装

不同版本的Ubuntu都有对应的ROS版本&#xff0c;不要强行安装不对应的版本&#xff0c;否则遇到问题会很难找到解决方法。此教程也只是基于Ubuntu1604和kinetic版本的ROS。 一、基本流程 以下命令仅记录执行顺序&#xff0c;不要无脑复制执行&#xff0c;重在理解 #基本更新…

Linux学习第35天:Linux LCD 驱动实验(二):星星之火可以燎原

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、LCD驱动程序编写 需要注意的地方&#xff1a; ①、 LCD 所使用的 IO 配置。 ②、 LCD 屏幕节点修改&#xff0c;修改相应的属性值&#xff0c;换成我们所使…

JavaScript爬虫程序爬取游戏平台数据

这次我用一个JavaScript爬虫程序&#xff0c;来爬取游戏平台采集数据和分析的内容。爬虫使用了爬虫IP信息&#xff0c;爬虫IP主机为duoip&#xff0c;爬虫IP端口为8000。以下是每行代码和步骤的解释&#xff1a; // 导入所需的库 const axios require(axios); const cheerio …

京东数据分析:2023年9月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台9月份打印机市场销售数据已出炉&#xff01; 鲸参谋数据显示&#xff0c;今年9月&#xff0c;京东平台打印机的销量为60万&#xff0c;环比增长约32%&#xff0c;同比下滑约25%&#xff1b;销售额为5亿&#xff0c;环比增长约35%&#xff0c;同比下滑约29%…

Notepad++中删除连续的任意n行

使用Notepad里的行标记功能&#xff0c;可以删除指定的任意n行。 案例1&#xff0c;删除sample2.dat里的第201行到第10000行。方法如下&#xff1a; (1) 用户NotePad打开sample2.dat&#xff0c;右击201行 —》“开始/结束”/开始 图(1) 选择行的起点&#xff1a;201 (2) 接…

做什么数据表格啊,要做就做数据可视化

是一堆数字更易懂&#xff0c;还是图表更易懂&#xff1f;很明显是图表&#xff0c;特别是数据可视化图表。数据可视化是一种将大量数据转化为视觉形式的过程&#xff0c;通过图形、图表、图像等方式呈现数据&#xff0c;以便更直观地理解和分析。 数据可视化更加生动、形象地…

蓝桥杯每日一题203.11.7

题目描述 题目分析 使用dp思维&#xff0c;当前位置是否可行是有上一位置推来&#xff0c;计算出最大的可行位置即可 #include <stdio.h> #include <string.h>#define N 256 int f(const char* s1, const char* s2) {int a[N][N];int len1 strlen(s1);int len2 …

kafka笔记要点和集群安装、消息分组、消费者分组以及与storm的整合机制

kafka笔记 1/kafka是一个分布式的消息缓存系统 2/kafka集群中的服务器都叫做broker 3/kafka有两类客户端&#xff0c;一类叫producer&#xff08;消息生产者&#xff09;&#xff0c;一类叫做consumer&#xff08;消息消费者&#xff09;&#xff0c;客户端和broker服务器之间…

【分布式事务】初步探索分布式事务的概率和理论,初识分布式事的解决方案 Seata,TC 服务的部署以及微服务集成 Seata

文章目录 一、分布式服务案例1.1 分布式服务 demo1.2 演示分布式事务问题 二、分布式事务的概念和理论2.1 什么是分布式事务2.2 CAP 定理2.3 BASE 理论2.4 分布式事务模型 三、分布式事务解决方案 —— Seata3.1 什么是 Seata3.2 Seata 的架构3.3 Seata 的四种分布式事务解决方…

AIGPT重大升级,界面重新设计,功能更加饱满,用户体验升级

AIGPT AIGPT是一款功能强大的人工智能技术处理软件&#xff0c;不但拥有其他模型处理文本认知的能力还有AI绘画模型、拥有自身的插件库。 我们都知道使用ChatGPT是需要账号以及使用魔法的&#xff0c;实现其中的某一项对我们一般的初学者来说都是一次巨大的挑战&#xff0c;但…

Fourier分析导论——第4章——Fourier级数的一些应用(E.M. Stein R. Shakarchi)

第 4 章 傅里叶级数的一些应用 Fourier series and analogous expansions intervene very naturally in the general theory of curves and surfaces. In effect, this theory, conceived from the point of view of analysis, deals obviously with the study of arbitra…

三款软件录制电脑屏幕视频

在这个视频信息快速发展的新时代&#xff0c;寻找好用的可以录制电脑屏幕视频的软件变得极其重要&#xff0c;因为制作视频已成为我们生活工作中不可或缺的一部分。 这些好用的录屏软件允许你录制摄像头、特定窗口、部分区域或整个桌面&#xff0c;同时还可对录制中的视频进行…

前沿技术:人工智能的未来之路

&#x1f38a;专栏【人工智能】 &#x1f33a;每日一句&#xff1a;天空黑暗到一定程度&#xff0c;星辰就会熠熠生辉&#xff01; ⭐欢迎并且感谢大家指出我的问题 文章目录 一、引言 二、人工智能的未来发展 三、人工智能发展面临的挑战 四、结论 一、引言 随着科技的不…

开源项目管理工具Helper的安装及汉化

什么是 Helper &#xff1f; Helper 是基于 Laravel 和 Filament 的开源项目管理工具。 官方提供了在线演示&#xff1a;https://project-helper.net 安装 在群晖上以 Docker 方式安装。 数据库理论上是可以使用群晖自带的 MariaDB 的&#xff0c;但老苏为了省事&#xff0c…