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.mzph.cn/news/884877.shtml

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

相关文章

Imperva 数据库与安全解决方案

Imperva是网络安全解决方案的专业提供商,能够在云端和本地对业务关键数据和应用程序提供保护。公司成立于 2002 年,拥有稳定的发展和成功历史并于 2014 年实现产值1.64亿美元,公司的3700多位客户及300个合作伙伴分布于全球各地的90多个国家。…

搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验

品牌:SouVR 发票:支持专票、普票 单位:套 版本号:1.0 包装清单:软件1套 软件形式:U盘、光盘 运行环境:windows 应用对象:煤矿企业、高校、科研单位 系统配置:…

[C++]——哈希(附源码)

目录 ​编辑 ​编辑 一、前言 二、正文 2.1 unorder系列关联式容器 2.1.1 unordered_map 2.1.1.1 unorderer_map的介绍 ①unordered_map的构造 ②unordered_map的容量 ③unordered_map的迭代器 ④unordered_map的元素访问 ⑤unordered_map的查询 ⑥unordered_map的修改操…

Linux:防火墙和selinux对服务的影响

1-1selinux 1-1 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 1-2 SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是…

qt QProgressBar详解

1、概述 QProgressBar是Qt框架中的一个控件,专门用于显示任务的进度。它提供了一个可视化的进度条,让用户能够直观地了解任务的完成程度。QProgressBar支持水平和垂直两种显示方向,并且可以通过设置最小值和最大值来指定进度条的范围。此外&…

力扣最热一百题——杨辉三角

目录 题目链接:118. 杨辉三角 - 力扣(LeetCode) 题目描述 示例 提示: 解法一:利用特性构建杨辉三角 1. 结果存储结构: 2. 初始化和循环遍历每一层: 3. 构建每一层: 4. 填充中间的元素&…

解决com.mysql.jdbc.NonRegisteringDriver内存泄漏问题

1. 问题背景 线上出现内存报警,通过dump文件,MAT分析,发现mysql-connector-java 有内存泄漏问题 2.问题分析 然后看大对象列表,NonRegisteringDriver 对象确实占内存比较多,里面村的数据库连接的虚引用占比较多 3.解…

【AIGC】ChatGPT提示词Prompt高效编写技巧:逆向拆解OpenAI官方提示词

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯OpenAI官方提示词的介绍OpenAI官方提示词的结构与组成如何通过分析提示词找到其核心组件 💯OpenAI官方提示词分析案例一:制定教学计划案例二&…

Ubuntu 22 安装 Apache Doris 3.0.3 笔记

Ubuntu 22 安装 Apache Doris 3.0.3 笔记 1. 环境准备 Doris 需要 Java 17 作为运行环境,所以首先需要安装 Java 17。 sudo apt-get install openjdk-17-jdk -y sudo update-alternatives --config java在安装 Java 17 后,可以通过 sudo update-alter…

多线程生产消费者模型

线程同步 互斥锁(互斥量)条件变量生产/消费者模型 一、互斥锁 C11提供了四种互斥锁: mutex:互斥锁。timed_mutex:带超时机制的互斥锁。recursive_mutex:递归互斥锁。recursive_timed_mutex:带超时机制的递归互斥锁…

理解 WordPress | 第五篇:页面构建器选择指南

WordPress 专题致力于从 0 到 1 搞懂、用熟这种可视化建站工具。 第一阶段主要是理解。 第二阶段开始实践个人博客、企业官网、独立站的建设。 如果感兴趣,点个关注吧,防止迷路。 什么是 WordPress 构建器 WordPress 构建器(Page Builder&am…

【Linux系统编程】第四十二弹---多线程编程全攻略:涵盖线程创建、异常处理、用途、进程对比及线程控制

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、线程创建 2、线程异常 3、线程用途 4、进程 VS 线程 5、线程控制 5.1、创建和等待线程 1、线程创建 线程能看到进程的大…

基于SSM的在线作业管理系统 -octopus-master(源码+调试)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题,今天给大家介绍…

医学影像类和医用电气设备测试标准整理

医学影像类和医用电气设备测试标准整理 1、GB 9706.225-2022 医用电气设备 第2-25部分:心电图机的基本安全和基本性能专用要求 GB 9706.225规定了在201.3.63中定义的通过自身或作为ME系统一部分,提供可供诊断用的心电图报告的心电图机基本安全和基本性能,以下称为ME设备。 …

鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元

目录 前言 HarmonyOS NEXT:下一代操作系统的愿景 1、核心特性和优势 2、如何推动应用生态的发展 3、对开发者和用户的影响 华为云服务在鸿蒙原生应用开发中的作用 1、华为云ECS C系列实例 (1)全维度性能升级 (2&#xff…

3^100的位数判断

3^100的位数判断 问题来源 字节面试&#xff0c;面试官提问&#xff1a;口算估计3^100的位数&#xff0c;或是给出位数估计范围。 解决方案 方法一&#xff1a; 该方法纯口算&#xff0c;可得一个较为准确的一个范围 2 100 < 3 100 < 4 100 2^{100}<3^{100}<…

ROS2简介与Ubuntu24.04中安装指南

之前安装了一个版本&#xff0c;但是不愿意写blog&#xff0c;现在想想自己就是个沙子立个flag&#xff0c;每次配置项目&#xff0c;写流程blog ROS简介 ROS&#xff08;Robot Operating System&#xff09;是一个开源的机器人软件平台&#xff0c;提供了许多工具和库来帮助…

Linux sudo命令及权限设置

普通用户的权限是有限制的&#xff0c;需要更大的权限&#xff0c;就需要使用 root 用户&#xff0c;但又不想一直使用 root 用户&#xff0c;如普通用户查看 8080 端口的监听情况&#xff1a; netstat -tulnp | grep :8080 只能查看自己的 不想用 root 用户&#xff0c;继续…

微服务网关的认证管理;原理与实践

API安全认证是网关的最重要能力 API 网关为了保护对外提供的API&#xff0c;避免诸如恶意访问、未授权访问、应用漏洞及黑客攻击等导致的数据和资产损失&#xff0c;采用API网关的认证机制显得十分必要。 这种认证机制通过基于token的身份验证来实现&#xff0c;它允许应用程…

STM32 + CubeMX + 硬件SPI + W5500 +TcpClient

这篇文章记录一下STM32W5500TCP_Client的调试过程&#xff0c;实现TCP客户端数据的接收与发送。 目录 一、W5500模块介绍二、Stm32CubeMx配置三、Keil代码编写1、添加W5500驱动代码到工程&#xff08;添加方法不赘述&#xff0c;驱动代码可以在官网找&#xff09;2、在工程中增…