# 學習進度
* [目前學習進度](https://youtu.be/5VQ7bTyznmU?list=PLmOn9nNkQxJFX0YVLDw5EMUL-4cVzXL33&t=1)
# 感覺實用的資料
## [監控 docker 目前使用資源](https://github.com/google/cadvisor)
## [用Docker搭建Laravel开发环境](https://mp.weixin.qq.com/s?__biz=MzUzNTY5MzU2MA==&mid=2247483807&idx=1&sn=061f9a4f6711d7c4550c4f9012d9ad4e&chksm=fa80d008cdf7591edd2373aae91c76b4b13ec8a30a6f55d4f851556a288ca4c25f428910ddd3#rd)
## [Docker — 从入门到实践](https://yeasy.gitbook.io/docker_practice/)
## [精简Docker镜像的五种通用方法](https://dockone.io/article/8163)
## [Docker tutorial PART I](https://hackmd.io/@8irD0FCGSQqckvMnLpAmzw/HJRrjtDtN)
## [Docker tutorial PART II](https://hackmd.io/@8irD0FCGSQqckvMnLpAmzw/S1xwOhwtV)
## [Laravel + Docker 輕鬆上手](https://medium.com/%E4%B8%80%E5%80%8B%E5%B0%8F%E5%B0%8F%E5%B7%A5%E7%A8%8B%E5%B8%AB%E7%9A%84%E9%9A%A8%E6%89%8B%E7%AD%86%E8%A8%98/laravel-docker-%E8%BC%95%E9%AC%86%E4%B8%8A%E6%89%8B-4cefeeb3febc)
## [站在 Docker 的肩膀上,部署任何語言的 Web 應用到 Heroku](https://medium.com/starbugs/deploy-any-web-application-to-heroku-with-docker-b64b9b0eb93)
## [使用laradock來部屬laravel](https://home.gamer.com.tw/creationDetail.php?sn=5415251)
## [100 行 shell 写个 Docker](https://my.oschina.net/vivotech/blog/7364496)
## [用docker image 在heroku部署網站](https://medium.com/starbugs/deploy-any-web-application-to-heroku-with-docker-b64b9b0eb93)
## [如何將前端網站打包成 Docker Image](https://blog.wu-boy.com/2020/07/how-to-create-docker-image-in-reactjs-or-vuejs/)
## [其實沒有那麼難 — Docker 系列](https://ithelp.ithome.com.tw/users/20120541/ironman/5683)
## [Docker实用命令手册](https://juejin.cn/post/7273025863981006848)
# 實用指令
## 使用 node 在當前目錄建立 vue 專案
```dockerfile
docker run --rm -v "${PWD}:/app" -w "/app" -u node -it node:latest sh -c "yarn add global @vue/cli && yarn exec vue create ."
```
### 另一種寫法,會新建立一個專案目錄
```dockerfile
docker run --rm -u 1000:1000 -v $PWD:/app -w /app -u node -it node:latest sh -c "npm init vue@latest"
```
## 在本地端開啟 vue 專案
```dockerfile
docker run --rm -p 8080:8080 -v "${PWD}:/app" -w "/app" -u node -it node:latest sh -c "npm run serve"
```
### 使用 vite run 起來的
```dockerfile
docker run --rm -p 5173:5173 -u 1000:1000 -v $PWD:/app -w /app -u node -it node:latest npm run dev -- --host
```
## 使用 docker 在當前路徑下下載 laravel 專案
```dockerfile
docker run --rm -v $PWD:/app -w /app composer create-project laravel/laravel
```
# 使用紀錄
* 在laradock資料夾下
* docker-compose up -d nginx mysql
* docker-compose down
* 建議laravel 專案自己另外下載,不要用docker-compose 的bash
* composer create-project laravel/laravel --prefer-dist projName "7.*"
* 不指定好像會是最新的
* nginx\sites\xxx.conf
* 中的root 要設定成/var/www/public
* 預設會設定成/var/www/laravel/public
* docker container run --rm -v ${PWD}:/app/ php:7.4-cli php /app/test.php
* 使用php 在當前路徑下使用php7.4 版本找test.php 執行
* [參考網站](https://stackoverflow.com/questions/54182191/how-to-run-a-php-script-on-docker)
* docker container run --rm -v ${PWD}:/app/ composer composer create-project --prefer-dist laravel/laravel /app/direct-docker-test
* 使用composer 在當前路徑下安裝名為direct-docker-test 的laravel 專案
* docker container run --rm -u=1000:1000 -v ${PWD}:/app/ composer composer create-project --prefer-dist laravel/laravel:^7.4 /app/echo
* 安裝7.4版本 laravel
* docker container run --rm -v ${PWD}:/app/ composer composer create-project --prefer-dist laravel/laravel=7.* /app/mongoArrange
* 指定 laravel 版本
* 使用 mongo 的坑,安裝不了以下兩個套件
* composer require mongodb/mongodb --ignore-platform-reqs
* composer require jenssegers/mongodb --ignore-platform-reqs
## 20211012 全新下載使用版本
* 開個資料夾
* cd 進該資料夾
* 下載需要的laravel 版本
* composer create-project laravel/laravel --prefer-dist projName "可選不填則為最新版"
* 下載laradock
* git clone https://github.com/Laradock/laradock.git Laradock
* 複製.env 檔案
* from
* to
* 修改紅框兩處,選擇跟laradock 資料夾==同一層==的laravel 專案 & 放資料的data 資料夾
* 
* 再到nginx 資料夾複製.conf檔案
* 
* 這個中間的laravel 要記得刪掉
* 
### 資料夾結構路徑圖
* 
## 20211013
* [Laradock配置PHP多版本共存](https://www.karlxu.com/article/details/26)
* docker-compose up -d nginx php-fpm8 mysql
* [How to change the PHP version in Laradock?](https://cyrildewit.github.io/2020/04/19/how-to-change-the-PHP-version-in-Laradock/)
* rebuild php-fpm 有點久
## 20211115
* [解决Docker使用WSL2项目运行慢的问题](https://learnku.com/articles/51641)
## 20211204
## 20211207
* [wsl 中 NPM 無法使用的解法](https://stackoverflow.com/questions/39311147/cannot-run-npm-commands)
* [WSL2:運行 npm install 錯誤](https://blog.cwlove.idv.tw/wsl2-npm-install-no-such-file-or-directory/)
## 20211229
* 實用工具 makefile
* [指令參考網址](https://blog.csdn.net/mjLlm/article/details/90675552)
* [laravel 相關參考](https://ithelp.ithome.com.tw/articles/10244853)
## 20211230
* 最佳化相關
* [用 Docker Multi-Stage 編譯出 Go 語言最小 Image](https://blog.wu-boy.com/2017/04/build-minimal-docker-container-using-multi-stage-for-go-app/)
* [Docker与Golang的巧妙结合](http://dockone.io/article/1712)
## 20230106
* [他人 Dockerfile - Multi-stage build 筆記](https://amikai.github.io/2021/03/01/docker-multi-stage-build/)
## 20230108
* 當 docker run 的時候用 -v 掛載時 $PWD:/app 後面的 /app 可在 image build 時設定 WORKDIR /app 對應
## 20230126
### 使用 docker 在當前路徑下下載 laravel 專案
```dockerfile
docker run --rm -v $PWD:/app -w /app composer create-project laravel/laravel
```
## 20230203
### 稍微整理一下此份筆記紀錄
* 整理成更加利用 HackMD 的資料結構
## 20231209
### docker-compose 的多 yaml 檔案設定 : COMPOSE_FILE
* [連結](https://docs.docker.com/compose/environment-variables/envvars/#compose_file)
## 20240124
* build image user 較安全的作法
```dockerfile
ARG RUST_VERSION=1.75.0
FROM rust:${RUST_VERSION}-slim-bookworm AS builder
WORKDIR /app
COPY . .
RUN \
--mount=type=cache,target=/app/target/ \
--mount=type=cache,target=/usr/local/cargo/registry/ \
cargo build --release && \
cp ./target/release/hello-rs /
FROM debian:bookworm-slim AS final
RUN adduser \
--disabled-password \
--gecos "" \
--home "/nonexistent" \
--shell "/sbin/nologin" \
--no-create-home \
--uid "10001" \
appuser
COPY --from=builder /hello-rs /usr/local/bin
RUN chown appuser /usr/local/bin/hello-rs
COPY --from=builder /app/config /opt/hello-rs/config
RUN chown -R appuser /opt/hello-rs
USER appuser
ENV RUST_LOG="hello_rs=debug,info"
WORKDIR /opt/hello-rs
ENTRYPOINT ["hello-rs"]
EXPOSE 8080/tcp
```
## 20240126
* 遇到 OS can't spawn worker thread: Operation not permitted (os error 1) 的錯誤
* 本機 build 後且 up service 成功,結果上 vps 時 service 建立失敗
* 使用 logs 看到以上錯誤
* 本來以為是不是 VPS 只有單核,然後使用 rust 使用多核功能造成的錯誤(結果不是)
* 看了其他類似的案例後懷疑是 docker 版本過舊造成
* 看了很多升級 docker 版本的作法,都很麻煩
* 最後[在這](https://dev.to/faridteymouri/how-to-update-docker-and-docker-compose-on-ubuntu-gam)看到較簡易的方式,將 docker & docker-compose 都更新版本後就沒問題了
* docker
:::info

:::
* docker-compose
:::info

:::
## 20240131
* [用來分析 image 的工具](https://github.com/wagoodman/dive)
* 用法
```shell
docker run -ti --rm -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive <要檢查的 image>
```