中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

app產(chǎn)品網(wǎng)站建設(shè)沈陽(yáng)線上教學(xué)

app產(chǎn)品網(wǎng)站建設(shè),沈陽(yáng)線上教學(xué),wordpress有名的網(wǎng)站,溫州網(wǎng)絡(luò)公司網(wǎng)站建設(shè)本文目錄 1. Dokcer-compose回顧下Docker知識(shí)編寫docker-compose.yaml運(yùn)行docker 2. 部署go服務(wù)編寫dockerfile 1. Dokcer-compose 這里簡(jiǎn)單先用一下win版本的Docker,后期開發(fā)好了部署的時(shí)候再移植到服務(wù)器下進(jìn)行docker部署。 輸入命令docker-compose version 就可…

在這里插入圖片描述

本文目錄

  • 1. Dokcer-compose
    • 回顧下Docker知識(shí)
    • 編寫docker-compose.yaml
    • 運(yùn)行docker
  • 2. 部署go服務(wù)
    • 編寫dockerfile

1. Dokcer-compose

這里簡(jiǎn)單先用一下win版本的Docker,后期開發(fā)好了部署的時(shí)候再移植到服務(wù)器下進(jìn)行docker部署。

輸入命令docker-compose version 就可以看到已經(jīng)裝好的docker版本了,順便裝一個(gè)dockerdesktop。

回顧下Docker知識(shí)

Docker 是一個(gè)開源的應(yīng)用容器引擎,它通過(guò)容器技術(shù)來(lái)實(shí)現(xiàn)輕量級(jí)的虛擬化。容器允許開發(fā)者將應(yīng)用及其所有依賴包打包到一個(gè)可移植的容器中,以便在任何環(huán)境中一致地運(yùn)行。

Docker Compose 是 Docker 官方提供的一個(gè)工具,用于定義和運(yùn)行多容器的 Docker 應(yīng)用。通過(guò) Compose,用戶可以使用 YAML 文件來(lái)定義多個(gè) Docker 容器的服務(wù)、網(wǎng)絡(luò)、存儲(chǔ)卷等配置,并通過(guò)一個(gè)命令(docker-compose up)啟動(dòng)所有定義好的服務(wù)。

Dockerfile 是用來(lái)構(gòu)建 Docker 鏡像的文件,包含創(chuàng)建鏡像的步驟和指令,可以與 Docker Compose 配合使用,在 Compose 中定義服務(wù)時(shí)使用自定義的 Docker 鏡像。

編寫docker-compose.yaml

目前需要部署Mysql、Redis、Etcd、User、Api服務(wù),所以需要編寫一下Docker方便以后啟動(dòng)。

創(chuàng)建一個(gè)docker-compose.yaml文件,然后進(jìn)行容器編排。

version: '3'
services:mysql:container_name: mysql8image: mysql:${MYSQL_VERSION}restart: alwaysports:- 3309:3306environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: msprojectvolumes:- ${MYSQL_DIR}/data:/var/lib/mysql- ${MYSQL_DIR}/conf:/etc/mysql/conf.d/- ${MYSQL_DIR}/logs:/logscommand:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1

這里大致講一下進(jìn)行了什么操作,回顧下之前學(xué)過(guò)的docker容器。

首先定義容器名稱,container_name: mysql8,定義了容器的名稱為 mysql8,可以通過(guò)這個(gè)名稱來(lái)管理MySQL容器。

image: mysql:${MYSQL_VERSION}該配置使用指定版本的MySQL鏡像,${MYSQL_VERSION} 是一個(gè)變量,表示MySQL的版本號(hào)。該變量的實(shí)際值在運(yùn)行時(shí)會(huì)由環(huán)境變量提供。

3309:3306 將容器的3306端口(MySQL默認(rèn)端口)映射到主機(jī)的3309端口??梢酝ㄟ^(guò)主機(jī)的3309端口訪問(wèn)容器中的MySQL服務(wù)。

MYSQL_DATABASE: msproject 創(chuàng)建一個(gè)名為msproject的數(shù)據(jù)庫(kù)。

${MYSQL_DIR}/data:/var/lib/mysql 將主機(jī)上 ${MYSQL_DIR}/data 目錄映射到容器的 /var/lib/mysql 目錄,這是MySQL存儲(chǔ)數(shù)據(jù)的位置。

${MYSQL_DIR}/conf:/etc/mysql/conf.d/ 將主機(jī)上 ${MYSQL_DIR}/conf 目錄映射到容器的 /etc/mysql/conf.d/,用于配置MySQL。

${MYSQL_DIR}/logs:/logs 將主機(jī)上 ${MYSQL_DIR}/logs 目錄映射到容器的 /logs 目錄,用于存儲(chǔ)MySQL的日志。

然后是Redis的持久化。

  Redis:container_name: redis6image: redis:${REDIS_VERSION}restart: alwaysvolumes:- ${REDIS_DIR}/data:/data- ${REDIS_DIR}/conf/redis.conf:/etc/redis/redis.confports:- ${REDIS_PORT}:6379command: redis-server /etc/redis/redis.conf

Etcd持久化。

  Project-User:container_name: project-userimage: project-user:latestports:- 8080:8080- 8881:8881

User服務(wù)持久化。

  Etcd:container_name: etcd3image: bitnami/etcd:${ETCD_VERSION}deploy:replicas: 1restart_policy:condition: on-failureenvironment:- ALLOW_NONE_AUTHENTICATION=yesprivileged: truevolumes:- ${ETCD_DIR}/data:/bitnami/etcd/dataports:- ${ETCD_PORT}:2379- 2380:2380

上面我們有一些需要環(huán)境提供的參數(shù),這里需要在.env環(huán)境編寫。

MYSQL_VERSION=8.0.20
MYSQL_DIR=D:\GoProject\msproject-data\mysql
MYSQL_PORT=3309
REDIS_VERSION=6.2.7
REDIS_PORT=6379
REDIS_DIR=D:\GoProject\msproject-data\redis
ETCD_VERSION=3.5.6
ETCD_PORT=2379
ETCD_DIR=D:\GoProject\msproject-data\etcd

此外還需要在redis下來(lái)配置.conf文件D:\GoProject\msproject-data\redis\conf

# 任意ip可訪問(wèn)
bind 0.0.0.0
# 自定義啟動(dòng)端口
port 6379
# rdb或aof文件存儲(chǔ)位置
dir /data
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"

運(yùn)行docker

我們?cè)陧?xiàng)目路徑下直接docker-compose up -d,-d的作用是后臺(tái)啟動(dòng),然后直接等待拉取啟動(dòng)即可。

在這里插入圖片描述
在desktop中能看到幫我們拉取的鏡像。

在這里插入圖片描述
以及啟動(dòng)的容器。

在這里插入圖片描述

通過(guò)redis試試是否能夠添加成功。

在這里插入圖片描述

CREATE TABLE `ms_member`  (`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '系統(tǒng)前臺(tái)用戶表',`account` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '用戶登陸賬號(hào)',`password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '登陸密碼',`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用戶昵稱',`mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手機(jī)',`realname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '真實(shí)姓名',`create_time` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',`status` tinyint(1) NULL DEFAULT 0 COMMENT '狀態(tài)',`last_login_time` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上次登錄時(shí)間',`sex` tinyint(0) NULL DEFAULT 0 COMMENT '性別',`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '頭像',`idcard` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份證',`province` int(0) NULL DEFAULT 0 COMMENT '省',`city` int(0) NULL DEFAULT 0 COMMENT '市',`area` int(0) NULL DEFAULT 0 COMMENT '區(qū)',`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所在地址',`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '備注',`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '郵箱',`dingtalk_openid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '釘釘openid',`dingtalk_unionid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '釘釘unionid',`dingtalk_userid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '釘釘用戶id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用戶表' ROW_FORMAT = COMPACT;

我們把準(zhǔn)備好的表,在mysql中導(dǎo)入。

在這里插入圖片描述
這樣服務(wù)就跑起來(lái)了,我們來(lái)看看現(xiàn)在etcd是否能用。

分別把user服務(wù)和api服務(wù)跑起來(lái),然后看看前端是否能夠正常請(qǐng)求。

在這里插入圖片描述

驗(yàn)證無(wú)誤,現(xiàn)在把mysql、redis、etcd遷移到docker上了,查詢r(jià)edis也能夠查詢到記錄的驗(yàn)證碼!

在這里插入圖片描述

2. 部署go服務(wù)

需要把go服務(wù)也編譯打包成鏡像,然后運(yùn)行起來(lái)。下面是一個(gè)編譯的腳本。

chcp 65001
@echo off
:loop
@echo off&color 0A
cls
echo,
echo 請(qǐng)選擇要編譯的系統(tǒng)環(huán)境:
echo,
echo 1. Windows_amd64
echo 2. linux_amd64set/p action=請(qǐng)選擇:
if %action% == 1 goto build_Windows_amd64
if %action% == 2 goto build_linux_amd64:build_Windows_amd64
echo 編譯Windows版本64位
SET CGO_ENABLED=0
SET GOOS=windows
SET GOARCH=amd64
go build -o project-user/target/project-user.exe project-user/main.go
go build -o project-api/target/project-api.exe project-api/main.go
:build_linux_amd64
echo 編譯Linux版本64位
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o project-user/target/project-user project-user/main.go
go build -o project-api/target/project-api project-api/main.go

在腳本下執(zhí)行build 命令,然后進(jìn)行編譯,這里我們需要編譯linux版本,放到docker中去。

在這里插入圖片描述

編寫dockerfile

寫dockerfile是為了編譯成鏡像。

FROM alpine
WORKDIR /Initial
COPY ./target/project-user .
COPY ./config/config-docker.yaml .
RUN  mkdir config && mv config-docker.yaml config/config.yaml
EXPOSE 8080 8881
ENTRYPOINT ["./project-user"]

FROM alpine指定了構(gòu)建鏡像所使用的基礎(chǔ)鏡像為 alpine,這是一個(gè)非常輕量的 Linux 發(fā)行版。使用 alpine 作為基礎(chǔ)鏡像,可以減小鏡像的體積,因?yàn)?alpine 鏡像通常非常小,只有幾十兆。

WORKDIR /Initial 設(shè)置容器內(nèi)的工作目錄為 /Initial。工作目錄是指在容器中運(yùn)行命令時(shí)默認(rèn)的目錄。如果該目錄不存在,WORKDIR 會(huì)創(chuàng)建它。

COPY ./target/project-user .將本地系統(tǒng)中的 ./target/project-user 文件復(fù)制到 Docker 容器中的當(dāng)前工作目錄(即 /Initial)中。

COPY ./config/config-docker.yaml . 將本地系統(tǒng)中的 ./config/config-docker.yaml 文件復(fù)制到 Docker 容器的當(dāng)前工作目錄(/Initial)中。此文件通常用于存儲(chǔ)容器中應(yīng)用的配置文件。

RUN mkdir config && mv config-docker.yaml config/config.yaml ,首先在在容器的當(dāng)前工作目錄中創(chuàng)建一個(gè)名為 config 的新目錄。然后mv config-docker.yaml config/config.yaml:將之前復(fù)制到容器中的 config-docker.yaml 文件重命名為 config/config.yaml 并移動(dòng)到新創(chuàng)建的 config 目錄中。

EXPOSE 8080 8881 告知 Docker 容器將暴露端口 8080 和 8881,意味著容器運(yùn)行時(shí),這些端口將會(huì)被開放,并允許主機(jī)或其他容器與之通信。需要注意的是,EXPOSE 僅是一個(gè)聲明,它不會(huì)自動(dòng)將端口映射到主機(jī)上,實(shí)際的端口映射需要通過(guò) docker run -p 或 docker-compose.yml 配置來(lái)完成。

ENTRYPOINT ["./project-user"] 指定容器啟動(dòng)時(shí)的默認(rèn)命令。ENTRYPOINT 設(shè)置容器運(yùn)行時(shí)的入口點(diǎn),容器啟動(dòng)后,會(huì)執(zhí)行 ./project-user 這個(gè)命令。通常,ENTRYPOINT 用來(lái)指定容器的主進(jìn)程。在這里,./project-user 是容器內(nèi)的一個(gè)可執(zhí)行文件,它會(huì)在容器啟動(dòng)時(shí)運(yùn)行。

然后我們需要把原來(lái)config文件復(fù)制一份改為config-docker.yaml文件,并且需要修改配置代碼。原本我們的server地址是127.0.0.1,這是本地回環(huán)地址,任何綁定在 127.0.0.1 上的服務(wù)只能在本地機(jī)器上訪問(wèn),不能從其他機(jī)器或者網(wǎng)絡(luò)中訪問(wèn)

需要改為0.0.0.0,綁定到 0.0.0.0 上的服務(wù)將接受來(lái)自所有網(wǎng)絡(luò)接口(包括外部網(wǎng)絡(luò)接口)的請(qǐng)求。這意味著服務(wù)不僅能接受本地機(jī)器的請(qǐng)求,還能接受來(lái)自其他機(jī)器或容器的請(qǐng)求。

server:name: "project-user"addr: "0.0.0.0:8080"
zap:debugFileName: "/logs/debug/project-debug.log"infoFileName: "/logs/info/project-info.log"warnFileName: "/logs/error/project-error.log"maxSize: 500,maxAge: 28,MaxBackups: 3
redis:host: "redis6"port: 6379password: ""db: 0
grpc:addr: "0.0.0.0:8881"name: "user"version: "1.0.0"weight: 2
etcd:addrs:- "etcd3:2379"

也就是說(shuō),在 Docker 容器中,通常容器中的服務(wù)是通過(guò) 容器的網(wǎng)絡(luò)接口 與其他容器或主機(jī)進(jìn)行通信的。如果你將應(yīng)用綁定到 127.0.0.1,那么它將只能接受來(lái)自容器內(nèi)部(即容器的網(wǎng)絡(luò)棧)或者本地機(jī)器的請(qǐng)求,而不能接受外部請(qǐng)求。這對(duì)多容器應(yīng)用或需要外部訪問(wèn)的服務(wù)(如 Web 服務(wù)、gRPC 服務(wù)等)會(huì)構(gòu)成問(wèn)題。

同時(shí)還要對(duì)redis和etcd的容器名設(shè)定好,已經(jīng)起來(lái)的容器名稱是redis6和etcd3,我們需要對(duì)應(yīng)設(shè)置好。

并且在docker-compoose.yaml的文件下,加入U(xiǎn)ser相關(guān)配置。

  Project-User:container_name: project-userimage: project-user:latestports:- 8080:8080- 8881:8881

然后再寫一個(gè)run.bat的腳本,一起來(lái)打包運(yùn)行。

chcp 65001
cd project-user
docker build -t project-user:latest .
cd ..
docker-compose up -d

chcp 65001 用于 設(shè)置命令行的字符編碼 為 UTF-8(65001 是 UTF-8 編碼的代碼頁(yè))。

docker build -t project-user:latest .構(gòu)建 Docker 鏡像的命令。-t project-user:latest:這是為構(gòu)建出來(lái)的 Docker 鏡像指定一個(gè)標(biāo)簽(-t 參數(shù)),標(biāo)簽為 project-user:latest。latest 是鏡像的版本標(biāo)簽,意味著這是最新版本的鏡像。.:指的是當(dāng)前目錄(即 project-user 目錄)。構(gòu)建過(guò)程會(huì)查找當(dāng)前目錄下的 Dockerfile 文件,使用 Dockerfile 中的指令來(lái)構(gòu)建鏡像。

docker-compose up -d 也就是cd到上層目錄之后,會(huì)根據(jù)當(dāng)前目錄下的 docker-compose.yml 文件來(lái)啟動(dòng)定義的服務(wù)。docker-compose.yml 文件通常包含一個(gè)或多個(gè)服務(wù)(如 Web 服務(wù)、數(shù)據(jù)庫(kù)服務(wù)等)的配置。

然后我們來(lái)run這個(gè)bat腳本,然后等待運(yùn)行即可。(這個(gè)過(guò)程需要魔法,不然會(huì)失敗,這個(gè)點(diǎn)大家自行解決即可。)

在這里插入圖片描述
嗯,魔法也不行,魔法只能pull,但是不能構(gòu)建dockerfile,會(huì)一直提示報(bào)錯(cuò),這里還需要添加docker的鏡像地址。

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.registry.cyou/","https://docker-cf.registry.cyou/","https://dockercf.jsdelivr.fyi/","https://docker.jsdelivr.fyi/","https://dockertest.jsdelivr.fyi/","https://mirror.aliyuncs.com/","https://dockerproxy.com/","https://mirror.baidubce.com/","https://docker.m.daocloud.io/","https://docker.nju.edu.cn/","https://docker.mirrors.sjtug.sjtu.edu.cn/","https://docker.mirrors.ustc.edu.cn/","https://mirror.iscas.ac.cn/","https://docker.rainbond.cc/","https://jq794zz5.mirror.aliyuncs.com"]}

這里我們?cè)赿ocker引擎里面設(shè)置即可。

在這里插入圖片描述
現(xiàn)在再重新run.bat這個(gè)腳本,就可以構(gòu)造我們user的鏡像,并且運(yùn)行全部的docker compose了。

在這里插入圖片描述
在這里插入圖片描述
這個(gè)時(shí)候我們也能看到user鏡像了。

在這里插入圖片描述

現(xiàn)在啟動(dòng)就可以不用通過(guò)本地goland用go run 命令啟動(dòng)服務(wù)了,已經(jīng)在容器里面跑起來(lái)了。

通過(guò)命令docker logs -f project-user可以查看對(duì)應(yīng)的docker容器日志。

在這里插入圖片描述
然后在本地啟動(dòng)api服務(wù),在前端發(fā)送請(qǐng)求,驗(yàn)證成功。

在這里插入圖片描述
此時(shí)user容器的日志也已更新。

在這里插入圖片描述

如果后續(xù)改動(dòng)了代碼,需要驗(yàn)證的話,步驟就是先運(yùn)行命令build.bat命令,build對(duì)應(yīng)的linux版本。也就是先編譯Go程序?yàn)閘inux版本。

然后運(yùn)行run.bat腳本,重新編譯鏡像并運(yùn)行容器。這樣等待重新生效即可。


后續(xù)如何在linux下查看占用的端口情況,這里有兩個(gè)命令:

netstat -tulnpss -tuln
http://www.risenshineclean.com/news/51008.html

相關(guān)文章:

  • 制作視頻網(wǎng)站教程網(wǎng)站測(cè)速工具
  • 廣州建網(wǎng)站培訓(xùn)刷粉網(wǎng)站推廣馬上刷
  • 做國(guó)外購(gòu)物網(wǎng)站網(wǎng)上怎么找人去推廣廣告
  • 站長(zhǎng)素材網(wǎng)站種子搜索神器在線引擎
  • 邯鄲網(wǎng)站優(yōu)化平臺(tái)fifa最新排名出爐
  • 手機(jī)網(wǎng)站制作合同如何聯(lián)系百度推廣
  • 什么是網(wǎng)站維護(hù)寧波優(yōu)化系統(tǒng)
  • 網(wǎng)站如何做seo的網(wǎng)絡(luò)營(yíng)銷課程培訓(xùn)機(jī)構(gòu)
  • 無(wú)錫知名網(wǎng)站制作求職seo
  • html5手機(jī)網(wǎng)站特效今日山東新聞?lì)^條
  • 麥包包的網(wǎng)站建設(shè)網(wǎng)絡(luò)運(yùn)營(yíng)推廣
  • 英文網(wǎng)站源碼北京疫情又嚴(yán)重了
  • 如何建設(shè)網(wǎng)站設(shè)計(jì)網(wǎng)站軟件推薦
  • 柳州建站免費(fèi)seo視頻教程
  • 自學(xué)做網(wǎng)站界面百度自動(dòng)駕駛技術(shù)
  • 中國(guó)建設(shè)銀行網(wǎng)站u盾修改密碼seo自學(xué)網(wǎng)app
  • 自動(dòng)優(yōu)化網(wǎng)站建設(shè)服裝市場(chǎng)調(diào)研報(bào)告范文
  • 可口可樂(lè)公司建設(shè)網(wǎng)站的目的是什么seo推廣優(yōu)化工具
  • 鄭州網(wǎng)站建設(shè)zzjisu網(wǎng)絡(luò)軟文營(yíng)銷案例3篇
  • 學(xué)校網(wǎng)站源碼php地推團(tuán)隊(duì)接單平臺(tái)
  • phpcms v9 網(wǎng)站搬家軟件培訓(xùn)機(jī)構(gòu)排名
  • 開源展示型網(wǎng)站沈陽(yáng)seo優(yōu)化新勢(shì)力
  • 網(wǎng)站建設(shè)推廣選stso88效果好91關(guān)鍵詞
  • 專業(yè)做網(wǎng)站的技術(shù)人員百度網(wǎng)站如何優(yōu)化排名
  • 怎么做網(wǎng)站開發(fā)中國(guó)最新消息
  • 深圳網(wǎng)站建設(shè)哪家公司好我贏網(wǎng)客服系統(tǒng)
  • window2003iis建好的網(wǎng)站營(yíng)銷型網(wǎng)站建設(shè)論文
  • WordPress主題沒(méi)有刪除站內(nèi)優(yōu)化seo
  • 做網(wǎng)站北京重慶seo技術(shù)教程博客
  • 長(zhǎng)沙優(yōu)化網(wǎng)站技術(shù)廠家seo網(wǎng)站推廣有哪些