Docker 入門學習筆記(二)
上篇文化在那個主要在 windows 下安裝了Docker 並學習了官方的簡單指導。接下里按照官方的 Documentation(https://docs.docker.com/docker-for-windows/) 來繼續進行學習。
1 Hello World
(1)開啟命令列終端
(2)檢視 docker 安裝版本
docker --version
docker -v
(3)拉取 hello-world 映象 (image)
docker pull hello-world
docker run hello-world
可以直接執行 docker run hello-world 這樣docker 首先會在本地查詢該映象檔案,如果找不到就會到遠端去查詢(相當於會自動 先 pull 在 run )
(4) 檢視當前所有的映象
docker image ls
發現有許多映象,有部分使我們沒有去下載但是它自動出現的,是作為上篇文章中的 getting-started 映象的依賴 一起下載下來的。
(5)檢視所有容器
容器和映象之間的關係相當於物件和類之間的關係。容器是映象具體執行的一個程序,相當於映象是模板,容器是映象的一個例項。
docker container ls --all
(6)docker 的命令後可以加上 --help 來進行檢視幫助文件
(7) 常用命令:
(a) 檢視正在執行的容器
docker container ls 或 docker ps
(b)檢視所有容器
docker container ls -a
或
docker ps -a
(c)停止容器/刪除容器
docker stop containerid
docker rm containerid
(d)刪除所有非活動的容器
docker rm -f $(docker ps -a | grep Exit | awk '{ print $1 }')
(e) 將容器打包成新的映象
docker commit containerid imagename:tag
(f)將映象匯出到壓縮包檔案中
docker save -o filename imagename
docker save imagename| gzip > filename
或
docker save imagename >path.rar
(g)從檔案(壓縮包)中解壓映象
docker load --input filename
或
docker load < filename
2 進一步使用
(1)拉取 ubuntu 映象
docker run --interactive --tty ubuntu bash
--interactive 則讓容器的標準輸入保持開啟,--tty選項讓Docker分配一個偽終端(pseudo-tty)並繫結到容器的標準輸入上,bash 是表示進入那個ubuntu的映象的容器的shell
檢視 主機名 hostname
主機名和容器ID 繫結
退出 exit
(2)在 docker 中使用 Nginx 伺服器
docker run --detach --publish 92:92 --name webserver nginx
上述命令也可以簡寫為
docker run -d -p 92:92 --name webserver nginx
成功啟動,但是出現了和之前一樣的問題,為啥本地埠不能成功訪問。 官方教程中,說的是直接在瀏覽器中訪問 http://localhost:92 即可訪問到 nginx 對應的預設主頁。
在經過查詢資料後,得知,在 Windows 上執行 Docker 相當於先安裝了一個 Linux 虛擬主機然後後在這個虛擬主機中使用 Docker ,所以 localhost 指的是虛擬主機的 Ip 而不是本機IP 。
因此我們需要獲取虛擬主機的 IP 才能訪問到該頁面。具體可以參考另一篇文章(https://www.cnblogs.com/Assist/p/13530409.html)
處理之後,上次在使用gettingstarted 這個映象是不能正常訪問的問題也解決了。
3自己製作 docker 容器
根據 koa-demos 來做為示例說明(參考連結http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html)
首先通過 git 命令下載原始碼
git clone https://github.com/ruanyf/koa-demos.git cd koa-demos
(1)Dockerfile 檔案
在專案的根目錄下可以通過建立 .dockerignore檔案來忽略對應的檔案或資料夾,這裡該檔案的具體內容為:
.git
node_modules
npm-debug.log
加下來建立 Dockerfile 檔案
FROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000
接下來對改檔案進行說明:
(a)FROM node:8.4 代表基礎映象是node:8.4,即意味著次映象是從這個映象基礎上搭建的。
(b)COPY . /app 表示將當前目錄拷貝到映象的 /app 資料夾中
(c)WORKDIR /app 宣告工作目錄是 /app
(d)RUN npm install --registry=https://registry.npm.taobao.org 表示安裝 npm ,RUN 命令要儘量少,能夠用一句命令安裝的儘量用一句命令完成
(e)EXPOSE 3000 表示 將容器的3000 視窗暴露出來
(f)其他常用引數:ARG、ENV、CMD
ARG:用法 ARG name ;在build docker image 的時候傳值使用。docker build --build-arg name=value
ENV:ARG name value ;可以在 dockerfile 中使用也可以在 image 和 container 中使用
CMD:容器開啟後執行對應命令;和 RUN 類似,但是 RUN 可以用多條 CMD 只能用一條,RUN 相當於打包東西進入 image 中,而 CMD 是在容器開啟後執行。指定了CMD命令以後,docker run命令就不能附加命令了,否則會將 CMD 命令覆蓋
(2)構建 image
docker image build -t koa-demo:0.0.1 .
(3) 檢視
docker image ls