day02 -- docker
1.docker的介绍
Docker 是一个开源的应用容器引擎,基于 Go语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
镜像:将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像(模板)
容器:为每个镜像的应用进程创建的隔离运行环境就是容器(实例)
镜像仓库:存储和管理镜像的地方就是镜像仓库,DockerHub是目前最大的镜像仓库,其中包含各种常见的应用镜像
2.docker的安装
2.1 卸载旧版本
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
2.2 设置Docker仓库
yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2
sudo yum install -y yum-utils
截图如下:
官方docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
华为源
sudo yum-config-manager --add-repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
阿里docker仓库
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
清华docker仓库
sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
腾讯源
yum-config-manager --add-repo=https://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo
建议使用国内源等
2.3 安装 Docker Engine-Community
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
2.4 配置docker hub加速器(国内源)
sudo vi /etc/docker/daemon.json
修改内容如下:
{ "registry-mirrors": [ "https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://hub.geekery.cn","https://dockerpull.com","https://docker.m.daocloud.io","https://docker.mirrors.ustc.edu.cn"]
}
加载配置,启动Docker服务,查看镜像是否配置成功
sudo systemctl daemon-reload
sudo systemctl start docker
sudo docker info
在输出信息中,你应该能看到Registry Mirrors
部分,并且列出了你添加的镜像源地址
2.5 设置docker开机自启
systemctl enable docker
也有停止(stop),重启(restart),检查状态(status)命令
2.6 创建mysql容器
docker run -d --name mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=12345678 mysql
3.docker的常见命令
所有命令都可以通过--help
进行查看
3.1 命令解读
docker run -d --name mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=12345678 mysql
命令解释
docker run :创建并运行一个容器
-d 是让容器在后台运行
--name mysql :给容器起个名字,必须唯一
-p 3306:3306 :设置端口映射
-e KEY=VALUE :是设置环境变量
mysql :指定运行的镜像名称
镜像命名规范
镜像名称一般分两部分组成:[repository]:[tag]
其中repository就是镜像名,tag是镜像的版本
在没有指定tag时,默认是latest,代表最新版本的镜像
常见命令图
详见官方文档
3.2 镜像命令
可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址
3.2.1 查看镜像 – docker images
docker images
3.2.2 仓库拉取镜像 – docker pull
docker pull 镜像名称
例:拉取nginx
docker pull nginx
3.2.3 保存镜像文件 – docker save
docker save -o 文件名.tar 镜像名称
例:将nginx镜像保存到本地
docker save -o nginx.tar nginx:latest
3.2.4 加载镜像文件 – docker load
docker load -i 镜像文件
注:镜像文件中的镜像在docker中没有拉取才能成功加载进去,否则需要删除镜像后,再把外部的镜像加载进去
docker load -i nginx.tar
3.2.5 构建镜像 --docker build
需要自己编写Dockerfile文件,实例参照自定义镜像节
docker build -t 镜像名 Dockerfile目录
3.2.6 删除镜像 --docker rmi
docker rmi 镜像名称
例:删除nginx
docker rmi nginx
3.3 容器命令
3.3.1 查看容器状态
默认只查看运行中的容器状态,可加-a
查看所有容器的状态
docker ps
3.3.2 格式输出
docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}\t{{.Image}}"
3.3.3 查看容器运行日志
默认后台运行,可加-f
实现前台运行,ctrl+C
退出
docker logs 容器名
3.3.4 进入容器
docker exec -it 容器名 bash
例:进入mysql容器,退出exit
docker exec -it mysql bash
进入数据库
mysql -uroot -p
输入密码,即可进入数据库
3.3.5 停止容器
docker stop 容器名
3.3.6 启动容器
docker start 容器名
3.3.7 删除容器
docker rm 容器名
3.4 别名
实际上就是相当于设置快捷键
vi ~/.bashrc
第一次打开会有默认的配置
也可以自己加进去
alias dps='docker ps --format "table {{.Names}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}\t{{.Image}}"'
重新加载
source ~/.bashrc
4.docker数据卷与本地目录的挂载
4.1 数据卷挂载
数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据
挂载数据卷
在创建容器时,利用 -v 数据卷名:容器内目录完成挂载
容器创建时,如果发现挂载的数据卷不存在时,会自动创建
常见命令
# 查看数据卷
docker volume ls
# 删除数据卷
docker volume rm
# 查看数据卷详情
docker volume inspect
# 删除未使用的数据卷
docker volume prune
例:利用Nginx容器部署静态资源
- 创建Nginx容器,修改nginx容器内的html目录下的index.html文件内容
- 将静态资源部署到nginx的html目录
注:在执行docker run命令时,使用 -v 数据卷:容器内目录
可以完成数据卷挂载;当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
1.将静态资源上传
2.创建容器
docker run -d \
--name nginx \
-p 80:80 \
-v html:/usr/share/nginx/html \
nginx
3.查看卷
docker volume ls
docker volume inspect html
只要本地文件系统的挂载文件变化对应的容器里的文件也会发送变化
4.2 本地目录挂载
与挂载数据卷类似,
挂载本地目录
在创建容器时,利用 -v 本地目录:容器内目录
完成挂载
例如:
mysql容器的数据挂载
查看mysql容器,判断是否有数据卷挂载
基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)
- 挂载/root/mysql/data到容器内的/var/lib/mysql目录
- 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本
- 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录,携带课前资料准备的配置文件
注:
本地目录必须以“/”或 “./” 开头,如果直接以名称开头,会被识别为数据卷而非本地目录
- -v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql
- -v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录
- 上传资源
- 创建容器
docker run -d --name mysql -p 3306:3306 -v /root/mysql/data:/var/lib/mysql -v /root/mysql/init:/docker-entrypoint-initdb.d -v /root/mysql/conf:/etc/mysql/conf.d --network heima -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql
3.连接数据库查看
5.自定义镜像
5.1 镜像结构
5.2 Dockerfile
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
例:
Java项目先打包(maven中package),在把打包后的jar包和Dockerfile上传到同一个目录下,在这个目录下再进镜像构建,创建容器
1. 上传资源
2. 构建镜像
docker build -t hmall .
3. 创建容器
docker run --name hmall --network heima -p 8080:8080 -d hmall
参考博客:docker快速入门
6.容器网络互连
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥(docker0 172.17.0.1/16)上
6.1 相关命令
命令 | 说明 |
---|---|
docker network create | 创建网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详情 |
加入自定义网络的容器才可以通过容器名互相访问,默认网络下容器间不能相互访问
6.2 案例
例:创建自定义网络,创建容器加入此网络
docker network create cat
docker network ls
docker run --name hmall -p 8080:8080 -d --network cat hmall
注:容器名不能与现有的容器名重复
7.项目部署
部署前请先清空容器与镜像,防止创建时冲突
例:黑马商城
7.1 自定义网络
docker network create catgod007
7.2 数据库容器部署
1.上传资源
2.创建容器
docker run -d --name mysql -p 3306:3306 -v /root/mysql/data:/var/lib/mysql -v /root/mysql/init:/docker-entrypoint-initdb.d -v /root/mysql/conf:/etc/mysql/conf.d --network catgod007 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql
也可以用数据库可视化工具查看数据库表是否都在
7.3 后端项目容器部署
1.资源上传
把hmall项目用idea打开,用maven中的package进行打包(会在与src同级的target目录中出现);把dockerfile和jar包上传
2.构建镜像
docker build -t hmall .
3.创建容器
docker run --name hmall --network catgod007 -p 8080:8080 -d hmall
7.4 前端项目容器部署
1.上传资源
将资料提供的nginx.conf、html目录与容器挂载(nginx整个文件夹上传)
nginx的配置文件(nginx.conf
)中的8080前域名要与后端部署的容器名保持一致(默认hmall)
2.创建容器
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network catgod007 \
nginx
7.5 最终展示
浏览器输入ip地址:18080
8.docker compose 部署容器
8.1 Docker Compose介绍
Docker Compose通过一个单独的docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署
常见命令
上面的项目部署可以改成通过docker-compose.yml
一键部署
version: "3"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"- "./mysql/init:/docker-entrypoint-initdb.d"networks:- cat-nethmall:build: context: .dockerfile: Dockerfilecontainer_name: hmallports:- "8080:8080"networks:- cat-netdepends_on:- mysqlnginx:image: nginxcontainer_name: nginxports:- "18080:18080"- "18081:18081"volumes:- "./nginx/nginx.conf:/etc/nginx/nginx.conf"- "./nginx/html:/usr/share/nginx/html"depends_on:- hmallnetworks:- cat-net
networks:cat-net:name: catgod007
注:
- docker-compose.yml主要分为项目(Project)与服务(Services)
- 服务相关参数与docker构建容器差不多,部分如下:
- depends_on ;依赖,及前端依赖后端,后端依赖数据库
8.2 案例:一键部署项目
1.上传docker-compose.yml到/root
2.清空容器和镜像
3.通过docker-compose.yml部署容器
docker compose up -f ./docker-compose.yml -p catgod007 -d
docker-compose.yml在当前目录下,可省略-f ./docker-compose.yml
-p catgod007
指定名字,不指定默认root
-d
后台运行
docker compose up -d
4.通过浏览器进行访问
浏览器输入ip地址:18080
感谢大家的支持,关注,评论,点赞!
相关文章:

day02 -- docker
1.docker的介绍 Docker 是一个开源的应用容器引擎,基于 Go语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使…...

ecmascript标准
1. 简介 1.1. 概述 ECMAScript(简称ES)是JavaScript编程语言的一个标准化版本。它是为网络开发设计的一种轻量级的脚本语言,主要用于在网页上实现交互性和动态效果。ECMAScript是该语言的标准名称,而JavaScript是其最知名和广泛使用的实现。 1.2. 特点 跨平台性 :ECMAS…...

在Linux命令行中一行执行多个命令
原文地址链接: https://kashima19960.github.io/2024/10/22/Linux/在Linux命令行中一行执行多个命令/,一般有最新的修改都是在我的个人博客里面,所以在当前平台的更新会比较慢,请见谅😃 前言 在shell中一个一个命令行,…...

u盘快速格式化后怎么恢复文件:深入解析与全面指南
U盘,凭借其小巧便携、易于使用的特点,成为了我们日常生活中不可或缺的数据存储工具。然而,有时为了清除病毒、解决文件系统错误或准备存储新数据,我们可能需要对U盘进行快速格式化。但这一操作往往伴随着一个严峻的问题࿱…...

青少年编程能力等级测评CPA C++(二级)试卷(2)
青少年编程能力等级测评CPA C(二级)试卷(2) 一、单项选择题(共20题,每题3.5分,共70分) CP2_2_1.下列C程序段中,对二维数组arr的定义不正确是( &…...

aws 把vpc残留删除干净
最近忘了把vpc 删干净导致又被收了冤大头钱 在删除vpc 的收发现又eni在使用,但是忘了是哪个资源在占用 先用命令行把占用的资源找出来停掉 使用 AWS 命令行界面(CLI)来查看 VPC 的使用情况 列出子网: aws ec2 describe-subnets …...

平衡二叉树最全代码
#include<stdio.h> #include<stdlib.h>typedef struct Node {int val;int height;struct Node *left;struct Node *right; }Node;//创建新结点 Node* newNode(int val) {Node *node (Node*)malloc(sizeof(Node));node->val val;node->height 1;node->l…...

数据库表的创建
运用的环境是pychram python3.11.4 创建一个表需要用到以下语法 注释已经写清楚各种语法的含义,记住缩进是你程序运行的关键,因为程序是看你的缩进来判断你的运行逻辑,像我这个就是缩进不合理导致的报错 那么今天分享就到这里,谢…...

【MySQL 数据库】之--基础知识
1. MySQL 数据库基础概念 数据库: 逻辑上存储和管理数据的集合。MySQL 是一个常用的关系型数据库管理系统。 2. 创建数据库 要创建一个新的数据库,可以使用 CREATE DATABASE 语句。 语法: CREATE DATABASE 数据库名; 示例: CREATE DATABASE my_database; 注意事…...

Flume面试整理-如何处理Flume中的数据丢失
在Apache Flume中,数据丢失是一个可能出现的严重问题,特别是在处理大规模数据时。数据丢失通常会发生在数据从Source(源)到Channel(通道),或从Channel到Sink(汇)传输的过程中。如果不处理得当,Flume的崩溃或网络故障可能会导致丢失的数据无法恢复。以下是几种常见的F…...

文件处理新纪元:微信小程序的‘快递员’与‘整理师’
嗨,我是中二青年阿佑,今天阿佑将带领大家如何通过巧妙的文件处理功能,让用户体验从‘杂乱无章’到‘井井有条’的转变! 文章目录 微信小程序的文件处理文件上传:小程序的“快递服务”文件下载:小程序的“超…...

应付账款优化,自动化管理5要点
优化应付账款流程对企业现金流至关重要。通过自动化、规范采购订单、管理供应商、设计高效流程及保留数字记录,可显著提升效率与精确度。ZohoBooks在线财务记账软件助您简化应付账款处理,确保业务顺畅。 1、自动化您的应付账款流程 通过自动化你的应付账…...

Win安装Redis
目录 1、下载 2、解压文件并修改名称 3、前台简单启动 4、将redis设置成服务后台启动 5、命令启停redis 6、配置文件设置 1、下载 【下载地址】 2、解压文件并修改名称 3、前台简单启动 redis-server.exe redis.windows.conf 4、将redis设置成服务后台启动 redis-server -…...

手把手带你安装U9【win10+sql+U9】,同样适用U9C的安装
一、Win10操作系统设置 1、Windows 10内置账号administrator启用 a、登录到Windows 10系统以后,鼠标右键点击桌面左下角“win图标”,在弹出画面选择“命令提示符(管理员)”或”windows power shell(管理员)”,如下图: b、在”命令提示符(管理员)”或”windows power sh…...

若依前后端框架学习——新建模块(图文详解)
若依框架—新建模块 一、项目地址1、后端启动2、前端启动 二、生成代码1、添加菜单2、创建表结构3、生成代码2、编辑一些基本信息,然后点击提交3、生成代码,压缩包里有前端和后端代码 三、配置后端模块1、新建模块2. 修改pom.xlm2.1 修改第一个pom.xml 2…...

【LaTeX和Word版】写论文时如何调整公式和文字的间距
在撰写论文时,公式和文字段落的间距可能会显得不一致,特别是插入的公式占用单独一行时。这种情况下,可以通过以下两种方法来调整公式和文字段落的间距,使论文排版看起来更加整齐和一致。 1. 使用 LaTeX 调整段落间距 (1) 调整行…...

快乐数--双指针
一:题目 题目链接:. - 力扣(LeetCode) 二:算法原理 三:代码编写 int Sum(int n){int sum 0;while(n){sum pow(n%10,2);n / 10;}return sum;}bool isHappy(int n) {int slow n,fast Sum(n);while(slow …...

论文阅读-三维结构几何修复(导-4)
摘要 解决了3D数字模型中大洞修复的问题。 通过基于字典学习的方法解决了缺失区域推断问题,该方法利用从单个自相似结构和在线深度数据库中得出的几何先验。利用几何先验提供的线索,从洞的边界周围自适应地传播局部3D表面平滑性来恢复底层表面。在合成…...

数字货币交易所源码开发:场外(OTC)与币币交易所系统的构建指南
在区块链技术迅速发展的推动下,数字货币市场的需求大幅增加。数字货币交易所作为加密货币的主要交易场所,成为了开发者和企业关注的焦点。市场上有多种交易模式可供选择,最常见的是场外交易(OTC)和币币交易。本篇文章将…...

C++ 进阶:类相关特性的深入探讨
⭐在对C 中类的6个默认成员函数有了初步了解之后,现在我们进行对类相关特性的深入探讨! 🔥🔥🔥【C】类的默认成员函数:深入剖析与应用(上) 【C】类的默认成员函数:深入剖…...

C++ 多态、虚析构、模板类、常函数、虚继承、虚函数和纯虚函数相关知识和问题总结
1. C 中的多态 多态(Polymorphism)是面向对象编程中的一个重要特性,它允许使用相同的接口来表示不同的类型。由于派生类重写基类方法,然后用基类引用指向派生类对象,调用方法时候会进行动态绑定,这就是多态…...

计算机组成原理一句话
文章目录 计算机系统概述存储系统指令系统 计算机系统概述 指令和数据以同等地位存储在存储器中,形式上没有差别,但计算机应能区分他们。通过指令周期的不同阶段。 完整的计算机系统包括,1)软件系统:程序、文档和数据&…...

【Linux】僵尸进程和孤儿进程
一、僵尸进程 何为僵尸进程? 在 Unix/Linux 系统中,正常情况下,子进程是通过父进程创建的,且两者的运行是相互独立的,父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时ÿ…...

Patchcore运行过程
论文github地址:https://github.com/amazon-science/patchcore-inspection 平台:autodl云服务器 1.将下载的代码上传到autodl-tmp/PatchCore里面解压,将数据集上传path_to_mvtec_folder/mvtec里,目录结构如图 2.安装依赖 cd au…...

一小时快速入门Android GPU Inspector
本文介绍如何使用 Android GPU Inspector (AGI) 对Android 应用进行系统性能分析和帧性能分析 。面向熟悉Android图形的开发者。 待分析应用需要的前置条件 (1) 将应用设置为可调试状态 <application [...] android:debuggable"true">(2)…...

二叉树展开为链表
二叉树展开为链表 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…...

基于SpringBoot+Vue+uniapp微信小程序的教学质量评价系统的详细设计和实现
项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

【二刷hot100】day 4
终于有时间刷刷力扣,求实习中。。。。 目录 1.最大子数组和 2.合并区间 3.轮转数组 4.除自身以外数组的乘积 1.最大子数组和 class Solution {public int maxSubArray(int[] nums) {//就是说可以转换为计算左边的最大值,加上中间的值,…...

10.22学习
1.求余 在C语言中,求余操作是通过取模运算符 % 来实现的。取模运算符会返回两个数相除后的余数。对于正数和负数的除法,求余的结果会有所不同,但 % 运算符总是返回被除数的符号。 下面是一个简单的例子,展示如何使用 % 运…...

【不要离开你的舒适圈】:猛兽才希望你落单,亲人总让你回家,4个维度全面构建舒适圈矩阵
单打独斗的英雄时代已经落幕 抱团取暖才是社会寒冬的良策 自然界中,每个物种都占据着自己的领地和生存空间。 生态位的差异决定了它们的生存方式,一旦离开领地,失去群体的庇护,就会沦为野兽的美餐。 人类社会同样存在隐形圈层…...