當你閱讀到這篇文章的時候,我就假定你已經知道docker是什麼,並且不再作過多解釋了。假如你真不知道這東西,我衷心建議你先去了解一下,然後再回到這篇文章重新開始並進行實操。在這篇文章中,我會從程序員的角度為你介紹docker。
以下是docker的工作流程圖:
你的主機大概需要配備三樣東西去使用docker容器:
Docker 主機: Docker容器將會在上面運行的Linux虛擬主機。.
Docker 鏡像: 類似於運行在vm虛擬機上的iso鏡像,但它們是高度精簡的版本。所有已經存在於docker主機上的多餘的包或庫都會被移除掉。
Docker 容器: Docker鏡像的快照,你可以啟動、停止、修改它們,或者將它們作為另一個鏡像來發布。
Docker主機
從docker的官方網站下載並安裝以後, 就會出現一個叫做default的虛擬機可以運行。如果不存在或者丟失了,你可以使用命令docker-machine 重新創建一個default虛擬機。
你可以使用上面的命令加上參數來指定虛擬機的磁盤大小和內存大小。如果你是要做數據科學方面的工作,強烈建議你安裝多個不同配置和用途的docker虛擬機。查看虛擬機列表,使用docker-machine命令。
如下是輸出的示例:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v17.04.0-ce
啟動虛擬機使用docker-machine start命令。 就像我的寫法一樣,如果虛擬機名稱是default的話,你可以不寫名稱;如果不是的話,一定要指定要啟動虛擬機的名稱。
也可以使用docker-machine status 命令檢查docker虛擬機的狀態。 該命令會輸出 "running" 或 "stopped."。
還有一點需要注意的是要確保你的操作系統能支持所有docker虛擬機的環境變量。你可以很方便地運行 docker-machine env 命令來安裝設置所有的環境變量。
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\kushukla\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM @FOR /f "tokens=*" %i IN ('docker-machine env') DO @%i
只需要拷貝並粘貼到終端或命令提示符,或者按註釋設置環境變量。
Docker 鏡像
好,一直都在說 Docker 主機。現在來 pull(拉取) 一些鏡像到主機來運行。如果你知道某個庫[譯者注:這裡指具體的鏡像庫],那麼你可以使用 docker pull rocker/rstudio 命令下載鏡像,但如果你不知道這個鏡像,可以去 Docker Hub (類似於 GitHub);這是一個 Docker 鏡像的倉庫,你可以從這裡選擇一個鏡像來開始。
現在使用 run(運行) 命令來安裝另一個。run 和 pull 類似,它會檢查鏡像在本地是否存在,如果不存在,它會從 Docker Hub 拉取下來,再使用這個鏡像啟動一個新的容器。
docker run -p 8888:8888 --name tensorflow -it gcr.io/tensorflow/udacity-assignments:1.0.0
上面的參數基本上用來自定義容器。它表示要映射哪個端口(port),容器的名稱(name)是什麼,以及指定使用交互式 TTY。因此,如果這個命令阻塞終端千萬不要吃驚,因為它是交互式TTY,也就是你終端的標準輸入、標準輸出和標準錯誤正連接著運行中的容器。
你可以使用 docker images 查看下載到 PC 上的各鏡像。
REPOSITORY TAG IMAGE ID CREATED SIZE
rocker/rstudio latest 7a807646f0be 11 days ago 993MB
gcr.io/tensorflow/udacity-assignments 1.0.0 4e01459e7150 2 months ago 1.03GB
上表中,Docker 鏡像使用鏡像 ID 或庫標識出來。這樣一來,如果想刪除某個鏡像,可以運行這個命令:docker rmi 7a807646f0be
Docker 容器
Docker 鏡像本質上是靜態的,而容器可以啟動/停止並進行實際工作。容器由 Docker 鏡像創建。你可以運行下面的命令查看PC上所有容器。
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21d0cdc5051d gcr.io/tensorflow/udacity-assignments:1.0.0 "/run_jupyter.sh" 15 minutes ago Up 18 minutes tensorflow
如果去掉 -a 參數,則只能看到正在運行的容器。在我們的示例中,只有 rstudio 容器。
你可以通過 docker stop rstudio 停止容器
然後你可以猜到,啟動容器是: docker start rstudio
我喜歡像下面這樣啟動:
docker run -d -p 8787:8787 -v /c/Users/kushukla:/home/rstudio/kushukla --name rstudio rocker/rstudio
這是因為我希望打開 8787 端口,並將我的本地目錄連接到容器的文件系統,以便我的 R 代碼可以在容器中訪問。現在如果你想知道接下來會發生什麼事情。我可以用瀏覽器打開 RStudio。IP 是在環境變量中指定的,而端口是在 Docker 的 run 命令中指定的。
到此結束,希望你對此有興趣。