# Docker 筆記 - [dos2unix](http://askubuntu.com/questions/896860/usr-bin-env-python3-r-no-such-file-or-directory/) - [APT Get Lock](https://askubuntu.com/questions/1109982/e-could-not-get-lock-var-lib-dpkg-lock-frontend-open-11-resource-temporari) ## 觀念 - 輕量型的 VM ,因為開發大型程式常會有套件版本不同問題,適合用 docker 來做區隔 - Container 是由 Image 所建立而來,是一個基於 Image 之上的可讀寫層 - 一個 Image 可以建立無限多個 Container - 每個 Container 之前都是各別獨立的 ## 執行別人寫好的 image - 下載映像檔 - docker pull image - 管理映像檔與容器 - docker images - docker ps -a - docker rm container - docker rmi image - 把映像檔用容器執行 - docker run image - --name:替容器命別名 - -it:讓標準輸入維持在打開的狀態,並配置一個虛擬的終端機 - -d:讓容器進入背景執行 - -p:綁定主機和容器的 port,host_port : container_port - -v:掛載目錄,host_volume : container_volume - –rm:結束時自動移除容器 - 操作容器 - 開關 - docker start container - docker stop container - 進入 - docker start -ia container - docker attach container - docker exec -it container /bin/bash - 離開 - Ctrl-p, Ctrl-q:離開但不停止容器 - exit (ctrl-D) ## DockerFile 製作 Docker Image ```dockerfile= FROM golang:1.20.1 RUN mkdir -p /app WORKDIR /app COPY . . RUN go mod download RUN go build -o app ENTRYPOINT ["./app"] ``` ## Docker Compose 範例 ```dockerfile= version: "3.9" services: go-backend: image: go-backend ports: - "8888:8888" vue-frontend: image: vue-frontend ports: - "8080:8080" redis: image: redis ports: - "6379:6379" mongodb: image: mongo restart: always volumes: - ./mongodb_data:/data/db ports: - "27017:27017" mysqldb: image: mysql:latest restart: always environment: MYSQL_DATABASE: mydatabase MYSQL_USER: myuser MYSQL_PASSWORD: mypassword MYSQL_ROOT_PASSWORD: myrootpassword ports: - "3306:3306" volumes: - ./mysql_data:/var/lib/mysql ``` ## Reference - [用30天來介紹和使用 Docker ](https://ithelp.ithome.com.tw/users/20103456/ironman/1320) - [讓我們來玩玩Docker吧](https://ithelp.ithome.com.tw/users/20107537/ironman/1417) - [Docker — 從入門到實踐](https://yeasy.gitbooks.io/docker_practice/image/build.html) - [docker: permission denied](http://andy51002000.blogspot.com/2019/02/docker-permission-denied.html)