讓你寫出更安全的 Dockerfile

讓你寫出更安全的 Dockerfile 自從進入大容器時代後,Docker、K8s 已經逐漸成為開發、測試及部署時不可或缺的工具,如果突然叫我不要用 Docker,那我可能什麼都做不了,但也因為這樣,跟容器有關的攻擊越來越普遍,因此容器的安全性也越來越重要 而想要從零開始建出一個容器,第一步就是要寫 Dockerfile 把你的應用包裝成 Docker image。關於怎麼產生出盡量小的 image 已經很多人寫過了,所以今天想要跟大家分享的是想要寫出一個安全的 Dockerfile,有哪些該注意的地方。 使用 stable 或 LTS 的 base image 很多人在寫 Dockerfile 並不會特別指定 base image 的版本(就懶啊,我懂 XD),譬如說想要包一個 Node API server,就直接寫 FROM node 或是 FROM node:latest # Bad FROM node WORKDIR /app COPY . . RUN npm install RUN npm run test bad.Dockerfile hosted with ❤ …

Docker 實戰系列 (3)

Docker 實戰系列(3):使用 Volume 保存容器內的數據 沒錯,這時候就需要 volume 了,簡單來說 Volume 就是用來保存容器內的資料的,看看下面這張圖 當你使用 volume 時,docker 會在你的本機上隨機新增一個資料夾作為 Local storage area,大部分會在 /var 底下,然後讓這個資料夾跟 container 裡面的某個資料夾互通。 因為他們是互通的,所以當你 container 裡面的資料夾有任何變更時,本地的資料夾也會跟著變,而且很重要的一點是:container 被刪掉時那個資料夾還會原封不動保留在那邊,因此我們可以利用這個特性保留容器裡面的資料 實際操作 Step 1 — 新增一個 volume 我們新增了一個 volume 叫做 db-data,完成之後可以看到多一個 volume,這時候 docker 已經在本機上新增一個資料夾要給 volume 用 > docker volume create –name db-data > docker volume ls Step 2 — 使用 volume 在啟動時加一個 …

Docker 實戰系列(2)

Docker 實戰系列(2): Docker Hub 上分享自己的 imageDocker 實戰系列(2):在於 Docker Hub 上分享自己的 image 看完上一篇一步一步帶你 dockerize 你的應用之後,我已經會寫 Dockerfile 也知道怎麼 build 出自己的 image 了,但是我要怎麼把 image 分享出去給別人使用呢?沒錯,這就是這篇要講的 Docker Registry Docker Hub 是官方提供的 Docker Registry,所謂的 Docker Registry 就是一個讓大家可以 pull(下載)或是 push(上傳)image 的地方,把 image 上傳到 Docker Registry 後大家就可以直接 pull 下來用,不用再根據 Dockerfile 自建出 image 官方 VS 非官方 image 在 Docker Hub 上的 image 有分成官方跟非官方兩種,像 …

Docker 實戰系列(1)

Docker 實戰系列(1):帶你 一步一步 dockerize 的應用 想像一個情況,當你在本機開發完準備要部屬到自己的 server 上時,你發現 server 的系統不是你熟悉的 Ubuntu 而是 CentOS,除此之外你還需要自己安裝 php7、設定 MySQL 的帳號密碼跟架設 Apache,光想到要設定這些環境頭都痛了,這時候你就需要 Docker 了 Docker 可以幫你把 Ubuntu + php7 + MySQL + Apache 的環境跟你的程式碼打包起來,整包丟到 CentOS的 server 上去跑,不用很勉強的在不熟悉的 CentOS 上配置環境,弄個不好說不定還會影響到其他正在跑的程式 Docker 是什麼 Docker 是個輕量級的虛擬化技術,底層使用 cgroup、chroot、namespace 實作,可以把你的應用程式連同環境一起打包,部屬的時候就不用再擔心環境的問題 下圖的例子就是使用 Docker 將三個已經打包起來的程式跑在不同的 container(容器)中,每個 container 都是一個獨立的環境,可以跑不同的系統跟安裝不同的資料庫、編譯器等等,意思就是說你可以 A 專案用 php5.3,另外一個用 php7,完全不會衝突 Dockerize 所謂的 dockerize 就是把你的應用程式 Docker …