当前位置: 首页 > news >正文

如何用Docker快速搭建本地开发环境

📢 声明:
🍄 大家好,我是风筝
🌍 作者主页:【古时的风筝CSDN主页】。
⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正,不胜感激。
直达博主:「古时的风筝」 。(搜索或点击扫码)
————————————————

有些时候我们需要在本地搭开发环境,比如平时学习新技术的时候。或者有时候公司的项目需要在本地建一套类似的,方便调试修改。

开发环境可能包括 MySQL、Redis、Nginx、MQ 、Elasticsearch等等,今天用的是 MySQL,明天又用PostgreSQL了,如果用啥都在本机装一下的话,倒也不是不可以,但是就非常麻烦了,而且有时候安装会遇到各种各样的问题,很是不爽。

有什么快速有优雅的方式没有?

就是我们今天要说的 Docker 了,Docker 到现在为止,早就不是什么新技术了,甚至可以说是很普遍很大众的技术方案了。

我记得我最早开始用 Docker 已经是 2015年了,到现在已经快8年了。只能感叹,时间过得是真快呀!

那段时间也把 Docker 安利给了不少同学、同事,我只是这样告诉他们:“这玩意儿在本地搭一套开发环境真的很方便”,至于它后来发展成现在的规模,我也是没想到的。

如果你是个开发老手儿,相信你早就用起来了。而如果你是个新手,那也要尽快用起来了,不仅能节省搭建环境的时间,还能学习学习,毕竟现在容器化部署方式很普遍了,多了解了解还是非常有必要的。

Docker 原理和基础命令

基本原理

用任何一种技术首先都要先了解它的技术原理,做到心中有数。

Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的cgroup,namespace,以及 OverlayFS类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

Docker 经常拿来和虚拟机来比较,因为它们两个的用处和用法都很相似,就是在一台实体机上启动多个虚拟系统(暂且这么说)。如果基于使用的层面来讲,你完全可以把 Docker 当做虚拟机来用,然而实际的底层技术原理是完全不一样的。

假设你现在变身了,站在了 Docker 和 虚拟机的内部,从里面向外看,发现虚拟机有自己的 CPU(虚拟CPU)、内存、硬盘,再往外才是宿主机的 CPU、硬盘、内存等。而如果是在Docker内部向外看,发现你无论站在当前实体机的哪个容器里,看到的都是宿主机的 CPU、硬盘、内存等。说明 Dokcer 容器是直接拿宿主机的资源当自己的用,所以每个容器的硬件配置都是一样的,而虚拟机是完全虚拟出来一套。

基础命令

Dokcer 的命令有一大堆,但是常用的就那几个。

镜像相关

获取镜像

docker pull 镜像名称

查看镜像列表

docker image ls
容器相关

查看容器

docker ps -a

新建并启动容器

sudo docker run -t -i ubuntu:12.04  /bin/bash

进入容器

docker exec -it 容器id bash

因为本文不是 Docker 的教程,所以只是抛砖引玉,具体的教程和文档网上到处都是。

安装 Docker Desktop

接下来开始本地实践了,用 Docker 快速搭一套本地环境。

有一些 Docker 的可视化客户端可以安装,帮我们更方便更直观的管理镜像、容器,当然如果你很厉害的话,完全用命令行也不是不行。

我就没这么厉害了,那些参数根本记不住,所以必须要装客户端。我安装的是 Docker Desktop,官方客户端,支持 Mac、Linux、Windows,我大部分时候用 Mac,有时候也要用 Windows,所以Docker Desktop是不二选择。

如果你只用 Mac 的话,也可以安装 OrbStack(https://orbstack.dev/),据说比 Docker Desktop 要流畅一些。

下载安装

访问 Docker Desktop 官网 https://www.docker.com/products/docker-desktop/,根据你的系统下载对应的版本。

763shots_so

下载完一键安装就可以了,Docker 环境直接帮你装好了,省心省事儿。下面是它的控制台界面。左侧导航可以查看镜像列表、容器列表、映射的Volumes。

我们在命令行输入 docker -v,如果出现正确的版本号,说明 docker服务已经安装正常了。

Docker version 24.0.2, build cb74dfc

接下来有一件事儿是必须要做的,那就是设置国内镜像源,道理大家都懂,你要是用国外的镜像源,一天都不一定能搞下来一个。

点击「设置」按钮,在左侧选择「Docker Engine」

,然后在右侧的配置框中添加如下配置,加到最下面即可:

"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://cr.console.aliyun.com/"]

加完后,点击「Apply & restart」,这时候会重启 Docker 服务。

安装一个服务

MySQL、Nginx、Redis、Zookeeper 这些都是服务,每一个都可以按照这种方式安装,不管你的项目需要多少个服务,一个个安装就好了,很快的呦。

正好我最进要学一下 PostgreSQL,我就直接启动一个 docker 容器了,不在本地安装了。当然了,像数据库这种I/O型的应用是不建议容器化的,但是本地开发测试无所谓。

在这个搜索框输入关键词,查找对应的镜像,我在这里输入关键词 PostgreSQL。如果安装 Nginx 那就是输入 Nginx,以此类推。

search

看,出来了一大堆,我一般都是找第一个,也就是下载量最大的这个。

可以 pull 或者 run,pull 是拉取镜像,run 是拉取镜像+启动容器。

我一般都是直接 run,点一下 run,等一会儿,因为前面已经设置了国内镜像源,所以速度很快,十几秒钟。(根据网速快慢不同,因为要下载镜像文件,有的应用有上百M)

下载完之后,因为选的是 run,所以直接弹出了启动参数。

设置镜像名称

容器名称(Container name)就是为了我们一看到它就知道是干什么的,用来方便管理的,我就直接命名为 PostgreSQL了。

设置端口映射(Ports)

服务本身有自己的端口,例如 MySQL 是3306,这是服务本身在容器内的启动端口,但最终我们要通过宿主机去访问服务,所以要将这个容器内的端口绑定到一个宿主机端口,这叫做端口映射,这样一来,我们就可以通过宿主机的端口访问到容器内的端口了。比如我将 MySQL 容器的 3306 端口映射到宿主机的 13306 端口,之后我在设置数据库连接的时候,就用本机 IP:13306就能访问 MySQL 容器了。

在我这个 PostgreSQL 容器上,我将本机的 15432和容器的 5432端口绑定,之后就可以用 15432做连接端口了。

目录映射(Volumes)

很多服务都会用到存储目录,但是容器本身就在宿主机上,所以需要将服务在容器内的目录映射到宿主机的目录上,这叫目录映射。例如将 Nginx 容器的 /etc/nginx目录映射到宿主机的 /apps/nginx/目录上,那之后我在宿主机访问 /apps/nginx目录时,就能看到 Nginx 容器的配置文件了。

在我这个PostgreSQL 容器上,我将 /etc/postgresql/postgresql.conf配置文件映射到了我本地的一个目录上。

环境变量

一个服务启动可能会用到启动变量,这些变量可以通过环境变量的方式进行配置。例如,我们启动一个 Java jar 包,要配置 JVM 相关的参数,这些参数就可以放到环境变量中,供启动的时候使用。

因为 PostgreSQL 需要密码,所以这里就设置一个密码的环境变量 POSTGRES_PASSWORD

都设置好之后,点击run按钮,启动容器。

然后我们看到容器已经启动了,有相应的日志打印出来。

然后点击左侧的Containers,可以看到已经启动的容器和一些基本配置。

然后就可以通过客户端进行连接了。

另外,还可以在容器详情中查看容器的内部文件、状态、配置信息、日志等,以及进入命令行。

最后

第一次可能比较慢,熟悉了之后就非常快了,比你在本地直接安装配置要快的多,而且一些软件安装配置起来非常繁琐,会浪费很多不必要的时间。

还有很多开源的框架、应用提供docker版本,掌握了这个方法后,可以很快的安装这些框架、应用来验证和使用,用户体验直接上升一个数量级。

您的点赞、收藏、评论都是我前进路上的动力
在这里插入图片描述

推荐阅读

➿ 剑走偏锋,无头浏览器是什么神奇的家伙

➿ 新项目决定用 JDK 17了

➿ 5000字,10张图,完全掌握 MySQL 事务隔离级别

相关文章:

如何用Docker快速搭建本地开发环境

📢 声明: 🍄 大家好,我是风筝 🌍 作者主页:【古时的风筝CSDN主页】。 ⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正,不胜感激。 直达博主:「…...

SpringDataJPA基础

简介 Spring Data为数据访问层提供了熟悉且一致的Spring编程模版,对于每种持久性存储,业务代码通常需要提供不同存储库提供对不同CURD持久化操作。Spring Data为这些持久性存储以及特定实现提供了通用的接口和模版。其目的是统一简化对不同类型持久性存储…...

程序员如何成为自由的独立开发者?

你是不是那个整天坐在电脑前敲代码的程序员朋友?作为程序员,你是否也曾思考过如何成为一名独立开发者?思考过究竟如何踏上这段充满挑战和创造的旅程? 现在这个数码时代,技术不断演进,越来越多的程序员朋友…...

Ant Design Vue(v1.7.8)a-table组件的插槽功能

本案例中,编写了一个名为stockAdd的vue(v2.5.17)自定义组件,使用a-table组件的插槽功能,创建了一个可编辑的数据表格: 表格用于添加采购的物品,点“新增物品”按键,表格添加一行&…...

笔记69:Conv1d 和 Conv2d 之间的区别

笔记地址:D:\work_file\(4)DeepLearning_Learning\03_个人笔记\4. Transformer 网络变体 a a a a a a a a a a a...

关于马达保护器 的选型 你知道吗

一、智能马达保护器的介绍 在有色冶炼中,根据工艺需求和客户需求,智能电动机保护器的主要应用模式有保护模式、端子控制模式、全通信模式和半通信模式。 4.1保护模式 在保护模式下,智能电动机保护器只利用其自身的保护功能和测量功能&#…...

springboot(ssm高校竞赛管理系统 在线竞赛平台 Java系统

springboot(ssm高校竞赛管理系统 在线竞赛平台 Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0) 数…...

SDXL使用animateDiff和hotshot-xl进行文生视频

截至2023.12.8号,目前市面上有两款适用于SDXL的文生视频开源工具,分别是AnimateDiff和hotshot-xl。 一、工具下载链接 (1)AnimateDiff的webui版本的git链接: GitHub - continue-revolution/sd-webui-animatediff: A…...

【高数:3 无穷小与无穷大】

【高数:3 无穷小与无穷大】 1 无穷小与无穷大2 极限运算法则3 极限存在原则4 趋于无穷小的比较 参考书籍:毕文斌, 毛悦悦. Python漫游数学王国[M]. 北京:清华大学出版社,2022. 1 无穷小与无穷大 无穷大在sympy中用两个字母o表示无…...

C语言预读取技术 __builtin_prefetch

__builtin_prefetch 是一个编译器内置函数,用于在编译时向编译器发出指令,要求在执行期间预取内存数据。它通常用于提高程序的性能,特别是对于那些需要频繁访问内存的情况。 __builtin_prefetch 函数的语法如下:c __builtin_prefe…...

自动驾驶学习笔记(十三)——感知基础

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 传感器 测距原理 坐标系 标定 同…...

WLAN配置实验

本文记录了WLAN配置实践的过程,该操作在华为HCIA中属于相对较复杂的实验,记录过程备忘。这里不就WLAN原理解释,仅进行配置实践,可以作为学习原理时候的参考。本文使用华为ENSP进行仿真。实验拓扑图如下: 1.WLAN工作流程…...

java_web接收前端传的excel文件读取数据

#本次做一个将患者数据导入到某个模块的功能&#xff0c;前期集成的代码时不时出现异常&#xff0c;本次进行修改记录 //controller层/*** 导入患者数据*/RejectReplayRequestPostMapping("/importData")public Result<?> importData(HttpServletRequest req…...

在Vue开发中v-if指令和v-show指令的使用介绍和区别及使用场景

一、条件渲染 v-if v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回真值时才被渲染。 <h1 v-if"awesome">Vue is awesome!</h1>v-else 你也可以使用 v-else 为 v-if 添加一个“else 区块”。 <h1 v-if"awesome"&g…...

Power Query是啥

Power Query是一种用于数据获取、转换和整理的功能强大的工具&#xff0c;它是Microsoft Excel和Power BI中的一个组件。Power Query可以帮助用户从各种数据源中获取数据&#xff0c;并进行数据清洗、转换和整理&#xff0c;以便进一步分析和可视化。 使用Power Query&#xf…...

在k8s中部署nfs-client-provisioner

1、部署过程 1.1、环境依赖 在部署nfs-client-provisioner之前&#xff0c;需要先部署nfs服务。 因为&#xff0c;nfs-client-provisioner创建的pv都是要在nfs服务器中搭建的。 本示例中的nfs server的地址如下&#xff1a; [rootnode1 /]# showmount -e Export list for …...

23.12.10日总结

周总结 这周三的晚自习&#xff0c;学姐讲了一下git的合作开发&#xff0c;还有懒加载&#xff0c;防抖&#xff0c;节流 答辩的时候问了几个问题&#xff1a; 为什么在js中0.10.2!0.3? 在js中进行属性运算时&#xff0c;会出现0.10.20.300000000000000004js遵循IEEE754标…...

持续集成交付CICD:通过API方式上传Nexus制品

目录 一、实验 1.通过API方式上传Nexus制品 二、问题 1.如何通过API方式上传PNG图片 2.如何通过API方式上传tar.gz 与 ZIP文件 3.如何通过API方式上传Jar file文件 4.如何通过API方式上传制品&#xff08;maven类型的制品&#xff09;文件 5.如何下载制品 一、实验 1.通…...

Hadoop学习笔记(HDP)-Part.14 安装YARN+MR

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …...

reinforce 跑 CartPole-v1

gym版本是0.26.1 CartPole-v1的详细信息&#xff0c;点链接里看就行了。 修改了下动手深度强化学习对应的代码。 然后这里 J ( θ ) J(\theta) J(θ)梯度上升更新的公式是用的不严谨的&#xff0c;这个和王树森书里讲的严谨公式有点区别。 代码 import gym import torch from …...

【VRTK】【VR开发】【Unity】13-攀爬

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 VRTK提供两个预制件实现攀爬 Climbing Controller,用于控制Player的物理义体Climbable Interactable,用于设置可攀爬对象【设置Climbing Controller…...

华为OD机试真题-求幸存数之和-2023年OD统一考试(C卷)

题目描述&#xff1a; 给一个正整数列 nums&#xff0c;一个跳数 jump&#xff0c;及幸存数量 left。运算过程为&#xff1a;从索引为0的位置开始向后跳&#xff0c;中间跳过 J 个数字&#xff0c;命中索引为J1的数字&#xff0c;该数被敲出&#xff0c;并从该点起跳&#xff…...

python pyaudio实时读取音频数据并展示波形图

python pyaudio实时读取音频数据并展示波形图 下面代码可以驱动电脑接受声音数据&#xff0c;并实时展示音波图&#xff1a; import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import pyaudio import wave import os import op…...

【算法系列篇】递归、搜索和回溯(二)

文章目录 前言1. 两两交换链表中的节点1.1 题目要求1.2 做题思路1.3 代码实现 2. Pow(X,N)2.1 题目要求2.2 做题思路2.3 代码实现 3. 计算布尔二叉树的值3.1 题目要求3.2 做题思路3.3 代码实现 4. 求根节点到叶结点数字之和4.1 题目要求4.2 做题思路4.3 代码实现 前言 前面为大…...

Ubuntu下安装SDL

源码下载地址&#xff08;SDL version 2.0.14&#xff09;&#xff1a;https://www.libsdl.org/release/SDL2-2.0.14.tar.gz 将源码包拷贝到系统里 使用命令解压 tar -zxvf SDL2-2.0.14.tar.gz 解压得到文件夹 SDL2-2.0.14 进入文件夹 执行命令 ./configure 执行命令 make…...

创建vue项目:vue脚手架安装、vue-cli安装,vue ui界面创建vue工程(vue2/vue3),安装vue、搭建vue项目开发环境(保姆级教程二)

今天讲解 Windows 如何利用脚手架创建 vue 工程&#xff0c;以及 vue ui 图形化界面搭建 vue 开发环境&#xff0c;这是这个系列的第二章&#xff0c;有什么问题请留言&#xff0c;请点赞收藏&#xff01;&#xff01;&#xff01; 文章目录 1、安装vue-cli脚手架2、vue ui创建…...

【3】密评-物理和环境安全测评

0x01 依据 GB/T 39786 -2021《信息安全技术 信息系统密码应用基本要求》针对等保三级系统要求&#xff1a; 物理和环境层面&#xff1a; a&#xff09;宜采用密码技术进行物理访问身份鉴别,保证重要区域进入人员身份的真实性&#xff1b; b&#xff09;宜采用密码技术保证电子门…...

笨爸爸工房,我们在校园|“小鲁班”,铸未来

为了响应国家号召&#xff0c;将劳动教育课程真正实现融入校园生活&#xff0c;笨爸爸工房已与洛阳市西下池小学、洛阳市第一实验小学西工校区、洛阳市西工区第二实验小学、洛阳第二外国语学校&#xff08;兰溪校区&#xff09;、洛阳市睿源幼儿园&#xff0c;这4所学校及1家幼…...

RPC 集群,gRPC 广播和组播

一、集群抽象&#xff1a;cluster 它是指我们在调用远程的时候&#xff0c;尝试解决&#xff1a; 1、failover:即引入重试功能&#xff0c;但是重试的时候会换一个新节点 2、failfast: 立刻失败&#xff0c;不需要重试 3、广播&#xff1a;将请求发送到所有的节点上 4、组…...

OpenSSL SSL_read: Connection was reset, errno 10054

fatal: unable to access ‘https://github.com/vangleer/es-big-screen.git/’: OpenSSL SSL_read: Connection was reset, errno 10054 解决方法&#xff1a;git config --global http.sslVerify “false” 参考链接&#xff1a; https://github.com/Kong/insomnia/issues/2…...