欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker部署Golang服務(wù)的實(shí)現(xiàn)步驟

 更新時(shí)間:2024年01月23日 09:43:19   作者:John_rush  
不管是開發(fā)還是生產(chǎn)環(huán)境,通過docker方式部署服務(wù)都是一種不錯(cuò)的選擇,本文主要介紹了Docker部署Golang服務(wù)的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下

不管是開發(fā)還是生產(chǎn)環(huán)境,通過 docker 方式部署服務(wù)都是一種不錯(cuò)的選擇,能夠解決不同開發(fā)環(huán)境一致性的問題。

Dockerfile 構(gòu)建 Go 運(yùn)用環(huán)境

在項(xiàng)目根目錄下添加 Dockerfile 文件:

FROM golang:alpine

# 在容器內(nèi)部設(shè)置環(huán)境變量
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 設(shè)置后續(xù)指令的工作目錄
WORKDIR /build

# 復(fù)制項(xiàng)目中的 go.mod 和 go.sum文件并下載依賴信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 將代碼復(fù)制到容器中
COPY . .

# 將代碼編譯成二進(jìn)制可執(zhí)行文件
RUN go build -o go-api .

WORKDIR /dist

RUN cp /build/go-api .

COPY ./config ./config

# 需要運(yùn)行的命令
ENTRYPOINT ["/dist/go-api", "/dist/config/env.yml"]

如果需要縮小鏡像大小,則可以用以下方式進(jìn)行構(gòu)建

FROM golang:alpine AS builder

# 在容器內(nèi)部設(shè)置環(huán)境變量
ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 設(shè)置后續(xù)指令的工作目錄
WORKDIR /build

# 復(fù)制項(xiàng)目中的 go.mod 和 go.sum文件并下載依賴信息
COPY go.mod .
COPY go.sum .
RUN go mod download

# 將代碼復(fù)制到容器中
COPY . .

# 將代碼編譯成二進(jìn)制可執(zhí)行文件
RUN go build -o go-api .


# 創(chuàng)建一個(gè)小鏡像
#FROM scratch
FROM debian:stretch-slim

COPY ./config /config

# 從builder鏡像中把 /build/go-api 拷貝到當(dāng)前目錄
COPY --from=builder /build/go-api /

# 需要運(yùn)行的命令
ENTRYPOINT ["/go-api", "config/env.yml"]

注:鏡像scratch沒有bash,會(huì)導(dǎo)致無法通過docker exec進(jìn)入容器,建議直接改成debian:stretch-slim鏡像

構(gòu)建 docker 鏡像 go-web-app

$ docker build -t go-web-app .

# 查看鏡像
$ docker images

啟動(dòng)容器來運(yùn)行鏡像:

$ docker run -p 8888:8088 go-web-app

# 后臺(tái)啟動(dòng)
$ $ docker run -p 8888:8088 -d go-web-app

# 查看容器
$ docker ps -a
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                    NAMES
959ee47f203b   go-web-app   "/go-api config/env.…"   23 seconds ago   Up 22 seconds   0.0.0.0:8888->8088/tcp   nostalgic_mclean

標(biāo)志位-p用來定義端口綁定,容器中g(shù)o服務(wù)端口為 8088,綁定到本機(jī)端口 8888,接下來就可以通過http://127.0.0.1:8888進(jìn)行訪問了。

Mysql 容器

拉取 Mysql 鏡像:

# 拉取最新版本 mysql,也可以指定版本
$ docker pull mysql:latest

# 查看鏡像
$ docker images

運(yùn)行 Mysql 容器:

$ docker run --name mysql -p 8306:3306 -e MYSQL_ROOT_PASSWORD=root123456 -v ~/docker-data/mysql:/var/lib/mysql -d mysql:latest

# 查看容器
$ docker ps -a
  • --name mysql-latest:容器命名為 mysql-latest
  • -p 8306:3306:映射容器服務(wù)的 3306 端口到宿主機(jī)的 8306 端口,外部主機(jī)可以直接通過 宿主機(jī)ip:8306 訪問到MySQL服務(wù)
  • -e MYSQL_ROOT_PASSWORD=root123456:設(shè)置 MySQL 服務(wù) root 用戶密碼
  • -v /Users/john/docker-data/mysql:/var/lib/mysql:表示將宿主機(jī)的/Users/john/docker-data/mysql卷映射到容器里的 /var/lib/mysql卷中,為了把數(shù)據(jù)保存在宿主機(jī)中,防止容器刪掉就沒了
  • -d:后臺(tái)運(yùn)行
  • mysql:latest:使用這個(gè)mysql鏡像

連通性測(cè)試:

進(jìn)入 docker 容器連接 mysql:

# 進(jìn)入容器
$ docker exec -it mysql-latest /bin/sh
# 連接 mysql
$ mysql -uroot -proot123456 -h 127.0.0.1 -P3306

或者本機(jī)可以通過 navicat 等工具進(jìn)行連接。

Redis 容器

拉取 Redis 鏡像:

$ docker pull redis

# 查看鏡像
$ docker images

運(yùn)行 Redis 容器:

$ docker run --name redis -v ~/docker-data/redis:/usr/local/redis -p 6379:6379 -d redis:latest --requirepass "root123456"

# 查看容器
$ docker ps -a

其他參數(shù)同mysql配置,--requirepass 用來設(shè)置 Redis 密碼

連通性測(cè)試:

直接在本地使用 redis-cli 測(cè)試 redis 連通性:

> redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> auth root123456
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

進(jìn)入容器:

> docker exec -it redis /bin/sh
# redis-cli -p 6379
127.0.0.1:6379> auth root123456
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit
# exit

修改配置

由于要連接不同容器內(nèi)的數(shù)據(jù)庫,需要修改項(xiàng)目數(shù)據(jù)庫配置HOST地址為容器名,這里以我的項(xiàng)目配置 env.yml為例子:

# MySQL 配置
mysql:
#  host: 127.0.0.1 # 服務(wù)器地址
  host: mysql
  port: 3306 # 端口
  db_name: test # 數(shù)據(jù)庫名稱
  username: root # 數(shù)據(jù)庫用戶名
  password: root123456 # 數(shù)據(jù)庫密碼
  ...
  
# Redis 配置
redis:
#  host: 127.0.0.1 # 地址
  host: redis
  port: 6379 # 端口
  db: 0
  password: root123456 # 密碼

然后重新 build Go服務(wù)鏡像:

$ docker build -t go-web-app .

重新啟動(dòng)容器,并使用--link關(guān)聯(lián)Mysql、Redis容器:

$ docker run --name go-api --link=mysql:mysql --link=redis:redis -p 8888:8088 -d go-web-app

注:使用這種方式構(gòu)建環(huán)境,每次都需要單獨(dú)啟動(dòng)Mysql、Redis、go服務(wù)容器,并通過 --link關(guān)聯(lián)容器

到此這篇關(guān)于Docker部署Golang服務(wù)的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker部署Go服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論