---
# System prepended metadata

title: Docker

---

# Docker
## Docker 架構

* ### Docker Hub
    *    存放Docker image的倉庫
* ### Docker image
    * 啟動container使用到的檔案 (一個Docker image可啟動多個Docker containers)
    * 來源：
        (1) 寫Docker file
        (2) 從網路上的Dockerhub上pull下來
* ### Docker container
    * 透過Docker image執行起來的process
* ### Docker volume
    * 把資料寫入實體機器上

## 啟動Docker
* ### 下載docker image
    * 顯示local下載了哪些docker image
    `docker images`
* ### 撰寫Docker file
    * 功用：
    撰寫安裝軟件得指令，之後呼叫docker run，即可把該service呼叫起來
    * 步驟：
    1. 建立Docker file
    (1) `mkdir ${file name}`
    (2) `cd ${file name}`
    (3) `vi Dockerfile`
    (4) 指令：
        `FROM`：使用到的Docker image名稱
        `MAINTAINER`：撰寫與維護此Dockerfile之人
        `RUN`：+ Linux指令，執行安裝及設定此image需要的東西
        `ENV`：設定環境變數
        `CMD`：例：`CMD ["~/catalina.sh","run"]` 執行`docker run`指令時呼叫開啟sth
        `ADD`：把local之檔案複製到image裡（可順便解壓縮）
    2. Build Docker image
        在Docker file檔案同層之folder下輸入：
        `docker build -t mytomcat . --no-cache` （避免被cache）
    3. 確認
        `docker images`
    4. 刪除Docker image
    `docker rmi ${image name}`
* ### 進入Docker container裡面之terminal
    * `docker run -it ${repository} /bin/bash`
    * `docker ps -a` (在另一個terminal)確認container正常執行
* ### 執行Docker container
    * `docker run ${repository}`
    * 退出container
        (1) 停止container:
        `exit`
        (2) 退出但不停止
        `ctrl+p`
        `ctrl+q`
    * Network
    加入`-p ${localhost port}:${container port}`
    * 停止container執行
    `docker stop ${container name}`
    * 刪除container
    `docker rm -f ${container name}`
* ### Docker volume
    * `docker run -it -v ${實體主機資料}:${container裡面資料之路徑}`
        
    

    