Docker 建立 Kotlin 編譯環境

1. 使用 Ubuntu 16.04

我們使用docker來安裝kotlin編譯環境

1. kotlin相依於Java開發環境,官方推薦使用OpenJDK
2. 使用Docker讓開發環境和執行環境分離
3. host機器上無需安裝kotlin

2. 登入帳號以 kotlin 為範例

我們會在docker上創建一個一樣的帳號
這樣的好處在於docker可以和host機器共用檔案
程式碼由host的IDE(eclipse,intelligent…)來負責更新
而kotlin所編譯的資料,也不會消失

3. 安裝docker套件

sudo apt-get update
sudo apt-get install docker.io
sudo docker pull ubuntu:16.04

4.設定ubuntu image

啟動ubuntu container

sudo docker run -t -i ubuntu:16.04 /bin/bash

在container中安裝相依套件

apt-get update
apt-get install wget
apt-get install unzip
apt-get install zip
apt-get install curl
apt-get install openjdk-8-jre-headless

5. 建立帳號

這個帳號要與host的登入帳號UID一樣
系統建立時第一個帳號UID為1000
這樣container和host可以共用資料夾

useradd kotlin -m -s /bin/bash
passwd kotlin

6. 安裝kotlin

根據官方建議,使用官方sdk安裝kotlin

login kotlin
mkdir src
wget -O sdk.install.sh "https://get.sdkman.io"
source sdk.install.sh
source ~/.sdkman/bin/sdkman-init.sh
sdk install kotlin
exit
exit

7. 將container儲存為docker image

我們剛才的container需要儲存為docker image
從此之後便可以任意啟動,拷貝至其他docker

sudo docker ps -a
你可以看見這樣的訊息

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS
e495fd4faaf7        ubuntu:16.04        "/bin/bash"         24 hours ago        Exited

記下CONTAINER ID
本例是e495fd4faaf7
以下指令可以將container儲存成image

sudo docker commit -m "註解打這裡" e495fd4faaf7 kotlin

以下指令可以看見剛才新增的image

sudo docker images
REPOSITORY   TAG                 IMAGE ID            CREATED              SIZE
kotlin        latest              5feec0b18ece        About a minute ago   1.168 GB

9.啟動kotlin編譯環境

mkdir -p src
sudo docker run -t -i --rm -v /home/{家目錄}/src:/home/kotlin/src kotlin sudo -i -u kotlin /bin/bash

參數解析
-t -i

綁定標準輸出入

-rm

離開container就立即刪除

-v /home/{家目錄}/src:/home/kotlin/src

將目錄綁定到 container 的目錄


1.你在container家目錄所做的變更( kotlinc 等等 )都會反映到主機家目錄

2.主機的IDE的編輯結果,container也存取得到

-i -u kotlin /bin/bash

以使用者kotlin登入container

10. 於conatiner環境中測試kotlin指令

cd src
echo 'fun main(args: Array<String>) { println("Hello World")  }' > hello.kt
kotlinc hello.kt -include-runtime -d hello.jar
java -jar hello.jar