Build a docker image

建置一個可輸入參數的docker image,只需要有dockerfile和另一隻shell,就能決定在container執行前,輸入你所要的參數。

Dockerfile:

以下dockerfile透過ubuntu/ping的image,將ping.sh複製到container裡面,並且提供執行的權限,最後再經由ENTRYPOINT,決定執行container要呼叫的shell

1
2
3
4
5
6
7
8
FROM ubuntu/ping

MAINTAINER sparrow.jang <sparrow.jang@gmail.com>
ENV HOME=/root SERVICE_TAGS=ping
COPY ping.sh ${HOME}/ping.sh
RUN chmod +x ${HOME}/ping.sh

ENTRYPOINT ["/root/ping.sh"]

ping.sh:

如果有參數才執行ping,否則將返回一個提示文字。

1
2
3
4
5
6
#!bin/sh
if [ -z "$1" ]; then
echo "please give me a host"
else
ping $1
fi

Build a image

透過docker build就能建置一個image,最主要功用是將配置好的image,再透過dockerfile來加工成新的image

1
docker build --no-cache -t sparrow/run-ping .

Run image

執行剛建置好的docker image

1
docker run -it sparrow/run-ping www.google.com.tw

如果你不想透過剛剛的ENTRYPOINT,那你可以在執行docker run的時候,加入--entrypoint去指定。

1
docker run -it --entrypoint /bin/sh sparrow/run-ping

Push docker hub

只要在docker hub建立好repository,接著就可以執行docker push,然後在你的repository就可以看到。

1
docker push sparrow/run-ping

Mac OSX

如果你剛好開啟一個port要對外,此時你又是透過osx的系統,使用virutalbox來開啟docker,這時你就必須使用docker-machine ip default來取得真實的ip,例如拿到192.168.99.100,然後你的開啟4000port,真實port和ip就會是192.168.99.100:4000

1
docker-machine ip default