Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
Docker
未读Dockerfile自定义镜像
对于MySQL、Redis这类可以在DockerHUB找到的镜像,在使用的时候直接拉取即可。但是对于我们自己写的项目DockerHUB基本是没有合适的镜像,这时只能自定义镜像了。
自定义 Docker 镜像是通过编写 Dockerfile 文件来定义镜像的构建过程。Dockerfile 是包含一系列指令的文本文件,用于告诉 Docker 如何构建一个镜像。
1. 镜像的结构
Docker 镜像是将应用程序及其所需的系统函数库、运行时环境、配置和依赖项打包在一起的只读模板。这个模板可用于创建一个或多个容器。
镜像在基础操作系统或运行环境的基础上,加入应用程序文件、配置文件和依赖,最后编写启动脚本,一起打包形成的一个可重复使用的文件。
而构建镜像,就是实现上述打包的过程。
2. Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,每一个指令都会形成一层。通过定义一系列命令和参数,实现Dockerfile 指导 Docker 构建一个自定义的镜像。
Dockerfile 的基本结构可以简单分 ...
使用Docker部署MySQL和SQLServer
部署MySQL
部署SQLServer
1. 部署MySQL
操作步骤如下:
拉取MySQL镜像:docker pull mysql
创建并启动一个容器:docker run
1.1 拉取镜像1docker pull mysql
*1.2 创建并启动容器1.2.1 要求:
为保证容器关闭时不会丢失数据
目录挂载
数据卷挂载
保证服务器重启后容器可以自动恢复运行
1.2.2 创建并启动容器123456docker run --name local-mysql8 \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3306:3306 \ -v mysql-data:/var/lib/mysql \ --restart always \ -d mysql:latest
--name local-mysql8:给容器起一个名字
-e MYSQL_ROOT_PASSWORD=123456:参数配置,设置数据库密码。
-p 3306:3306:端口映射,将容器3306端口映射到宿主机3306端 ...
Docker
未读数据卷(容器数据管理)
在不使用数据卷的情况下,修改 Nginx 的 HTML 页面时,需要进入 Nginx 容器内部操作,且容器内部没有编辑器,导致文件修改十分麻烦。
这就是 容器与数据(容器内文件)耦合 带来的问题:一旦需要修改容器内的文件,必须进入容器进行操作,不仅效率低下,还可能引发配置混乱。
要解决这个问题,必须将数据与容器解耦,这就需要使用 Docker 数据卷。通过将 Nginx 的静态资源(如 HTML 文件)挂载到宿主机的一个目录上,所有文件的修改都可以直接在宿主机上完成,无需进入容器内部操作。容器重启或更新也不会影响这些数据,这种方式既保持了容器的独立性,又简化了开发和运维过程。
1. 数据卷是什么
数据卷(Volume) 是 Docker 提供的一种机制,用于在容器和宿主机之间共享和持久化数据。它可以将容器内的文件或目录映射到宿主机的某个目录中,从而实现数据的持久化,即使容器被删除,数据依然会保存。此外,数据卷也可以被多个容器共享。
当我们在使用数据卷时,实际上是在将容器中的某个目录挂载到宿主机上的某个目录,让容器和宿主机共享同一个数据存储位置。
假设有一个 W ...
Docker
未读Docker基本操作
镜像操作
容器操作
1. 镜像操作
1.1 镜像名称Docker 镜像名称通常由两部分组成:REPOSITORY 和可选的 TAG。
REPOSITORY 指定镜像的名称或路径,通常表示镜像的所有者和镜像名称。例如,nginx 表示 Nginx 镜像,myrepo/myapp 表示自定义的镜像。
TAG 是可选的,用于标识镜像的版本。默认标签是 latest,代表最新版本的镜像。例如 nginx:1.18 指定了 Nginx 的 1.18 版本。
1.2 镜像命令
1.2.1 拉取镜像
docker pull
1.2.2 查看镜像
docker images
1.2.3 保存镜像
docker save
可以用docker save --help查看相关的语法
docker save -o [镜像保存为文件的名称] [镜像名称]
这里选择保存rabbitmq镜像进行测试,镜像保存为文件的名称为rabbitmq.tar。
查看保存的文件
1.2.4 删除镜像
docker rmi
删除rabbitmq镜像,do ...
安装Docker
Docker 分为两大版本:Docker CE(社区版)和 Docker EE(企业版)。Docker CE 是免费的,分为稳定版(Stable)、测试版(Test)和每日构建版(Nightly),提供不同的更新频率和稳定性。稳定版适合生产环境,测试版和每日构建版则适用于开发和测试。相对而言,Docker EE 强调安全性,支持周期为 24 个月,适合对安全性和长期支持有高要求的企业,且需要付费使用。
这里我选择Docker CE,官网介绍Docker CE需要 Linux 内核 3.10 或更高版本。这里我安装的是CentOS 7,使用rpm -qa | grep kernel查看内核等相关信息。
内核版本为kernel-3.10.0-1160.el7.x86_64,刚好符合。
这里我是通过VMware创建一个CentOS虚拟机,然后通过ssh连接。由于CentOS自带openSSH,我们只需确保它开启即可。然后进行一些网络配置,就在其他电脑上使用ssh连接。类似于一台简易的服务器,后期有时间准备购买一个小物理机,出一个ubuntu服务器的创建与配置。
1. 安 ...
Docker架构
1. 镜像和容器
1.1 镜像镜像(Image)是一个轻量级、独立且可执行的软件包,包含了运行应用程序所需的所有内容,包括代码、运行时、库、环境变量、配置文件等。镜像是 Docker 容器的基础,每个容器都是从镜像启动的。
1.2 容器容器是从镜像启动的轻量级、可移植的运行实例。容器包含应用程序及其所有依赖环境,并且在与宿主机共享内核的情况下运行。容器相当于一个隔离的环境,能够在不同的机器上保持应用程序运行的一致性。
1.3 可写层Docker 镜像是只读的。当从镜像启动一个容器时,Docker 会在镜像之上添加一个可写层,所有对容器的修改都发生在这个可写层中,而不会改变底层的镜像。镜像保持只读状态,确保它可以被多个容器复用。
每个容器启动后,镜像层仍然不变,而容器的运行时状态(如文件修改、安装软件等)则记录在独立的可写层中。如果容器被删除,这个可写层也会随之消失,但镜像本身不会受到任何影响。
2. DockerHub
Docker Hub 是 Docker 提供的一个官方的云端镜像仓库服务平台,这样的平台称为Docker Registry。它是一个集中化 ...
Docker
未读Docker和虚拟机的区别
1. 虚拟机的原理虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。
实现原理:虚拟机是在现有操作系统上通过虚拟化软件(如 VMware、VirtualBox)创建的一种模拟独立计算环境的技术。虚拟化软件(Hypervisor)负责将物理硬件资源抽象为虚拟资源,允许多个虚拟机共享这些资源。虚拟机运行的操作系统和应用程序认为自己是在真实硬件上运行,而实际上所有硬件操作都被虚拟化层拦截、转换并映射到宿主机的实际资源上。虚拟机实现了资源隔离,使每个虚拟机的操作互不干扰。
命令执行过程包括:用户在虚拟机中输入命令后,虚拟机的操作系统解析命令,如果涉及特权操作(如硬件访问),虚拟化软件会拦截并将其转换为宿主机的实际硬件操作。命令执行完成后,结果返回给虚拟机操作系统,最终反馈给用户。
性能:虚拟机的性能通常低于物理机,这是因为虚拟化层引入了额外的开销。在虚拟机中,所有的硬件访问请求都需要通过虚拟化层进行转换和处理,尤其是涉及特权指令 ...
Docker
未读初识Docker容器
1. 什么是Docker
Docker 是一个开源的容器化平台,用于自动化部署和管理应用程序。它通过将应用程序及其所有依赖打包成一个轻量级、可移植的容器来解决传统虚拟化中的性能开销问题。Docker 容器可以在任何支持 Docker 的环境中运行,无论是本地开发环境、测试服务器,还是生产环境。可以很容易地从一个环境迁移到另一个环境,支持跨平台的部署和扩展。
1.1 常规部署的问题大型项目组件较多,运行环境也较为复杂。
开发、测试和生产环境的配置差异可能导致应用程序在某些环境下正常运行,而在其他环境中出错。
应用程序依赖的库、框架、数据库等需要手动安装和配置,管理和维护不同版本的依赖变得复杂。
有的项目中部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突,给部署带来了极大的困难。
1.2 Docker如何解决依赖兼容问题
打包应用及其依赖:将应用的库(Libs)、依赖(Deps)和配置文件与应用一起打包到容器镜像中,确保应用运行所需的一切都包含在内。
容器隔离运行:每个应用运 ...