sudo zypper install docker
安裝以後,首先是先確定 Docker server 有在執行:
sudo systemctl status docker
如果沒有,需要啟動 Docker server:
sudo systemctl start docker
再來是下載 openSUSE LEAP 42.3 影像檔,
sudo docker pull opensuse:42.3
再來列出目前的影像檔,確定我們有下載成功:
sudo docker images
如果要執行 openSUSE LEAP 42.3 image,
sudo docker run -t -i opensuse:42.3 /bin/bash
接下來加入東西,建立自己的影像檔。首先是先建立一個工作目錄,然後
touch Dockerfile
接下來加入我們 Dockerfile 的內容:
FROM opensuse:42.3 MAINTAINER Danilo Chang RUN zypper addrepo http://download.opensuse.org/repositories/devel:/languages:/tcl/openSUSE_Leap_42.3/ tcl-Leap_42.3 && zypper addrepo https://download.opensuse.org/repositories/home:/danilochang/openSUSE_Leap_42.3/ danilo RUN zypper --no-gpg-checks refresh && zypper --no-gpg-checks -n update RUN zypper --no-gpg-checks -n install tcl tcllib tclvfs vectcl tls libgumbo1 tdom rl_json tcl-trf tclcurl tclreadline memchan tcl-sugar tclsoap tclws COPY tclshrc /root/.tclshrc CMD ["tclsh8.6"]
CMD ["tclsh8.6"] 讓我們如果不指定 /bin/bash,執行的時候就會直接進入 tclsh 的環境。需要注意的是,我從 tcl devel 和我自己的 repositories 下載檔案。
tclshrc 的內容:
if {$tcl_interactive} { package require tclreadline proc ::tclreadline::prompt1 {} { global env if {[catch {set pwd [pwd]} tmp]} { set pwd "unable to get pwd" } if [info exists env(HOME)] { regsub $env(HOME) $pwd "~" pwd } if [info exists env(USER)] { set user $env(USER) } else { set user tclsh } return "$user@[lindex [split [info hostname] "."] 0]:$pwd% " } ::tclreadline::Loop }
再來使用 docker build 建立影像檔:
sudo docker build -t="ray2501/docker-tcl:devel" .
我們就可以執行建立的影像檔:
sudo docker run -t -i ray2501/docker-tcl:devel /bin/bash
執行的時候如果不指定執行 bash,就會直接執行 tclsh8.6:
sudo docker run -t -i ray2501/docker-tcl:devel
如果要存取本地的目錄並且對應到 docker 中的目錄,並且先執行 bash:
sudo docker run -t -i -v /home/danilo/Public/tclfiles:/root ray2501/docker-tcl:devel /bin/bash
這樣如果執行 /bin/bash 以後,可以在 bash 環境中使用 tclsh8.6 來執行 /home/danilo/Public/tclfiles 中的 tcl script 檔案(在 docker 中的目錄則為 /root)。
(* 或者是將 Tcl script 檔案使用 COPY 複製到 docker 影像檔以後,使用 CMD 來執行。總之,應該有更多的設定方法才對。)
如果要停止容器,使用下列的方式停止 (找出 CONTAINER-ID 以後使用 stop 停止):
sudo docker stop $(sudo docker ps -a -q)
然後再刪除 CONTAINER:
sudo docker rm $(sudo docker ps -a -q)
如果要刪除 Docker image,先列出目前的 image:
sudo docker images
然後再刪除要刪除的項目:
sudo docker rmi ray2501/docker-tcl:devel
這樣就完成了一次 openSUSE Tcl docker 環境的基本測試。如果需要參考更多的 Dockerfile,可以參考 docker-tcl。
在建立一個基本的 Tcl 環境可以使用以後,再來建立一個 Wub server, 在我們的工作目錄下放置 wub 目錄和相關的檔案,再修改 wub/Wub/wub.vcl 的設定,
backend default { set backend.host = "0.0.0.0"; set backend.port = "8080"; }
將 backend.host 修改為 docker 影像檔的網路設定值。再更新我們的 Dockerfile:
FROM opensuse:42.3
MAINTAINER Danilo Chang
RUN zypper addrepo http://download.opensuse.org/repositories/devel:/languages:/tcl/openSUSE_Leap_42.3/ tcl-Leap_42.3 && zypper addrepo https://download.opensuse.org/repositories/home:/danilochang/openSUSE_Leap_42.3/ danilo
RUN zypper --no-gpg-checks refresh && zypper --no-gpg-checks -n update
RUN zypper --no-gpg-checks -n install tcl tcllib tclvfs vectcl tls libgumbo1 tdom rl_json tcl-trf tclcurl tclreadline memchan tcl-sugar tclsoap tclws which
COPY tclshrc /root/.tclshrc
COPY wub /root/wub
EXPOSE 8080
WORKDIR /root/wub
CMD ["tclsh8.6", "Wub.tcl"]
在工作目錄下新增一個檔案 .dockerignore,內容如下:
wub.log
再來使用 docker build 建立影像檔:
sudo docker build -t="ray2501/docker-wub:devel" .
如果建立成功,使用下面的方式執行(將本機的 8080 port 對應到 docker 容器的 8080 port):
sudo docker run -p 8080:8080 -d ray2501/docker-wub:devel
使用下面的命令觀察執行的情況:
sudo docker ps -l
如果要進入容器執行命令:
sudo docker run -t -i ray2501/docker-wub:devel /bin/bash
測試方式:
curl -i localhost:8080
或者是開啟瀏覽器瀏覽 http://localhost:8080。
沒有留言:
張貼留言