docker几个基础命令及nodejs容器
最近在了解docker使用,在網上找資料發(fā)現(xiàn)很少有可以系統(tǒng)的了解某一個操作目的的大部分細節(jié)的參考,學起來非常吃力、耗時。
這里整理了一下自己在入門摸索過程中的幾個入門級的操作,可以連貫的對實現(xiàn)一個nodejs容器基礎操作有個清晰的了解,下面進入正文。
網上很容易找到關于docker的container運行、鏡像拉取、容器查看等操作,這里不多說
使用nodejs鏡像創(chuàng)建一個新的nodejs容器,命名為my-node
docker run -itd --name my-node node /bin/bash 復制代碼當然還可以使用docker create創(chuàng)建一個新容器,但不馬上運行。下面帶著一系列問題來了解相關命令:
如何查看創(chuàng)建的容器?
創(chuàng)建并運行完成后,可以這樣查看正在運行的容器
docker ps // 或 docker container ls 復制代碼結果如下,最后NAMES為容器名,很多操作都可以使用容器名來制定該容器,跟ID類似
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a2e2c6b8360f node "/bin/bash" 5 days ago Up 5 days my-node 復制代碼也可以使用docker container ls -a來查看所有已經創(chuàng)建的容器(包括沒有運行的)
如何查看容器里面運行的軟件版本?
這也是我開始學習docker時遇到的問題之一,關鍵就是exec命令,它的作用就是在運行的容器中執(zhí)行命令。格式為:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 復制代碼簡單的查看nodejs版本的方式為:
docker exec my-node node --version // 結果 v11.6.0 復制代碼my-node 為容器名即CONTAINER, node 為COMMAND,--version為ARG 即在my-node 容器里執(zhí)行node --version 命令,這是使用exec執(zhí)行命令的基本方式,缺點是只能執(zhí)行一次,而且不能進行后續(xù)的交互。更好的方式是
docker exec -it my-node /bin/bash 復制代碼-it 選項的功能跟run命令的-it類似,打開可以進行交互的終端,/bin/bash就是運行容器的bash程序,這個效果跟使用run命令才不多,這樣就進入到容器里面,容器擁有簡單的linux命令,比如ls、shell等因為是nodejs的容器,所以可以執(zhí)行node命令,如:node -v,就像在linux系統(tǒng)里面一樣:
root@a2e2c6b8360f:/# node -v v11.6.0 root@a2e2c6b8360f:/# 復制代碼除此之外,當然也可以執(zhí)行js代碼,運行node cli命令。這是容器運行的常用方式,在后文會有用到。
現(xiàn)在終端交互為容器的終端,如何退出容器呢?
有兩個方法,可以使用ctrl + d,也可敲入exit命令,兩種方法等效。
注: 還可以使用attach命令進入容器,但是這樣退出容器終端的同時也會stop容器,這是不希望看到的(經測試加--sig-proxy=false不行)
知道如何在容器里運行js代碼了,那如何把js代碼或文件放進容器里面,或者說
如何利用容器執(zhí)行我們在容器外編輯的js文件呢(在不打包鏡像的情況下)?
要解決這問題,就需要用到掛載或volume(數(shù)據卷)的功能。docker可以通過-v、--mount選項來掛載宿主機與容器的共享目錄。以windows下面的docker為例,另外再創(chuàng)建一個名為node-a的容器來實現(xiàn)掛載:
docker run -itd --name node-a -v $pwd/test:/test node /bin/bash 復制代碼在這行命令中,-v之后的參數(shù)為 宿主目錄:容器目錄,意即把宿主機的$pwd/test($pwd為當前工作目錄)目錄掛載到容器的/test目錄(根目錄下的test文件夾)。
綁定成功后,在宿主機的 $pwd/test 目錄下的任何文件變動,都會實時同步到容器的/test文件夾下。 例如在宿主機$pwd/test 目錄下新建一個文件foo.js,里面一行js代碼console.log('this is a test!'),然后進入到容器,可以看到test目錄,并在文件夾下有foo.js
docker exec -it my-node /bin/bash root@a4562d3e28da:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test tmp usr var vol root@a4562d3e28da:/# cd test && ls foo.js root@a4562d3e28da:/# node foo.js this is a test 復制代碼這樣,就可以通過在容器外面編輯文件,而在容器里面運行。可以很方便的進行測試。 通過inspect命令可以查看當前的掛載信息:
docker inspect -f "{{json .Mounts}}" node-a [{"Type":"bind","Source":"/host_mnt/c/**/桌面/**/my-docker/test", // 宿主機目錄"Destination":"/test", // 容器目錄"Mode":"","RW":true,"Propagation":"rprivate" }] 復制代碼當容器多了,忘了對應的掛載目錄,這個就非常有用,關于inspect命令的使用,點擊。關于-v選項的更多細節(jié)可以參考
當然也可以使用--mount來進行掛載(官方推薦),或者使用volume來共享數(shù)據(但在windows、mac下,由于docker是跑在虛擬機里面,所以獲取docker volume在本地的目錄會比較麻煩),有興趣可以深入了解。當然也可以通過dockerfile配置image來配置,但這不屬于本文范圍。
轉載于:https://juejin.im/post/5c4828fd51882525927901a1
總結
以上是生活随笔為你收集整理的docker几个基础命令及nodejs容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《CSS揭秘》-背景与边框
- 下一篇: haproxy定义规则限制IP访问