02-Docker 使用

docker:快速构建、运行、管理应用的工具,可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用

1、部署mysql

先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL(注意:若服务器上已经有mysql 占用了3306端口,可修改绑定服务器3307端口,如下)

docker run -d \--name mysql \-p 3307:3306 \          # 将主机端口从3306改为3307-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

运行完后,可以通过navicat 正常访问 

如果想要集群部署,只需修改`宿主机端口映射`和`容器名称`保证不同即可,因为容器之间环境是相互隔离的,所以都是3306不用变

# 如果想要集群部署只需修改docker容器内部的端口号和容器名称即可# 节点1
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql# 节点2
docker run -d \--name mysql2 \-p 3307:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql# 节点3
docker run -d \--name mysql3 \-p 3308:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,非常方便。而且,这种安装方式完全不用考虑运行的操作系统环境问题,它不仅仅在CentOS系统是这样,在Ubuntu系统、macOS系统、甚至是装了WSL的Windows下,都可以使用这条命令来安装MySQL。

要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题

2、镜像和容器

当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。

  • 镜像:不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库
  • 容器:Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
  • 镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub(目前国内已停止访问)。

 3、命令解读

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

解读:

  • docker run -d:创建并运行一个容器,-d则是让容器以后台进程运行
  • --name mysql: 给容器起个名字叫mysql,你可以叫别的,要唯一
  • -p 3307:3306: 设置端口映射。格式: -p 宿主机端口:容器内端口,示例中将宿主机的3307映射到容器内的3306端口
  • -e TZ=Asia/Shanghai:配置容器内进程运行时的一些参数,此处是设置时区,格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
  • -e MYSQL_ROOT_PASSWORD=123:是设置MySQL默认密码
  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像,格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号,在未指定TAG的情况下,默认拉取最新版本镜像,也就是mysql:latest

容器是隔离环境,外界不可访问。但是可以将`宿主机端口`映射`容器内到端口`,当访问宿主机指定端口时,就是在访问容器内的端口了。
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致,但是这里为了防止与之前外部安装的MySQL的3306冲突,改为3307映射容器内的3306。

镜像的名称不是随意的,而是要到DockerRegistry中寻找,镜像运行时的配置也不是随意的,要参考镜像的帮助文档。

4、Docker基础

4.1、常见命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档: https://docs.docker.com/

命令说明文档地址
docker pull拉取镜像docker pull
docker push推送镜像到DockerRegistrydocker push
docker images查看本地镜像docker images
docker rmi删除本地镜像docker rmi
docker run创建并运行容器(不能重复创建)docker run
docker stop停止指定容器docker stop
docker start启动指定容器docker start
docker restart重新启动容器docker restart
docker rm删除指定容器docker rm
docker ps查看容器docker ps
docker logs查看容器运行日志docker logs
docker exec进入容器docker exec
docker save保存镜像到本地压缩文件docker save
docker load加载本地压缩文件到镜像docker load
docker inspect查看容器详细信息docker inspect

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

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

5、部署Nginx容器

需求:

  • 在DockerHub中搜索Nginx镜像,查看镜像的名称
  • 拉取Nginx镜像
  • 查看本地镜像列表
  • 创建并运行Nginx容器
  • 查看容器
  • 停止容器
  • 再次启动容器
  • 进入Nginx容器
  • 删除容器
# 第1步,查看nginx镜像仓库及相关信息
docker search nginx# 第2步,拉取Nginx镜像
docker pull nginx# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 查看容器日志:docker logs 容器名
docker logs nginx
# 持续或动态查看容器日志:docker logs -f 容器名
docker logs -f nginx# 第6步,访问网页,地址:http://虚拟机IP地址:80# 第7步,停止容器
docker stop nginx# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第9步,再次启动nginx容器
docker start nginx# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 第11步,查看容器详细信息
docker inspect nginx# 第12步,进入容器,-it指的是可输入终端,查看容器内目录,输入exit 退出容器
docker exec -it nginx bash
# 或者,可以进入容器的同时跟上执行的命令,之间一步进入容器内的MySQL
docker exec -it mysql mysql -uroot -p# 将镜像打包下载到本地,.tar.gz是打压缩包
docker save -o nginx.tar nginx:latest# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx
# 删除镜像
docker rmi nginx:latest# 将打包好的镜像加载到本地,不用再去docker pull 对应镜像了
docker load -i nginx.tar# 查看nginx镜像
docker images# 创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx

 可通过下面命令进行格式化信息:

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

http://192.168.56.10/,通过这个地址可以访问nginx

 5.1、数据别名

给常用Docker命令起别名,方便我们访问:

# 修改/root/.bashrc文件
vim /root/.bashrc
内容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi

# 修改/root/.bashrc文件 后,执行下面命令,使其生效
source ~/.bashrc

6、数据卷挂载

容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。大家思考几个问题:

  • 如果要升级MySQL版本,需要销毁旧容器,那么数据岂不是跟着被销毁了?
  • MySQL、Nginx容器运行后,如果我要修改其中的某些配置该怎么办?
  • 我想要让Nginx代理我的静态资源怎么办?

因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦

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

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

相关文章

@DeclareParents 注解实现接口功能增强:Spring中通过接口引入实现功能增强的完整示例

以下是Spring中通过接口引入实现功能增强的完整示例: // 1. 目标接口及实现类 package com.example;public interface Service {void doSomething(); }Component class ServiceImp implements Service {Overridepublic void doSomething() {System.out.println(&qu…

HTML中数字和字母不换行显示

HTML中数字和字母不换行显示的默认行为及如何通过CSS的word-wrap和word-break属性进行调整。 在HTML中标签中的数字和字母默认是不换行的,如果要将他们换行,在CSS中添加”word-wrap: break-word;” 即可解决 语法:word-wrap: normal|break-w…

Git团队开发命令总结

简易Git工作流 myname: 团队成员个人分支dev: 团队公共分支 个人独立分支开发 同步最新的【dev公共分支】到本地。【重要】基于最新的【dev公共分支】,创建【个人功能开发分支】。在此基础上开发。【个人功能开发分支】开发完成,推送到远程库。如果【…

Python人工智能大模型入门教程:从零构建高性能预测模型

引言:AI大模型时代的技术革命 在AlphaGo战胜人类棋手的里程碑事件后,人工智能技术进入爆发式发展阶段。本教程将带您从零开始,使用Python构建一个工业级神经网络模型。通过本教程,您不仅能掌握GPU加速训练、混合精度计算等前沿技…

python-leetcode 61.N皇后

题目: 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击 给你一个整数 n ,返回所有不同的 n 皇后问题 的解…

Mybatis_Plus中的常用注解

目录 1、TableName TableId TableId的type属性 TableField 1、TableName 经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在 Mapper接口继承BaseMapper时,设置了泛型User,而操…

JavaScript函数知识点总结

JavaScript函数是一种可重复使用的代码块,它接受输入值(参数)、执行特定任务,并返回输出值。 1. 声明函数 function greet(name) {return "Hello, " + name + "!"; }console.log(greet("Alice")); // 输出: Hello, Alice! console.log( t…

分布式计算Ray框架面试题及参考答案

目录 简述 Ray 的架构设计核心组件及其协作流程 全局控制存储(GCS)在 Ray 中的作用是什么?如何实现高可用性? 对比 Ray 的任务(Task)与 Actor 模型,说明各自适用场景 解释 Ray 的 Object Store 如何实现跨节点数据共享与零拷贝传输 Ray 的分布式调度器如何实现毫秒级…

GitHub热门RAG框架:让大语言模型更智慧

检索增强生成(RAG):提升大型语言模型能力的全新思路 随着人工智能应用的不断深入发展,如何让大型语言模型(LLM)具备更强的上下文理解和实时响应能力成为了关键问题。检索增强生成(Retrieval-Augmented Generation,RAG)正是在这一背景下应运而生的技术,它巧妙地结合了…

HTTP协议讲解

概念: Hyper Text Transfer Protocol 超文本传输协议,规定了浏览器和服务器之间的数据传输规则 特点 基于TCP协议,面向连接,安全基于请求-响应模型的,一次请求对应一次响应无状态的,对于事物没有记忆能力…

全国节能宣传周线上知识竞赛

线上知识竞赛|节能降碳知识知多少 引言 全国节能宣传周举办的主题是“绿色低碳,节能先行”。国家节能中心会同相关单位共同打造了一款线上知识竞赛小程序,学习节能知识,争做节能达人。 1.小程序规则: 体力规则:每位…

【区块链安全 | 第十八篇】类型之引用类型(二)

文章目录 引用类型数组切片结构体 引用类型 数组切片 数组切片是对数组中连续部分的一个视图。它的语法为 x[start:end],其中 start 和 end 是表达式,结果类型为 uint256(或者可以隐式转换为 uint256)。切片的第一个元素是 x[st…

GitHub上免费学习工具的精选汇总

以下是GitHub上免费学习工具的精选汇总,涵盖编程语言、开发框架、数据科学、面试准备等多个方向,结合工具的功能特点、社区活跃度及适用场景进行分类推荐: 一、编程语言与开发框架 Web Developer Roadmap 简介:为开发者提供全栈学…

[leetcode]2685. 统计完全连通分量的数量

题目链接 题意 给定无向图,求完全连通分量 连通分量就是一个连通块的意思 完全连通分量:就是一个连通块中 ,所有点之间都两两有边相连 思路 一个完全联通分量有n个点 那么应该有 C n 2 C_n^2 Cn2​条边 并查集维护连通块 检查每个联通分量…

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI

使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI 本篇摘要16. 使用LangChain Agents构建Gradio及Gradio Tool16.3 使用Langchain agents构建Gradio UI16.3.1 创建代理16.3.2 创建Gradio UI16.3.3 运行demo参考文献本章目录如下: 《使…

项目实战 - 用户列表

用户列表想要实现这样的效果: 渲染数据: import React,{useState,useEffect} from react; import { Button,Table, Tag,Modal,Popover, Switch } from antd; import { EditOutlined,DeleteOutlined,ExclamationCircleOutlined } from ant-design/icons…

吾爱破解安卓逆向学习笔记(4p)

学习目标,了解安卓四大组件,activity生命周期,同时了解去除部分广告和更新提示。 广告类型 1.启动页广告 2.更新广告 3.横幅广告 安卓四大组件 组件描述Activity(活动)在应用中的一个Activity可以用来表示一个界面,意思可以…

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…

Vue项目中Vuex在util引入,断点存在default

示例代码 // src/store/index.js import Vue from vue; import Vuex from vuex; ……Vue.use(Vuex); export default new Vuex.Store({…… })// src/utils/index.js import store from /store // 导入默认导出的 store export async function getDict() {store.state.userInf…

FALL靶机渗透实战:从信息收集到特权升级的完整链分析

1.下载靶机,并在虚拟机中打开 2.用kali来确定该靶机的IP kali的IP:192.168.139.152 arp-scan -l 3.扫描端口 nmap -O 192.168.139.172 4.扫目录 gobuster dir -u http://192.168.139.172 -x php,txt,html -w /usr/share/dirbuster/wordlists/directo…