Docker学习笔记
簡介
Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。
Docker 將應(yīng)用程序與該程序的依賴,打包在一個(gè)文件里面。運(yùn)行這個(gè)文件,就會(huì)生成一個(gè)虛擬容器。程序在這個(gè)虛擬容器里運(yùn)行,就好像在真實(shí)的物理機(jī)上運(yùn)行一樣。有了 Docker,就不用擔(dān)心環(huán)境問題。
總體來說,Docker 的接口相當(dāng)簡單,用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。
用途
Docker 的主要用途,目前有三大類。
(1)提供一次性的環(huán)境。比如,本地測試他人的軟件、持續(xù)集成的時(shí)候提供單元測試和構(gòu)建的環(huán)境。
(2)提供彈性的云服務(wù)。因?yàn)?Docker 容器可以隨開隨關(guān),很適合動(dòng)態(tài)擴(kuò)容和縮容。
(3)組建微服務(wù)架構(gòu)。通過多個(gè)容器,一臺(tái)機(jī)器可以跑多個(gè)服務(wù),因此在本機(jī)就可以模擬出微服務(wù)架構(gòu)。
三個(gè)核心
- Image:和 windows 的那種 iso 鏡像相比,Docker 中的鏡像是分層的,可復(fù)用的,而非簡單的一堆文件迭在一起(類似于一個(gè)壓縮包的源碼和一個(gè) git 倉庫的區(qū)別)。
- Container: 容器的存在離不開鏡像的支持,他是鏡像運(yùn)行時(shí)的一個(gè)載體(類似于實(shí)例和類的關(guān)系)。依托 Docker 的虛擬化技術(shù),給容器創(chuàng)建了獨(dú)立的端口、進(jìn)程、文件等“空間”,Container 就是一個(gè)與宿機(jī)隔離 “容器”。容器可宿主機(jī)之間可以進(jìn)行 port、volumes、network 等的通信。
- Repository: Docker 的倉庫和 git 的倉庫比較相似,擁有倉庫名、tag。在本地構(gòu)建完鏡像之后,即可通過倉庫進(jìn)行鏡像的分發(fā)。常用的 Docker hub 有 https://hub.docker.com/ 、 https://cr.console.aliyun.com/ 等。
常用命令
1.查看docker版本
docker version
2.啟動(dòng)本機(jī)的docker服務(wù)
service docker start
3.列出本機(jī)的所有 image 文件
docker images
或者
docker image ls
4.刪除 image 文件
docker rmi [imageName]
5.將 image 文件從遠(yuǎn)程倉庫抓取到本地
docker pull hello-world
6.列出本機(jī)正在運(yùn)行的容器
docker ps
或者
docker container ls
7.列出本機(jī)所有容器,包括終止運(yùn)行的容器
docker container ls --all
8.運(yùn)行這個(gè)image文件
docker run hello-world
9.終止運(yùn)行某個(gè)docker容器
docker kill [containID]
10.終止運(yùn)行的容器文件,依然會(huì)占據(jù)硬盤空間,可以使用docker rm命令刪除
docker rm [containerID]
11.運(yùn)行這個(gè)image文件,并把容器的3000端口映射到本機(jī)8000端口,同時(shí)映射shell在本地可以輸入命令行
docker run -p 8000:3000 -it koa-demo /bin/bash
-it參數(shù):容器的 Shell 映射到當(dāng)前的 Shell,然后你在本機(jī)窗口輸入的命令,就會(huì)傳入容器。
koa-demo:0.0.1:image 文件的名字(如果有標(biāo)簽,還需要提供標(biāo)簽,默認(rèn)是 > latest 標(biāo)簽)。
/bin/bash:容器啟動(dòng)以后,內(nèi)部第一個(gè)執(zhí)行的命令。這里是啟動(dòng) Bash,保證用戶可以使用 Shell。
12.創(chuàng)建image文件
docker build -t koa-demo .
13.登陸遠(yuǎn)程倉庫
docker login
14.為本地的 image 標(biāo)注用戶名和版本
docker tag [imageName] [username]/[repository]:[tag]
docker tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1
15.發(fā)布 image 文件
docker push [username]/[repository]:[tag]
16.新建容器,每運(yùn)行一次,就會(huì)新建一個(gè)容器
docker start [containerID]
17.查看 docker 容器的輸出,即容器里面 Shell 的標(biāo)準(zhǔn)輸出
docker logs [containerID]
18.用于進(jìn)入一個(gè)正在運(yùn)行的 docker 容器
docker exec -it [containerID] /bin/bash
或者
docker exec -it [containerID] /bin/bash
19.從正在運(yùn)行的 Docker 容器里面,將文件拷貝到本機(jī)
docker cp [containID]:[/path/to/file] .
制作自己的 Docker 容器
編寫.dockerignore
.git node_modules npm-debug.log上面代碼表示,這三個(gè)路徑要排除,不要打包進(jìn)入 image 文件。如果你沒有路徑要排除,這個(gè)文件可以不新建。
編寫 Dockerfile 文件
FROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000 CMD node demos/index.js FROM node:8.4:該 image 文件繼承官方的 node image,冒號(hào)表示標(biāo)簽,這里標(biāo)簽是8.4,即8.4版本的 node。COPY . /app:將當(dāng)前目錄下的所有文件(除了.dockerignore排除的路徑),都拷貝進(jìn)入 image 文件的/app目錄。
WORKDIR /app:指定接下來的工作路徑為/app。
RUN npm install:在/app目錄下,運(yùn)行npm install命令安裝依賴。注意,安裝后所有的依賴,都將打包進(jìn)入 image 文件。
EXPOSE 3000:將容器 3000 端口暴露出來, 允許外部連接這個(gè)端口。
CMD node demos/index.js:表示容器啟動(dòng)后自動(dòng)執(zhí)行node demos/index.js。
PS : RUN命令與CMD命令的區(qū)別:簡單說,RUN命令在 image 文件的構(gòu)建階段執(zhí)行,執(zhí)行結(jié)果都會(huì)打包進(jìn)入 image 文件;
CMD命令則是在容器啟動(dòng)后執(zhí)行。另外,一個(gè) Dockerfile 可以包含多個(gè)RUN命令,但是只能有一個(gè)CMD命令。
注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否則它會(huì)覆蓋CMD命令。
創(chuàng)建image文件
docker build -t koa-demo:0.0.1 . -t參數(shù)用來指定 image 文件的名字,后面還可以用冒號(hào)指定標(biāo)簽。如果不指定,默認(rèn)的標(biāo)簽就是latest。最后的那個(gè)點(diǎn)表示 Dockerfile 文件所在的路徑,上例是當(dāng)前路徑,所以是一個(gè)點(diǎn)。
創(chuàng)建成功后,運(yùn)行 docker image ls 可以看到新生成的image文件koa-demo了
生成容器
docker run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash -p參數(shù):容器的 3000 端口映射到本機(jī)的 8000 端口。-it參數(shù):容器的 Shell 映射到當(dāng)前的 Shell,然后你在本機(jī)窗口輸入的命令,就會(huì)傳入容器。
koa-demo:0.0.1:image 文件的名字(如果有標(biāo)簽,還需要提供標(biāo)簽,默認(rèn)是 latest 標(biāo)簽)。
/bin/bash:容器啟動(dòng)以后,內(nèi)部第一個(gè)執(zhí)行的命令。這里是啟動(dòng) Bash,保證用戶可以使用 Shell。
如果一切正常,運(yùn)行上面的命令以后,就會(huì)返回一個(gè)命令行提示符,你可以在上面啟動(dòng)node服務(wù)。
root@66d80f4aaf1e:/app#發(fā)布 image 文件
1.去 hub.docker.com 或 cloud.docker.com 注冊一個(gè)賬戶。然后,用下面的命令登錄。
docker login2.為本地的 image 標(biāo)注用戶名和版本
docker tag [imageName] [username]/[repository]:[tag]3.發(fā)布 image 文件
docker push [username]/[repository]:[tag]發(fā)布成功以后,登錄 hub.docker.com 或 cloud.docker.com ,就可以看到已經(jīng)發(fā)布的 image 文件。
參考鏈接
- 從 0 開始了解 Docker
- Docker 入門教程
總結(jié)
以上是生活随笔為你收集整理的Docker学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Brocade 光纤交换机常用命令
- 下一篇: 导入工程后编译不过,报错: apply