Docker部署Golang服務(wù)的實現(xiàn)步驟
不管是開發(fā)還是生產(chǎn)環(huán)境,通過 docker 方式部署服務(wù)都是一種不錯的選擇,能夠解決不同開發(fā)環(huán)境一致性的問題。
Dockerfile 構(gòu)建 Go 運用環(huán)境
在項目根目錄下添加 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ù)制項目中的 go.mod 和 go.sum文件并下載依賴信息 COPY go.mod . COPY go.sum . RUN go mod download # 將代碼復(fù)制到容器中 COPY . . # 將代碼編譯成二進制可執(zhí)行文件 RUN go build -o go-api . WORKDIR /dist RUN cp /build/go-api . COPY ./config ./config # 需要運行的命令 ENTRYPOINT ["/dist/go-api", "/dist/config/env.yml"]
如果需要縮小鏡像大小,則可以用以下方式進行構(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ù)制項目中的 go.mod 和 go.sum文件并下載依賴信息 COPY go.mod . COPY go.sum . RUN go mod download # 將代碼復(fù)制到容器中 COPY . . # 將代碼編譯成二進制可執(zhí)行文件 RUN go build -o go-api . # 創(chuàng)建一個小鏡像 #FROM scratch FROM debian:stretch-slim COPY ./config /config # 從builder鏡像中把 /build/go-api 拷貝到當(dāng)前目錄 COPY --from=builder /build/go-api / # 需要運行的命令 ENTRYPOINT ["/go-api", "config/env.yml"]
注:鏡像scratch
沒有bash,會導(dǎo)致無法通過docker exec
進入容器,建議直接改成debian:stretch-slim
鏡像
構(gòu)建 docker 鏡像 go-web-app
:
$ docker build -t go-web-app . # 查看鏡像 $ docker images
啟動容器來運行鏡像:
$ docker run -p 8888:8088 go-web-app # 后臺啟動 $ $ 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
標志位-p
用來定義端口綁定,容器中g(shù)o服務(wù)端口為 8088,綁定到本機端口 8888,接下來就可以通過http://127.0.0.1:8888
進行訪問了。
Mysql 容器
拉取 Mysql 鏡像:
# 拉取最新版本 mysql,也可以指定版本 $ docker pull mysql:latest # 查看鏡像 $ docker images
運行 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
端口到宿主機的8306
端口,外部主機可以直接通過 宿主機ip:8306
訪問到MySQL服務(wù)-e MYSQL_ROOT_PASSWORD=root123456
:設(shè)置 MySQL 服務(wù) root 用戶密碼-v /Users/john/docker-data/mysql:/var/lib/mysql
:表示將宿主機的/Users/john/docker-data/mysql
卷映射到容器里的/var/lib/mysql
卷中,為了把數(shù)據(jù)保存在宿主機中,防止容器刪掉就沒了-d
:后臺運行mysql:latest
:使用這個mysql鏡像
連通性測試:
進入 docker 容器連接 mysql:
# 進入容器 $ docker exec -it mysql-latest /bin/sh # 連接 mysql $ mysql -uroot -proot123456 -h 127.0.0.1 -P3306
或者本機可以通過 navicat 等工具進行連接。
Redis 容器
拉取 Redis 鏡像:
$ docker pull redis # 查看鏡像 $ docker images
運行 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 密碼
連通性測試:
直接在本地使用 redis-cli
測試 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>
進入容器:
> 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ù)庫,需要修改項目數(shù)據(jù)庫配置HOST地址為容器名,這里以我的項目配置 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 .
重新啟動容器,并使用--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)境,每次都需要單獨啟動Mysql、Redis、go服務(wù)容器,并通過 --link
關(guān)聯(lián)容器
到此這篇關(guān)于Docker部署Golang服務(wù)的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker部署Go服務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker中psql數(shù)據(jù)庫備份與恢復(fù)詳解
在本篇文章里小編給大家整理的是關(guān)于docker中psql數(shù)據(jù)庫基本操作內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。2020-02-02docker --link容器互聯(lián)的實現(xiàn)
–link可以通過容器名互相通信,容器間共享環(huán)境變量,本文主要介紹了docker --link容器互聯(lián)的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Docker Compose環(huán)境變量與配置文件管理全解析
這篇文章主要介紹了Docker Compose環(huán)境變量與配置文件管理全解析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-04-04docker安裝nginx實現(xiàn)對springboot項目的負載均衡的操作方法
這篇文章主要介紹了docker安裝nginx實現(xiàn)對springboot項目的負載均衡的操作方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-06-06