难免有时候需要重新安装系统,每次重新安装系统,有些软件需要重新安装、配置N多软件,饭都吃了几顿,都没有安装完。可以使用Docker容器的方式,进行快速搭建。如果使用虚拟机,存储在非系统盘,即便重装系统,只需要安装虚拟机软件,导入虚拟机文件,即可快速启动一个开发环境。
下面为我在虚拟机中安装的一部分容器,2core 2G ram。
- [ghost]
- [nginx-ui]
- [gitness(Git)]
- [minio]
- [portainer]
- [elasticsearch]
- [postgres]
- [redis]
- [rabbitmq]
- [mysql]
Ghost - 博客平台
首先,我们将使用Ghost搭建一个博客平台。用来记录笔记,存储本地。
为了本地使用域名访问,增加环境变量-e url=http://blog.x.cn
。域名为本地局域网dns解析。
ini
docker run -d \
--name ghost \
-e NODE_ENV=development \
-e database__connection__filename='/var/lib/ghost/content/data/ghost.db' \
-e url=http://blog.x.cn \
--restart always \
-p 3001:2368 \
ghost:alpine
Nginx UI - Nginx管理工具
接下来,我们使用Nginx UI来管理Nginx。配置所有服务统一从nginx,nginx-ui可以通过web页面进行配置虚拟机。
bash
docker run -dit \
--name=nginx-ui \
--restart=always \
-e TZ=Asia/Shanghai \
-v /data/nginx/nginx:/etc/nginx \
-v /data/nginx/nginx-ui:/etc/nginx-ui \
-v /data/nginx/root/html:/root/html \
-v /data/nginx/root/cert:/root/cert \
-p 80:80 -p 443:443 \
uozi/nginx-ui:latest
Gitness - Git仓库管理工具
为了方便管理代码仓库,我们使用Gitness。本地git仓库。任何代码都可以推到本地备份起来。
bash
docker run -d \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /data/gitness:/data \
--name gitness \
--restart always \
harness/gitness
Minio - 对象存储服务
我们还需要一个对象存储服务,这里选择Minio。Windows可以使用rclone挂载桶到目录。对于常用的软件、图片、视频、配置文件等。可以使用Minio进行存储,快速存快取。
bash
docker run -d --name minio \
--publish 9000:9000 \
--publish 9001:9001 \
--env MINIO_ROOT_USER="minioadmin" \
--env MINIO_ROOT_PASSWORD="minioadmin" \
--volume /data:/data \
--restart always \
bitnami/minio:latest
Portainer - Docker容器管理工具
为了方便管理Docker容器,我们使用Portainer。通过网页管理Docker。
bash
docker run -d -p 9010:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /data/portainer:/data \
--restart=always \
--name portainer \
portainer/portainer-ce:latest
Elasticsearch - 搜索引擎
我们还需要一个搜索引擎,这里选择Elasticsearch。
bash
docker run -d --name=elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-v /data/es:/usr/share/elasticsearch/data \
-v /data/es/plugins:/usr/share/elasticsearch/plugins \
elasticsearch:7.5.2
PostgreSQL - 关系型数据库
为了存储数据,我们使用PostgreSQL。
diff
docker run --name postgres \
-e POSTGRES_PASSWORD=000000 \
-p 5432:5432 \
-v /data/postgresql/data:/var/lib/postgresql/data \
-d postgres
Redis - 键值对存储
我们还需要一个键值对存储服务,这里选择Redis。
css
docker run --name redis -p 6379:6379 -d redis:7.2.4-alpine3.19
RabbitMQ - 消息队列
为了实现消息队列功能,我们使用RabbitMQ。用户名密码默认都是guest。
css
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13.0-management-alpine
MySQL - 关系型数据库
除了PostgreSQL,我们也可以选择MySQL作为关系型数据库。
diff
docker run --name my-mysql \
-e MYSQL_ROOT_PASSWORD=000000 \
-p 3306:3306 \
-v /data/mysql/data:/var/lib/mysql \
-d mysql
Docker Registry - Docker镜像仓库
最后,我们可以搭建一个私有的Docker镜像仓库。如果通过域名访问,需要https,之后,通过反向代理http也可以访问。
diff
docker run -d -p 5000:5000 \
-v /data/registry:/var/lib/registry \
--restart always \
--name registry \
registry:2
Gitness - 搭建本地Git仓库服务
例如,我们可以使用以下命令为Gitness添加自定义域名:
arduino
docker run -d \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /data/gitness:/data \
-e GITNESS_URL_BASE=http://git.x.cn \
--name gitness-domain \
--restart always \
harness/gitness
现在,我们可以使用git.x.cn。来访问Gitness。
这样,我们就使用Docker快速搭建了一个开发环境,包括博客平台、Nginx管理工具、Git仓库管理工具、对象存储服务等等。这些容器可以通过自定义域名进行访问。
域名访问,dns配置
想通过域名访问,就得搭建本地dns服务器。dns可以使用你喜欢的任何方式进行搭建。
域名*.x.cn
的二级域名,就是通过本地搭建dns服务进行解析的。添加A记录* *
,到ip。然后使用nginx,把需要访问的服务绑定到域名。需要访问的主机的dns设置为本地dns服务器地址。
-
Linux 设置dns
cat /etc/resolv.conf nameserver 192.168.31.47
-
Windows 通过图形界面,在网络中进行设置。
所有容器,统一挂载了卷,到/data/*
。通过单独分配目录,用于持久化docker容器需要持久化的数据挂载本地的目录。
多台主机需要访问/data
中的数据,在拥有/data
数据主机安装配置nfs,为其他每台主机进行挂载nfs的盘到本地目录。即可多台主机像服务本地文件一样进行访问。
我非常喜欢使用Docker来搭建和管理我的开发环境。使用Docker容器可以使我能够快速部署和配置各种服务,而不必担心与其他服务之间的冲突。我可以轻松地将所需的服务组合在一起,并使用Docker容器管理工具进行管理。
在这个示例中,我使用了Ghost作为博客平台,Nginx UI作为Nginx管理工具,Gitness作为Git仓库管理工具,Minio作为对象存储服务,Portainer作为Docker容器管理工具,Elasticsearch作为搜索引擎,PostgreSQL和MySQL作为关系型数据库,Redis作为键值对存储,RabbitMQ作为消息队列,以及Docker Registry作为Docker镜像仓库。
通过使用这些工具,我可以在本地搭建一个完整的开发环境,并轻松地进行开发、部署和管理各种应用程序。我可以使用自定义的域名来访问这些服务,以便更方便地进行开发和测试。
总而言之,使用Docker可以极大地简化开发环境的搭建和管理过程,使我能够更专注于开发工作而不必担心底层的配置和冲突。这大大提高了我的工作效率,并使我能够更好地管理我的项目。作为一个程序员,我强烈推荐使用Docker来构建和管理开发环境。