Day95 Docker

Docker的使用

1、Docker是什么

docker是一个用来管理镜像的容器

容器(container):可以装东西

镜像( image ):所谓的镜像,你可以认为就是一个虚拟机

虚拟机:用软件代理硬件来模拟整个计算机的这样一套软件就成为 虚拟机

镜像说白了 你可以理解成 一台一台小型的Linux机器,只不过这个机器,没有硬件都是由软件来构成的…

管理:可以启动镜像(开机) 、关闭镜像、操作镜像,镜像就是一台一台的虚拟机

例如,利用Docker快速的安装了MySQL,非常的方便,不过我们执行的命令到底是什么意思呢?

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

解读:

docker run -d:创建并运行一个容器,-d则是让容器以后台进程运行

–name mysql : 给容器起个名字叫mysql,你可以叫别的

-p 3306:3306 : 设置端口映射。

容器是隔离环境,外界不可访问。但是可以宿主机端口****映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。

容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。

格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口

-e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数

格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定

案例中,TZ``=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码

mysql: 设置镜像名称,Docker会根据这个名字搜索并下载镜像

格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号

在未指定TAG的情况下,默认是最新版本,也就是mysql:latest

2、Docker能干什么(开发中)

1.安装服务:安装MySQL 安装MQ 安装Redis 安装ELK 安装Jenkins … 所有我们学习这写些服务软件我们是能安装的

2.项目的部署

3.项目的容器化部署

4.构建自己的镜像

3、Docker的基本安装

Docker的安装
一、安装docker
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

6、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r

7、安装docker
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install # 例如:sudo yum install docker-ce-17.12.0.ce

8、启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version

下载不了镜像就参考这个地址:https://blog.csdn.net/ytp552200ytp/article/details/139514548

3.1、Docker的镜像问题

在这里插入图片描述

在这里插入图片描述

要想自己构建镜像,必须先了解镜像的结构。

镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖

因此,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运行配置等文件,并且打包而成

举个例子,我们要从0部署一个Java应用,大概流程是这样:

  • 准备一个linux服务(CentOS或者Ubuntu均可)
  • 安装并配置JDK
  • 上传Jar包
  • 运行jar包

那因此,我们打包镜像也是分成这么几步:

  • 准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)
  • 安装并配置JDK
  • 拷贝jar包
  • 配置启动脚本

上述步骤中的每一次操作其实都是在生产一些文件(系统运行环境、函数库、配置最终都是磁盘文件),所以镜像就是一堆文件的集合

但需要注意的是,镜像文件不是随意堆放的,而是按照操作的步骤分层叠加而成,每一层形成的文件都会单独打包并标记一个唯一id,称为Layer)。这样,如果我们构建时用到的某些层其他人已经制作过,就可以直接拷贝使用这些层,而不用重复制作

4、Docker的基本命令

https://blog.csdn.net/weixin_46028606/article/details/142663559

远程库的这个网站
https://hub-stage.docker.com/

docker images :查看本地仓库的所有镜像

docker ps -a :查看正在运行的容器(容器:镜像启动之后的实例)

docker run -d -p 镜像对外提供服务的端口:宿主机的端口 镜像的名字:镜像版本号 —>这就是通用启动镜像的命令

docker stop 容器id :关机

docker rm 容器id 删除这个容器

docker exec -it 容器id /bin/bash :进入到容器的内部

docker rmi 镜像id :删除这个镜像

docker stop docker ps -a :将所有正在运行的容器全部关闭

docker rm docker ps -a :删除所有的容器

导出一个正在运行的容器镜像
docker export container1 > container1.tar

导入一个镜像
docker import container1.tar container1:latest

补充:默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:

# Docker开机自启
systemctl enable docker# Docker容器开机自启
docker update --restart=always [容器名/容器id]

5、Docker下基本服务的安装

5.1、安装Tomcat
docker pull tomcat:8docker run -d -p 8888:8080 -v /usr/local/webapp:/usr/local/tomcat:webapps  tomcat:8
5.2、安装MySQL
docker pull mysql:5.7docker run --name some-mysql -v /usr/local/docker-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:5.7
5.3、安装Redis
docker pull redis:5.0docker run -d -p 6379:6379 -v /usr/local/data/:/data redis:5.0 redis-server --appendonly yes
5.4、Nginx的使用
docker pull nginx:版本号docker run --name some-nginx -v /usr/local/nginx-content:/usr/share/nginx/html:ro -d  -p 80:80 nginx:latest

6、Dockerfile的使用

这个是告诉我们如何构建自己的镜像

在这里插入图片描述

6.1、构建镜像第一种方式

先准备我们的资源数据
from centos:7 :从那个基础的镜像开始构建我们的镜像
maintainer xiaobobo :作者是谁
add jdk-8u161-linux-x64.tar.gz /usr/local :将前面的文件上传到镜像中并进行解压
add apache-tomcat-8.5.54.tar.gz /usr/local
env JAVA_HOME /usr/local/jdk1.8.0_161 :配置环境变量
env PATH J A V A H O M E : / b i n : JAVA_HOME:/bin: JAVAHOME:/bin:PATH
run cd /usr/local/apache-tomcat-8.5.54/webapps && rm -rf ROOT :运行咋们的Linux命令
add ROOT.war /usr/local/apache-tomcat-8.5.54/webapps/ :将前面的文件上传到镜像中的某一个位置不解压
cmd [“/usr/local/apache-tomcat-8.5.54/bin/catalina.sh”,“run”] :镜像启动的时候要执行的命令

6.2、构建镜像的第二种方式

from centos:7
maintainer xiaobobo
copy jdk-8u161-linux-x64.tar.gz /usr/local :这个命令表示的是只是复制不进行解压
run cd /usr/local && tar -zxvf jdk-8u161-linux-x64.tar.gz
copy apache-tomcat-8.5.54.tar.gz /usr/local
run cd /usr/local && tar -zxvf apache-tomcat-8.5.54.tar.gz
env JAVA_HOME /usr/local/jdk1.8.0_161
env PATH J A V A H O M E : / b i n : JAVA_HOME:/bin: JAVAHOME:/bin:PATH
run cd /usr/local/apache-tomcat-8.5.54/webapps && rm -rf ROOT
copy ROOT.war /usr/local/apache-tomcat-8.5.54/webapps/
expose 8080 :暴露某一个端口
entrypoint [“/usr/local/apache-tomcat-8.5.54/bin/catalina.sh”,“run”] :表示的是启动镜像执行的命令

注意

add:既要复制还要解压
copy:只是复制 不解压
expose:对外暴露端口
CMD:启动镜像的时候 执行的指令
entrypoint:启动镜像的时候 执行的指令
CMD和 entrypoint的区别是啥呢?
如果是有 多个 CMD指令和 多个 ENTRYPOINT指令的时候 CMD是有多个指令的之后 只会执行最后一个 ENTRYPOINT的话是所有的指令都要执行

6.3、还可以使用现成的Tomcat镜像来构建我们的项目

7、Docker-Compose的使用

比如我们在部署项目的时候 有 Tomcat(web项目) 有MySQL 还有 Nginx 那么这个时候 我们在部署这个项目的时候 那么一定有安装的先后顺序

Nginx---->Web项目----->依赖于MySQL

所以这个项目在一键部署的时候 就需要 先部署 MySQL 再部署 Web项目 最后才是 Nginx 这个逻辑才是对的

我们在部署项目的时候 确定部署的这个先后的顺序 其实有一个专业的名词 就叫做 容器的编排

Docker-compose他最重要的功能就是实现部署项目时候的容器编排 来解决启动的先后顺序

刚刚使用这个docker部署项目的时候 我们是单独部署的这个MySQL 现在我希望的是docker-compose 帮我们自动的将MySQL部署好 而不是单独的部署 web项目也是一样doker-compose帮我们去完成 不需要单独部署成项目

Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

7.1、安装docker-compose

#下载docker-compose文件
https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64

#将文件复制到/usr/local/bin环境变量下面
mv docker-compose /usr/local/bin

#给他一个执行权限
chmod +x /usr/local/bin/docker-compose

#查看是否安装成功
docker-compose -version

7.2、启动docker-compose
7.3、docker-compose.yml 的这个文件

version: ‘2’
services:
web:
build: ./web
ports:
- “9786:8080”
container_name: ‘web’
depends_on:
- mysql
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- /usr/local/docker-compose-01/mysql/data:/var/lib/mysql
ports:
- “3307:3306”
container_name: ‘mysql’

或者

version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"networks:- new
networks:new:name: hmall

yaml文件的参数

在这里插入图片描述

编写好docker-compose.yml文件,就可以部署项目了

docker compose [OPTIONS] [COMMAND]

在这里插入图片描述

教学演示:

# 1.进入root目录
cd /root# 2.删除旧容器
docker rm -f $(docker ps -qa)# 3.删除hmall镜像
docker rmi hmall# 4.清空MySQL数据
rm -rf mysql/data# 5.启动所有, -d 参数是后台启动
docker compose up -d
# 结果:
[+] Building 15.5s (8/8) FINISHED=> [internal] load build definition from Dockerfile                                    0.0s=> => transferring dockerfile: 358B                                                    0.0s=> [internal] load .dockerignore                                                       0.0s=> => transferring context: 2B                                                         0.0s=> [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster             15.4s=> [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:3546a17e6fb4ff4fa681c3  0.0s=> [internal] load build context                                                       0.0s=> => transferring context: 98B                                                        0.0s=> CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo   0.0s=> CACHED [3/3] COPY hm-service.jar /app.jar                                           0.0s=> exporting to image                                                                  0.0s=> => exporting layers                                                                 0.0s=> => writing image sha256:32eebee16acde22550232f2eb80c69d2ce813ed099640e4cfed2193f71  0.0s=> => naming to docker.io/library/root-hmall                                           0.0s
[+] Running 4/4✔ Network hmall    Created                                                             0.2s✔ Container mysql  Started                                                             0.5s✔ Container hmall  Started                                                             0.9s✔ Container nginx  Started                                                             1.5s# 6.查看镜像
docker compose images
# 结果
CONTAINER           REPOSITORY          TAG                 IMAGE ID            SIZE
hmall               root-hmall          latest              32eebee16acd        362MB
mysql               mysql               latest              3218b38490ce        516MB
nginx               nginx               latest              605c77e624dd        141MB# 7.查看容器
docker compose ps
# 结果
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
hmall               root-hmall          "java -jar /app.jar"     hmall               54 seconds ago      Up 52 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
mysql               mysql               "docker-entrypoint.s…"   mysql               54 seconds ago      Up 53 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
nginx               nginx               "/docker-entrypoint.…"   nginx               54 seconds ago      Up 52 seconds       80/tcp, 0.0.0.0:18080-18081->18080-18081/tcp, :::18080-18081->18080-18081/tcp

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

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

相关文章

WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查

目录 开始前准备的数据库dbblog如下: 第一步:创建项目后下载四个NuGet程序包 第二步:删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.XA…

多模态PaliGemma——Google推出的基于SigLIP和Gemma的视觉语言模型

前言 本文怎么来的呢?其实很简单,源于上一篇文章《π0——用于通用机器人控制的流匹配VLA模型:一套框架控制7种机械臂(改造了PaliGemma和ACT的3B模型)》中的π0用到了PaliGemma 故本文便来解读下这个PaliGemma 第一部分 PaliGemma 1.1 Pal…

微服务day03

导入黑马商城项目 创建Mysql服务 由于已有相关项目则要关闭DockerComponent中的已开启的项目 [rootserver02 ~]# docker compose down WARN[0000] /root/docker-compose.yml: version is obsolete [] Running 4/4✔ Container nginx Removed …

IAPP仿源码大师主界面UI

仿源码大师首页主界面的布局 首页,分类,需求,我的 就只有这几个界面内容而已 资源静态 没有任何动画和功能 纯UI布局 纯UI布局 https://pan.baidu.com/s/1Hc5nWQCZ_ckQlXXV82OYpA?pwd7826 https://caiyun.139.com/m/i?2i2MoYbkdze41 来源…

mmpretrainmmdetection环境配置

mmpretrain&mmdetection环境配置 适用于cuda11.3torch12.1的mmpretrain&mmdetection环境配置: 第一步:根据官网说明,找到对应cuda版本的torch,安装好torch: pip install torch1.12.1cu113 torchvision0.13.…

【数据湖及大数据方案】数据湖建设方案|数据源|数据流|元数据|数据仓库|指标池|数据清洗

建设大数据湖一体化平台旨在应对数据分散、管理混乱及利用低效等挑战。通过集中存储与管理跨平台数据,打破信息孤岛,实现数据资产的高效整合与利用。该平台强化数据标准、质量控制、开发运维及安全保障,提升数据治理成熟度。此外,…

搭建企业私有云 只需一台设备 融合计算、存储与K8s

Infortrend老牌存储厂商推出 KS 企业私有云产品,将计算节点、存储与Kubernetes整合在一套系统中,为企业提供高效稳定的专属本地私有云平台。 KS 同时内置 Kubernetes 平台和虚拟机管理程序,既能运行云原生容器化应用程序,例如大数…

[Redis] Redis主从复制模式

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

计算机毕业设计Hadoop+PySpark深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

iOS SmartCodable 替换 HandyJSON 适配记录

前言 HandyJSON群里说建议不要再使用HandyJSON,我最终选择了SmartCodable 来替换,原因如下: 首先按照 SmartCodable 官方教程替换 大概要替换的内容如图: 详细的替换教程请前往:使用SmartCodable 平替 HandyJSON …

16、论文阅读:Mamba YOLO:用于目标检测的基于 SSM 的 YOLO

Mamba YOLO: SSMs-Based YOLO For Object Detection 总结前言感受野为什么Transformer 的结构被引入,显著扩展了模型的感受野?状态空间模型SSM 介绍相关工作实时目标检测端到端目标检测器视觉状态空间模型 方法预处理整体架构ODSS BlockLocalSpatial Blo…

微信小程序 uniapp+vue老年人身体监测系统 acyux

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 过此方式促进老年人辅助程序信息流动和数据传输效率,提供一个内容丰富、功能多样、易于操作的老年人辅助程序…

Intellij IDE报错:[Information:java:javacTask:源发行版8需要目标发行版1.8]

Intellij IDE报错:[Information:java:javacTask:源发行版8需要目标发行版1.8] 处理方法 File->Settings->Build,execution,Deployment->Compiler->Java Compiler 进入该目录下,修改Per-module bytecode version,将该项目修改为8 合理的创…

Pr 沉浸式视频 - 自动 VR 属性

自动 VR 属性 Auto VR Properties是所有 VR 视频效果和视频过渡效果的通用选项。 默认勾选。此选项使效果自动适应 VR 素材的属性,确保在 360 全景环境中无缝显示。 当处理 VR/360 素材时,保持勾选以避免接缝。 当处理非 VR 素材或需要手动设置 VR 属性时…

[项目] C++基于多设计模式下的同步异步日志系统

[项目] C基于多设计模式下的同步&异步日志系统 文章目录 [项目] C基于多设计模式下的同步&异步日志系统日志系统1、项目介绍2、开发环境3、核心技术4、日志系统介绍4.1 日志系统的价值4.2 日志系统技术实现4.2.1 同步写日志4.2.2 异步写日志 5、相关技术知识5.1 不定参…

ubuntu下使用pocketsphinx进行语音识别

文章目录 前言一、pocketsphinx的介绍二、ubuntu下编译三、使用示例1.模型选择2.代码示例3.自定义字典 四、交叉编译总结 前言 由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源…

C语言原码、反码和补码的详解

C语言原码、反码和补码的详解 放在最前面的1、前言正数的原码、反码和补码负数的原码、反码和补码 2、整数的原码(2.1)原码的定义(2.2)计算原码 3、整数的反码(3.1)反码的定义(3.2)计…

知识课堂——高匿ip在不同业务中的重要作用

大家好!今天我们来看看高匿ip在不同业务中都能起到什么样的重要作用。第一个会用到的地方就是网络数据采集,也被称为网络爬虫,在是许多企业和机构获取大量数据的重要手段。例如市场调研公司帮助企业制定市场策略就需要收集各个行业的产品价格…

【青牛科技】GC8548替代LV8548/ONSEMI在摇头机、舞台灯、打印机和白色家电等产品上的应用分析

引言 在现代电子设备中,控制芯片的选择对产品的性能和可靠性至关重要。摇头机、舞台灯、打印机和白色家电等领域对芯片的要求日益增加,传统上多采用LV8548/ONSEMI等国际品牌的芯片。然而,随着国内半导体技术的不断进步,芯麦GC854…

【C/C++】字符/字符串函数(0)——由ctype.h提供

零.导言 众所周知,C语言的字符有许多不同的类型,如:数字,字母,标点符号等等等等。 今天,我就给大家讲解一下用于实现字符分类的函数——字符分类函数。 一.什么是字符分类函数? 即实现字符分类的…