一沐飘、什么是docker
1)docker是linux容器的封裝虫溜。
2)docker運(yùn)行首先要生成鏡像文件image雹姊,鏡像文件包含了程序,和程序運(yùn)行所依賴的各種資源衡楞。?
3)image文件都是繼承其它image文件然后自己往里面添加一些內(nèi)容形成自己的image文件吱雏。
4)通過(guò)image也就是鏡像可以生成容器文件,dokcer每次運(yùn)行run命令都可以創(chuàng)建一個(gè)容器文件瘾境。
二歧杏、docker基本命令使用
1.從鏡像倉(cāng)庫(kù)拉去docker鏡像
docker image pull library/hello-world
2.查看本機(jī)有哪些鏡像文件
docker image ls
3.列出本機(jī)所有容器,包括終止運(yùn)行的容器
docker container ls --all
列出本機(jī)正在運(yùn)行的容器
docker ps | docker container ls
4.會(huì)從 image 文件迷守,生成一個(gè)正在運(yùn)行的容器實(shí)例得滤,
docker run -itd ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
-t:?在新容器內(nèi)指定一個(gè)偽終端或終端。
-i:?允許你對(duì)容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互盒犹。
-d: 在大部分的場(chǎng)景下,我們希望 docker 的服務(wù)是在后臺(tái)運(yùn)行的眨业,我們可以過(guò)?-d?指定容器的運(yùn)行模式
--name 指定容器的名稱
--network 指定容器鏈接的網(wǎng)絡(luò)
-P:將容器內(nèi)部使用的網(wǎng)絡(luò)端口隨機(jī)映射到我們使用的主機(jī)上
-p:可以手動(dòng)設(shè)置容器內(nèi)部網(wǎng)絡(luò)端口和主機(jī)端口的映射如:docker run -d -p 5000:5000 training/webapp python app.py
/bin/bash:放在鏡像名后的是命令急膀,這里我們希望有個(gè)交互式 Shell,因此用的是 /bin/bash
命令具有自動(dòng)抓取 image 文件的功能龄捡。如果發(fā)現(xiàn)本地沒有指定的 image 文件卓嫂,就會(huì)從倉(cāng)庫(kù)自動(dòng)抓取。因此聘殖,前面的docker image pull命令并不是必需的步驟晨雳。
5.在使用?-d?參數(shù)時(shí),容器啟動(dòng)后會(huì)進(jìn)入后臺(tái)奸腺。此時(shí)想要進(jìn)入容器餐禁,可以通過(guò)以下指令進(jìn)入:
docker attach 使用此命令對(duì)出后會(huì)導(dǎo)致容器停止
docker exec:推薦大家使用 docker exec 命令,因?yàn)榇送顺鋈萜鹘K端突照,不會(huì)導(dǎo)致容器的停止帮非。
7.容器后端啟動(dòng)后不會(huì)直接進(jìn)入到容器,使用exec可以進(jìn)入容器并且跟容器中的終端進(jìn)行交互
docker exec -it 243c32535da7 /bin/bash
8.使用 docker start 啟動(dòng)一個(gè)已停止的容器
docker start b750bbbcfd88
9.不會(huì)自動(dòng)終止的容器手動(dòng)終止
docker container kill [containID]
10.停止容器的命令如下
docker stop <容器 ID>
11.停止的容器可以通過(guò) docker restart 重啟
docker restart <容器 ID>
12.列出本機(jī)正在運(yùn)行的容器
docker container ls 或 docker ps
13.列出本機(jī)所有容器,包括終止運(yùn)行的容器
docker container ls [--all | -a]
docker ps [--all | -a]
14.刪除docker容器
docker rm
運(yùn)行上面的命令之后末盔,再使用docker container ls --all命令筑舅,就會(huì)發(fā)現(xiàn)被刪除的容器文件已經(jīng)消失了。
15下面的命令可以清理掉所有處于終止?fàn)顟B(tài)的容器陨舱。
$ docker container prune
16.在宿主主機(jī)內(nèi)使用?docker logs?命令翠拣,查看容器內(nèi)的標(biāo)準(zhǔn)輸出:
docker logs [containerId|containerName]
-f:?讓?docker logs?像使用?tail -f?一樣來(lái)輸出容器內(nèi)部的標(biāo)準(zhǔn)輸出。
17.導(dǎo)出容器
docker export 1e560fca3906 > ubuntu.tar
18.可以使用 docker import 從容器快照文件中再導(dǎo)入為鏡像游盲,以下實(shí)例將快照文件 ubuntu.tar 導(dǎo)入到鏡像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
也可以通過(guò)指定 URL 或者某個(gè)目錄來(lái)導(dǎo)入误墓,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo
19.使用?docker top?來(lái)查看容器內(nèi)部運(yùn)行的進(jìn)程
docker top wizardly_chandrasekhar
20.使用?docker inspect?來(lái)查看 Docker 的底層信息。它會(huì)返回一個(gè) JSON 文件記錄著 Docker 容器的配置和狀態(tài)信息
docker inspect wizardly_chandrasekhar
21.docker network create -d bridge test-net
docker容器新建網(wǎng)路橋接
參數(shù)說(shuō)明:
-d:參數(shù)指定 Docker 網(wǎng)絡(luò)類型背桐,有 bridge优烧、coverlay
22.生成新的鏡像
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m:?提交的描述信息
-a:?指定鏡像作者
e218edb10161:容器 ID
runoob/ubuntu:v2:?指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
docker tag 860c279d2fec runoob/centos:dev
docker tag?鏡像ID,這里是?860c279d2fec ,用戶名稱链峭、鏡像源名(repository name)和新的標(biāo)簽名(tag)
docker build?-t?nginx:v3 .
根據(jù)Dockerfile文件創(chuàng)建鏡像,指令最后一個(gè)?.?是上下文路徑
23.推送鏡像
docker push username/ubuntu:18.04
需要先登錄畦娄,把本地鏡像推送到鏡像倉(cāng)庫(kù)中
24.docker容器數(shù)據(jù)持久化
1.bind mounts:方式將宿主機(jī)任意位置的文件夾掛在到容器中
docker run --name web -d -v C:\Users\EDY\docker:/usr/share/nginx/html -p 88:80? nginx:v3
2.volumes: 文件卷,docker 管理宿主機(jī)文件系統(tǒng)的一部分
docker volumes create nginx-vol 創(chuàng)建docker文件卷
docker run --name web -d -v nginx-vol:/usr/share/nginx/html -p 88:80? nginx:v3
三弊仪、創(chuàng)建鏡像
創(chuàng)建鏡像的方式有三種分別是1.通過(guò)dockerfile創(chuàng)建容器熙卡;2.通過(guò)commit命令根據(jù)容器生成一個(gè)新的鏡像;3.通過(guò)導(dǎo)入導(dǎo)出的方式生成新的鏡像励饵,接下來(lái)我會(huì)詳細(xì)講一下通過(guò)dockerfile和commit命令的方式創(chuàng)建容器驳癌。
1.通過(guò)dockerfile創(chuàng)建鏡像
參考:
2.通過(guò)commit方式創(chuàng)建鏡像
通過(guò)commit方式創(chuàng)建鏡像主要是基于容器,使用場(chǎng)景是役听,對(duì)一個(gè)容器進(jìn)行改造颓鲜,比如在centos鏡像中通過(guò)二進(jìn)制的方式下載了一個(gè)nginx并且對(duì)nginx進(jìn)行了配置,如果想要把這個(gè)容器作為一個(gè)基礎(chǔ)鏡像模板可以使用commit命令根據(jù)容器生成一個(gè)新的鏡像并且可以把新的鏡像推送到鏡像倉(cāng)庫(kù)中典予。
例:
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m:?提交的描述信息
-a:?指定鏡像作者
e218edb10161:容器 ID
runoob/ubuntu:v2:?指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名