Day95 Docker

news2024/11/9 2:38:16

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:8

docker run -d -p 8888:8080 -v /usr/local/webapp:/usr/local/tomcat:webapps  tomcat:8
5.2、安装MySQL
docker pull mysql:5.7

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

docker 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: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./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.coloradmin.cn/o/2236268.html

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

相关文章

从分析Vue实例生命周期开始,剖析Vue页面跳转背后执行过程

文章目录 1.概要2.Vue实例生命周期3.生命周期函数解释4.存在父子组件情况页面执行过程5. 分析路由跳转页面执行过程6.扩展补充7.小结 1.概要 本文旨在分析Vue页面进行路由切换时,Vue背后的运行过程,旨在让大家更加清晰地明白Vue页面运行过程中钩子方法的…

超分辨重建——复现SwinIR网络推理测试(详细图文教程)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《图像增强》 &a…

【青牛科技】应用方案 | D75xx-150mA三端稳压器

概 述 D75XX系列是一套三端高电流低压稳压器。它们可以提供 150mA 的输出电流和允许输入电压高达30V。它们有几个固定的输出电压范围为3.0 V至5.0 V。CMOS 技术确保低电压降和低静态电流。 虽然这些设备主要设计为固定电压调节器,但它们可以与外部元件一起使用&…

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

WPF 打包

打包为单个exe文件直接运行 - - -版本.NET8 新建WPF项目 右键 - 发布 选择发布文件夹 选择发布文件夹 选择发布文件夹 配置 配置,保存 发布 WPF 打包为exe安装程序 示例 实现思路 引导项目中嵌入其它项目可运行目录的zip引导项目中解压zip文件到指定文件夹是…

三维测量与建模笔记 - 3.3 张正友标定法

上图中,提到了世界坐标系在张正友标定法中的设计,可以理解为将世界坐标系的原点放到了棋盘格左上角点的位置,并且棋盘格平面上所有点的Z为0,将Z规定为0的话,可以简化掉一个维度(列向量r3)。去掉…

【解决办法】无法使用右键“通过VSCode打开文件夹”

个人博客:苏三有春的博客 前言 作者的编程环境为VScode,工作时常使用VScode打开整个工程文件夹。如果先打开VScode再从VScode中选择文件夹打开效率太慢,作者一般使用的方式是右键文件夹,直接选择"通过code打开文件夹"…

推荐一款ETCD桌面客户端——Etcd Workbench

Etcd Workbench 我相信很多人在开始管理ETCD的时候都去搜了Etcd客户端工具,然后找到了官方的Etcd Manager,但用完之后发现它并不好用,还不支持多连接和代码格式化,并且已经好几年不更新了,于是市面上就有了好多其他客…

Docker配置及简单应用

谈论/理解 Docker 的常用核心部分,以下皆在 Ubuntu 操作系统下进行 1 国内源安装 Docker-ce 1.1 配置 Linux 内核流量转发 因为docker和宿主机的端口映射,本质是内核的流量转发功能,所以要对其进行配置 1.1.1 未配置流量转发 如果没有配置流…

(十二)JavaWeb后端开发——MySQL数据库

目录 1.数据库概述 2.MyQSL 3.数据库设计 DDL 4.MySQL常见数据类型 5.DML 1.数据库概述 数据库:DataBase(DB),是存储和管理数据的仓库 数据库管理系统:DataBase ManagementSystem(DBMS),操纵和管理数据库的大型软件 SQL&a…

fastadmin后台列表根据所选中的行统计指定字段|fastadmin点击checkbox或反选统计某个字段的值

当选中对应行时,统计选中行的用户注册数和用户点击数。 此项功能需要有 点击全选触发事件、点击反选触发事件、勾选某一行触发事件、反选某一行触发事件,用到fastadmin自带的表格事件功能,参考:https://doc.fastadmin.net/doc/19…

stm32使用串口DMA实现数据的收发

前言 DMA的作用就是帮助CPU来传输数据,从而使CPU去完成更重要的任务,不浪费CPU的时间。 一、配置stm32cubeMX 这两个全添加上。参数配置一般默认即可 代码部分 只需要把上期文章里的HAL_UART_Transmit_IT(&huart2,DATE,2); 全都改为HAL_UART_Tra…

轨迹规划中优化预测:学习多个初始解的优化器

Abstract 在许多应用中,如机器人控制、自动驾驶和投资组合管理,需要在严格的运行时间限制下连续地解决相似的优化问题。在这种情况下,局部优化方法的性能对初始解的质量非常敏感:不良的初始化可能会导致收敛缓慢或得到次优解。为…

05 SQL炼金术:深入探索与实战优化

文章目录 SQL炼金术:深入探索与实战优化一、SQL解析与执行计划1.1 获取执行计划1.2 解读执行计划 二、统计信息与执行上下文2.1 收集统计信息2.2 执行上下文 三、SQL优化工具与实战3.1 SQL Profile3.2 Hint3.3 Plan Baselines3.4 实战优化示例 SQL炼金术&#xff1a…

JS封装随机生成一个颜色值工具函数

本文给大家带来的是封装的一个随机生成一个颜色值的工具函数。案例中提供了4个不同的调用函数,但实现的功能本质上都是一样的,开箱即用,随调随用。 //方法一 function getRandomColor() { //随机颜色return #${Math.floor(Math.random() * …

CESS 正式加入政府区块链协会 (GBA) ,出席 Blockchain Infrastructure 大会

北京时间 11 月 6 日,特朗普赢得 2024 年美国总统大选。与此同时,我们很高兴地宣布,CESS 已正式加入政府区块链协会 (GBA)。GBA 是一个全球性协会,致力于将区块链专业人士汇聚在一起,共同推动区块链技术在政府、金融和…

ARXML汽车可扩展标记性语言规范讲解

ARXML: Automotive Extensible Markup Language (汽车可扩展标记语言) xmlns: Xml name space (xml 命名空间) xsd: Xml Schema Definition (xml 架构定义) 1、XML与HTML的区别,可扩展。 可扩展,主要是…

数据结构_哈夫曼树及其应用

构造算法的例子 构造算法的实现 初始化&#xff0c;置权值 int i, m, s1, s2;m 2 * n - 1;for (i 1; i < m; i){HT[i].lch 0;HT[i].rch 0;HT[i].parent 0;}for (i 1; i < n; i){cin >> HT[i].weight;}合并结点 // 创建哈夫曼树for (i n 1; i < m; i){s1…

基于AI深度学习的中医针灸实训室腹针穴位智能辅助定位系统开发

在中医针灸的传统治疗中&#xff0c;穴位取穴的精确度对于治疗效果至关重要。然而&#xff0c;传统的定位方法&#xff0c;如体表标志法、骨度折量法和指寸法&#xff0c;由于观察角度、个体差异&#xff08;如人体姿态和皮肤纹理&#xff09;以及环境因素的干扰&#xff0c;往…

esp32学习:利用虫洞ESP32开发板,快速实现无线图传

我们的虫洞开发板&#xff0c;能够完美运行esp who AI代码&#xff0c;所以实现无线图传那是非常容易的&#xff0c;我们先看看examples目录&#xff1a; 里面有比较多的web例程&#xff0c;在这些例程下&#xff0c;稍作修改&#xff0c;就可以快速实现我的图传无线功能&#…