03初始Docker

一、初始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: registryvolumes:- ./registry-data:/var/lib/registryui:image: joxit/docker-registry-ui:staticports:- 8080:80environment:- REGISTRY_TITLE=私有仓库- REGISTRY_URL=http://registry:5000depends_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.mzph.cn/news/117514.shtml

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

相关文章

聚观早报 | vivo Y100官宣;极氪001 FR将上市

【聚观365】10月25日消息 vivo Y100官宣 一极氪001 FR将上市 特斯拉加速扩张 苹果扩大招聘力度 小米澎湃OS实现历史性跨越 vivo Y100官宣 vivo Y系列是vivo存在比较久的入门系列&#xff0c;主打千元价位的线下市场&#xff0c;在消费者中有着不错的口碑。而不久前一款型…

代码随想录算法训练营第二十九天 | 回溯算法总结

​ 代码随想录算法训练营第二十九天 | 回溯算法总结 1. 组合问题 1.1 组合问题 在77. 组合中&#xff0c;我们开始用回溯法解决第一道题目&#xff1a;组合问题。 回溯算法跟k层for循环同样是暴力解法&#xff0c;为什么用回溯呢&#xff1f;回溯法的魅力&#xff0c;用递…

ubuntu tools

1 cloc calculate lines of your code sudo apt-get install cloccloc ./file

【MySQL架构篇】SQL执行流程与缓冲池

文章目录 1. SQL执行流程2. 数据库缓冲池(Buffer Pool)2.1 缓冲池概述2.2 缓冲池如何读取数据2.3 查看和设置缓冲池的大小2.4 多个Buffer Pool实例2.5 引申问题 1. SQL执行流程 查询缓存&#xff1a;因为查询效率往往不高&#xff0c;所以在MySQL8.0之后就抛弃了这个功能解析器…

lvs+keepalived: 高可用集群

lvskeepalived: 高可用集群 keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用&#xff0c;于是keepalived软件。实现的是调度器的高可用。 但是&#xff1a;keepalived不是专门为集群服务的&#xff0c;也可以做其他服务器的高可用。 lvs的高可用集群&#xf…

力扣第1005题 K 次取反后最大化的数组和 c++ 贪心 双思维

题目 1005. K 次取反后最大化的数组和 简单 相关标签 贪心 数组 排序 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以…

asp.net乡村旅游管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net乡村旅游管理系统是一套完善的web设计管理系统系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net乡村旅游管理系统 二、…

【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】

【在英伟达nvidia的jetson-orin-nx和PC电脑ubuntu20.04上-装配ESP32开发调试环境-基础测试】 1、概述2、实验环境3、 物品说明4、参考资料与自我总结5、实验过程1、创建目录2、克隆下载文件3、 拉取子目录安装和交叉编译工具链等其他工具4、添加环境变量6、将样例文件拷贝到桌面…

【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步

MySQL数据同步到Elasticsearch之N种方案解析&#xff0c;实现高效数据同步 前提介绍MySQL和ElasticSearch的同步双写优点缺点针对于缺点补充优化方案 MySQL和ElasticSearch的异步双写优点缺点 定时延时写入ElasticSearch数据库机制优点缺点 开源和成熟的数据迁移工具选型Logsta…

软考系列(系统架构师)- 2016年系统架构师软考案例分析考点

试题一 软件架构&#xff08;质量属性、架构风格对比、根据描述填空&#xff09; 试题二 系统开发&#xff08;用例图参与者、用例关系、类图关系&#xff09; 学生、教师、管理员、时间、打印机【问题2】&#xff08;7分&#xff09; 用例是对系统行为的动态描述&#xff0c;用…

ant框架下 a-input-number组件的宽度问题

如图所示&#xff0c;在使用a-input-number组件时虽然设置了宽度但是没有生效&#xff0c;加上了一个!important就好了&#xff1a;

【Java 进阶篇】使用 Java 和 Jsoup 进行 XML 处理

XML&#xff08;可扩展标记语言&#xff09;是一种常用的数据交换格式&#xff0c;它被广泛用于在不同系统之间传递和存储数据。Java作为一种强大的编程语言&#xff0c;提供了多种方式来处理XML数据。其中&#xff0c;Jsoup 是一个流行的Java库&#xff0c;用于解析和操作XML文…

Leetcode—2678.老人的数目【简单】

2023每日刷题&#xff08;八&#xff09; Leetcode—2678.老人的数目 int countSeniors(char ** details, int detailsSize){ int ans 0; int i; int tens 0; int ones 0; for(i 0; i < detailsSize; i) { tens ((details i) 11) - ‘0’; ones ((details i) 12)…

FOC系列(一)----DRV8301芯片的学习

一、 写在前面 从今年四五月份一直就想玩个无刷直流电机&#xff08;BLDC&#xff09;&#xff0c;但是碍于一直没时间。其实很早就做出来了测试板的控制板&#xff0c;可以当做开发板使用&#xff0c;考虑到成本问题&#xff0c;最后选用STM32F103CBT6芯片&#xff0c;下面是很…

Python爬虫网易云音乐,Tkinter制作音乐播放器

目录 一、效果展示 二、环境 三、实现过程 四、源码 一、效果展示 页面的美化以及功能还有待升级~ 先来说一下已有功能吧&#xff1a; 可以在搜索框中通过歌曲或歌手名称进行搜索&#xff0c;效果和在网易云官网搜索一样。 点击开始下载&#xff0c;就会将搜索结果的第一…

xshell+xming显示jmeter的gui页面

1.下载和安装xming&#xff0c;下载地址&#xff1a;https://sourceforge.net/projects/xming/ 2.配置xming 记住这个端口&#xff0c;一会要用到 修改进入xming安装目录修改host文件 此处是远程服务器的ip 3.服务器执行vi /etc/ssh/sshd_config&#xff0c;修改成如图所示…

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

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

SpringAOP源码解析之advice构建排序(二)

上一章我们知道Spring开启AOP之后会注册AnnotationAwareAspectJAutoProxyCreator类的定义信息&#xff0c;所以在属性注入之后initializeBean的applyBeanPostProcessorsAfterInitialization方法执行的时候调用AnnotationAwareAspectJAutoProxyCreator父类(AbstractAutoProxyCre…

CDC实时数据同步

一丶CDC实时数据同步介绍 CDC实时数据同步指的是Change Data Capture&#xff08;数据变更捕获&#xff09;技术在数据同步过程中的应用。CDC技术允许在数据源发生变化时&#xff0c;实时地捕获这些变化&#xff0c;并将其应用到目标系统中&#xff0c;从而保持数据的同步性。…

电脑软件:推荐一款非常强大的pdf阅读编辑软件

目录 一、软件简介 二、功能介绍 1、界面美观&#xff0c;打开速度快 2、可直接编辑pdf 3、非常强大好用的注释功能 4、很好用的页面组织和提取功能 5、PDF转word效果非常棒 6、强大的OCR功能 三、软件特色 四、软件下载 pdf是日常办公非常常见的文档格式&#xff0c;…