難免有時(shí)候需要重新安裝系統(tǒng),每次重新安裝系統(tǒng),有些軟件需要重新安裝、配置N多軟件,飯都吃了幾頓,都沒有安裝完??梢允褂?span id="hpmldgo" class="candidate-entity-word" data-gid="1782721469276222823">docker容器的方式,進(jìn)行快速搭建。如果使用虛擬機(jī),存儲(chǔ)在非系統(tǒng)盤,即便重裝系統(tǒng),只需要安裝虛擬機(jī)軟件,導(dǎo)入虛擬機(jī)文件,即可快速啟動(dòng)一個(gè)開發(fā)環(huán)境。
下面為我在虛擬機(jī)中安裝的一部分容器,2core 2G ram。
- [ghost]
- [Nginx-ui]
- [gitness(git)]
- [minio]
- [portainer]
- [elasticsearch]
- [postgres]
- [redis]
- [RabbitMQ]
- [MySQL]
Ghost – 博客平臺(tái)
首先,我們將使用Ghost搭建一個(gè)博客平臺(tái)。用來記錄筆記,存儲(chǔ)本地。
為了本地使用域名訪問,增加環(huán)境變量-e url=http://blog.x.cn。域名為本地局域網(wǎng)dns解析。
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。配置所有服務(wù)統(tǒng)一從nginx,nginx-ui可以通過web頁(yè)面進(jìn)行配置虛擬機(jī)。
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倉(cāng)庫(kù)管理工具
為了方便管理代碼倉(cāng)庫(kù),我們使用Gitness。本地git倉(cāng)庫(kù)。任何代碼都可以推到本地備份起來。
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 – 對(duì)象存儲(chǔ)服務(wù)
我們還需要一個(gè)對(duì)象存儲(chǔ)服務(wù),這里選擇Minio。Windows可以使用rclone掛載桶到目錄。對(duì)于常用的軟件、圖片、視頻、配置文件等??梢允褂肕inio進(jìn)行存儲(chǔ),快速存快取。
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。通過網(wǎng)頁(yè)管理Docker。
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 – 搜索引擎
我們還需要一個(gè)搜索引擎,這里選擇Elasticsearch。
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 – 關(guān)系型數(shù)據(jù)庫(kù)
為了存儲(chǔ)數(shù)據(jù),我們使用PostgreSQL。
docker run --name postgres -e POSTGRES_PASSWORD=000000 -p 5432:5432 -v /data/postgresql/data:/var/lib/postgresql/data -d postgres
Redis – 鍵值對(duì)存儲(chǔ)
我們還需要一個(gè)鍵值對(duì)存儲(chǔ)服務(wù),這里選擇Redis。
docker run --name redis -p 6379:6379 -d redis:7.2.4-alpine3.19
RabbitMQ – 消息隊(duì)列
為了實(shí)現(xiàn)消息隊(duì)列功能,我們使用RabbitMQ。用戶名密碼默認(rèn)都是guest。
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13.0-management-alpine
MySQL – 關(guān)系型數(shù)據(jù)庫(kù)
除了PostgreSQL,我們也可以選擇MySQL作為關(guān)系型數(shù)據(jù)庫(kù)。
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鏡像倉(cāng)庫(kù)
最后,我們可以搭建一個(gè)私有的Docker鏡像倉(cāng)庫(kù)。如果通過域名訪問,需要https,之后,通過反向代理http也可以訪問。
docker run -d -p 5000:5000 -v /data/registry:/var/lib/registry --restart always --name registry registry:2
Gitness – 搭建本地Git倉(cāng)庫(kù)服務(wù)
例如,我們可以使用以下命令為Gitness添加自定義域名:
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
現(xiàn)在,我們可以使用http://git.x.cn。來訪問Gitness。
這樣,我們就使用Docker快速搭建了一個(gè)開發(fā)環(huán)境,包括博客平臺(tái)、Nginx管理工具、Git倉(cāng)庫(kù)管理工具、對(duì)象存儲(chǔ)服務(wù)等等。這些容器可以通過自定義域名進(jìn)行訪問。
域名訪問,dns配置
想通過域名訪問,就得搭建本地dns服務(wù)器。dns可以使用你喜歡的任何方式進(jìn)行搭建。
域名.x.cn的二級(jí)域名,就是通過本地搭建dns服務(wù)進(jìn)行解析的。添加A記錄 *,到ip。然后使用nginx,把需要訪問的服務(wù)綁定到域名。需要訪問的主機(jī)的dns設(shè)置為本地dns服務(wù)器地址。
- Linux 設(shè)置dns
cat /etc/resolv.confnameserver 192.168.31.47
- Windows 通過圖形界面,在網(wǎng)絡(luò)中進(jìn)行設(shè)置。
所有容器,統(tǒng)一掛載了卷,到/data/*。通過單獨(dú)分配目錄,用于持久化Docker容器需要持久化的數(shù)據(jù)掛載本地的目錄。
多臺(tái)主機(jī)需要訪問/data中的數(shù)據(jù),在擁有/data數(shù)據(jù)主機(jī)安裝配置nfs,為其他每臺(tái)主機(jī)進(jìn)行掛載nfs的盤到本地目錄。即可多臺(tái)主機(jī)像服務(wù)本地文件一樣進(jìn)行訪問。
我非常喜歡使用Docker來搭建和管理我的開發(fā)環(huán)境。使用Docker容器可以使我能夠快速部署和配置各種服務(wù),而不必?fù)?dān)心與其他服務(wù)之間的沖突。我可以輕松地將所需的服務(wù)組合在一起,并使用Docker容器管理工具進(jìn)行管理。
在這個(gè)示例中,我使用了Ghost作為博客平臺(tái),Nginx UI作為Nginx管理工具,Gitness作為Git倉(cāng)庫(kù)管理工具,Minio作為對(duì)象存儲(chǔ)服務(wù),Portainer作為Docker容器管理工具,Elasticsearch作為搜索引擎,PostgreSQL和MySQL作為關(guān)系型數(shù)據(jù)庫(kù),Redis作為鍵值對(duì)存儲(chǔ),RabbitMQ作為消息隊(duì)列,以及Docker Registry作為Docker鏡像倉(cāng)庫(kù)。
通過使用這些工具,我可以在本地搭建一個(gè)完整的開發(fā)環(huán)境,并輕松地進(jìn)行開發(fā)、部署和管理各種應(yīng)用程序。我可以使用自定義的域名來訪問這些服務(wù),以便更方便地進(jìn)行開發(fā)和測(cè)試。
總而言之,使用Docker可以極大地簡(jiǎn)化開發(fā)環(huán)境的搭建和管理過程,使我能夠更專注于開發(fā)工作而不必?fù)?dān)心底層的配置和沖突。這大大提高了我的工作效率,并使我能夠更好地管理我的項(xiàng)目。作為一個(gè)程序員,我強(qiáng)烈推薦使用Docker來構(gòu)建和管理開發(fā)環(huán)境。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。