---
# System prepended metadata

title: React app push on DockerHub and deploying on google cloud run
tags: [docker, google cloud run, react.js]

---

1. **新增React專案(不在這邊多做解釋)**
1. **新增Dockerfile(最外層目錄)**       
如圖
---
![](https://hackmd.io/_uploads/HktZr2Mk6.png)


---
3. 新增一個檔案，檔案名稱叫.dockerignore
4. 在.dockerignore裡面寫不想放到image裡的檔案
![](https://hackmd.io/_uploads/HyOVxsGJ6.png)
我是只有寫node_modules
5. Dockerfile
```
FROM node:16.13.1 #選擇自己要的image模板(我是裝對應版本的node.js)
WORKDIR /app #創建一個資料夾(名字隨意)
COPY ./ /app/ #將目前位置的檔案都複製到剛剛新增的app資料夾中
RUN npm install #因為有複製package.json，所以直接install
RUN npm install -g serve #這邊額外安裝serve
RUN npm run build #打包這個專案
CMD [ "serve","-s","build" ] #使用serve -s build而不是npm start啟動
#serve -s build 會透過剛剛打包好專案去開啟一個靜態的serve
#我自己使用npm start 是可以成功的run跑起來的，但是推到google cloud run 上就會失敗
#使用serve -s build可以提供靜態serve成功解決我的問題
```
6. 這邊假設各位對於docker的指令是熟悉的，並且已經有連結到dockerhub的帳號，如果沒有可能要自己搜尋一下怎麼做(以下指令記得要把docker desktop打開，或是docker的服務要開啟)
8. cmd 進到放Dockerfile的目錄
9. docker build -t ***(你dockerhub的名字)/***(你要給這個image的名字)
10. build 成功後使用docker images 查看是否有對應的image(會有id)
11. 複製image的id
12. docker run -p 3000:3000(這是你想要在哪個端口運行) ***(你剛剛複製的id)
13. 成功之後，請檢查你localhost:3000(你設定的端口)是可以成功執行你的REACT專案的
14. 確認成功之後，就推到你的dockerhub 
15. docker push (你dockerhub的名字)/(你的image name):latest(你的要選擇的tag，沒有打預設就是latest)
16. push 成功之後就是google cloud run 的部分
17. 首先先申請google cloud run 的帳號(這很簡單我就不講了)
18. [https://cloud.google.com/run?hl=zh-tw](https://)
19. 接這進到google cloud run 新增專案
20. 下載google cloud cli (下面文件提供兩種方式)
21. https://cloud.google.com/sdk/docs/install
![](https://hackmd.io/_uploads/B15fLoGyT.png)
23. 第一種直接下載他幫你弄好的sdk shell
24. 第二種用自己的powershell執行他的命令，我是用它弄好的sdk shell
25. 下載安裝完成後，開啟sdk shell
26. 執行以下指令
27. `gcloud init` 初始化
28. ` gcloud config set project PROJECT_ID` project id 會在你剛剛創建的project可以看到
 ![](https://hackmd.io/_uploads/SyWZDiGka.png)
30. `gcloud auth configure-docker` 連接docker
31. 之後就可以直接deploy了
32. `gcloud run deploy ***(你這個服務要叫的名字) --image ***(你的dockerhub名稱/***(你剛剛docker push的image name):latest(你要選擇的tag)`
33. 執行後他會問你要佈在哪個伺服器，我是選第一個香港的(asia-east1)
34. 然後會問你要不要開起所有人都可以使用這項服務，我是選開啟
![](https://hackmd.io/_uploads/S1qodozkT.png)
打y或n就好
35. 執行完會給你url或是你也可以到你的google cloud run 裡面看到這個服務的網站

       
