Docker是一種輕量級的虛擬化技術(shù)糯笙,它具備傳統(tǒng)虛擬機無法比擬的優(yōu)勢惧蛹,它更簡易的安裝和使用方式、更快的速度志珍、服務(wù)集成和開源流程自動化橙垢。
Docker的安裝
安裝Docker的基本要素:
1、Docker只支持64位CPU架構(gòu)的計算機伦糯,目前不支持32位CPU柜某;
2嗽元、建議系統(tǒng)的Linux內(nèi)核版本為3.10以上;
3莺琳、Linux內(nèi)核只需開啟cgroups和namespace功能还棱;
4、對于非Linux內(nèi)核的平臺惭等,如Windows和OS X珍手,需要安裝使用Boot2Docker工具;
下面我們以CentOS7.5為例來安裝Docker辞做,以下操作均在root用戶下操作琳要。
Docker有企業(yè)版和社區(qū)版,我們安裝社區(qū)版即可秤茅。在國內(nèi)稚补,由于各種原因,我們不用官方的源來安裝框喳,國內(nèi)有很多的鏡像站课幕,比如阿里鏡像,清華鏡像等五垮。
1乍惊、下載鏡像倉庫
cd /etc/yum.repo.d/
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
2、直接安裝即可
yum install docker-ce
3放仗、啟動Docker
systemctl start docker
systemctl enable docker
Docker簡單就安裝完了润绎。
如果需要配置鏡像加速,這里以阿里云為例诞挨,登錄到https://cr.console.aliyun.com莉撇,然后獲取自己獨有的加速網(wǎng)址,配置/etc/docker/daemon.json中即可惶傻,這個文件是需要自己創(chuàng)建的棍郎。例如:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://5uuoznyf.mirror.aliyuncs.com"]
}
然后重啟一下Docker即可:
systemctl daemon-reload
systemctl restart docker
Docker的操作參數(shù)
用戶在使用Docker,需要使用Docer命令行工具docker和Docker daemon建立通信银室,Docker daemon是Docker的守護進(jìn)程坝撑,負(fù)責(zé)接收并分發(fā)執(zhí)行Docker命令。
為了了解Docker命令行工具的概況粮揉,我們可以使用Docker命令或Docker help命令來獲取Docker的命令清單巡李,如下:
[root@hjkj ansible]# docker
Usage: docker [OPTIONS] COMMAND
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
......
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
可以看到Docker的命令非常多,現(xiàn)在Docker官方已經(jīng)將Docker命令分組了扶认,當(dāng)前以前的命令方式還是保留著侨拦。值得一提的是docker命令執(zhí)行一般都需要獲取root權(quán)限,因為Docker的命令行工具docker和Docker daemon是同一個二進(jìn)制文件辐宾,而Docker daemon負(fù)責(zé)接收來自docker的命令狱从,它的運行需要root權(quán)限膨蛮。同時,Docker從0.5.2版本開始季研,Docker daemon默認(rèn)綁定了一個UNIX Socket來代替原有的TCP端口敞葛,改UNIX Socket默認(rèn)是屬于root用戶的。因此在執(zhí)行docker命令時与涡,需要root權(quán)限惹谐。
docker有非常多的命令,相應(yīng)的命令都可以通過docker COMMAND --help來查看具體如何使用驼卖,包括子命令的使用方法以及可用的操作參數(shù)氨肌。
我們將docker的子命令進(jìn)行如下分類:
子命令分類 | 子命令 |
---|---|
Docker環(huán)境信息 | info version |
容器生命周期管理 | create exec kill pause restart rm run start stop unpause |
鏡像倉庫命令 | login logout pull push search |
鏡像管理 | build images import load rmi save tag commit |
容器運維操作 | attach export inspect port ps rename stats top wait cp diff update |
容器資源管理 | volume network |
系統(tǒng)日志信息 | events history logs |
docker的命令結(jié)構(gòu)圖如下:
Docker的環(huán)境信息
docker info命令用于查看Docker是否正確安裝,如果正確安裝酌畜,會輸出Docker的配置信息怎囚。
Docker的生命周期管理
Docker生命周期管理涉及容器的啟動桥胞、停止等功能恳守,下面介紹幾個常用的命令。
docker run
docker run的使用語法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
詳細(xì)可以使用docker run --help來查看具體的參數(shù)贩虾。
docker run用來基于特定的鏡像創(chuàng)建一個容器井誉,并且依據(jù)選項來控制改容器。具體使用實例如下:
[root@hjkj ansible]# docker run busybox echo "hello world"
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
ee153a04d683: Pull complete
Digest: sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
Status: Downloaded newer image for busybox:latest
hello world
[root@hjkj ansible]# docker run busybox echo "hello world"
hello world
從上面可以看到這個命令我使用的兩次整胃,第一次是由于我本地沒有busybox這個鏡像,它需要到官方站點去拉取鏡像,然后再運行。第二次由于我們上面已經(jīng)拉取過了疏日,那么busybox這個鏡像就保存在本地了独令,我們再次運行就不需要再去拉取進(jìn)行,直接運行即可轧苫。
docker run的參數(shù)很多,可以通過docker run --help來查看具體的參數(shù),docker run常用的幾個參數(shù)如下:
- -i :表示使用交互模式酬蹋,始終保持輸入流開放
- -t :表示分配一個偽終端,一般和-i結(jié)合使用
- --name :指定容器的名字抽莱,若不指定范抓,則隨機分配一個名字
- -c :用于給運行的容器分配cpu的權(quán)重值
- -m : 用于給容器分配內(nèi)存總量
- -v :用于掛載一個volume,可以同時使用多個-v
- -p :用于將容器內(nèi)的端口暴露給宿主機食铐,常用格式為 -p hostPort:containerPort匕垫,如果不指定hostPort,則在宿主機上隨機生成一個端口
docker start/stop/restart
docker start/stop/restart容器通常是對一個以存在的容器進(jìn)行操作虐呻,它們分別是啟動象泵、關(guān)閉和重啟容器寞秃。其中docker start命令可以使用-i來進(jìn)入交互模式,使用-a來附加標(biāo)準(zhǔn)輸入偶惠、輸出或錯誤輸出春寿。docker stop和docker restart 命令使用-t選項來設(shè)定容器停止前的等待時間。
Docker鏡像倉庫命令
Docker Registry是Docker的鏡像倉庫忽孽,用戶可以通過Docker Client和Docker Registry進(jìn)行通信绑改,以完成鏡像的搜搜索、下載扒腕、上傳等操作绢淀。
docker pull
docker pull是Docker中常用命令,用于將image或者repository從Registry中拉取下來瘾腰。該命令的使用方法如下:
# docker pull --help
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
使用docker pull的時候需要指定版本皆的,如果不指定,默認(rèn)版本是latest蹋盆。
docker push
docker push命令用于將本地的image或repository推送到Registry中费薄。該命令的使用方法如下:
# docker push --help
Usage: docker push [OPTIONS] NAME[:TAG]
Push an image or a repository to a registry
Options:
--disable-content-trust Skip image signing (default true)
在使用docker push的時候需要使用docker login進(jìn)行登錄。
Docker鏡像管理
docker images
docker images命令可以列出主機上的鏡像栖雾,默認(rèn)只列出最頂層的鏡像楞抡,可以使用-a來列出所有的鏡像。其使用方法如下:
# docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
docker rm/rmi
這兩個命令的作用都是刪除析藕,其中docker rm是用于刪除容器召廷,docker rmi是用于刪除鏡像。它們的使用方法如下:
# docker rm --help
Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...]
Remove one or more containers
Options:
-f, --force Force the removal of a running container (uses SIGKILL)
-l, --link Remove the specified link
-v, --volumes Remove the volumes associated with the container
# docker rmi --help
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
值得一提的是账胧,用docker rmi來刪除鏡像的時候竞慢,如果有基于該鏡像的啟動的容器存在,則需要先刪除容器治泥,再刪除鏡像筹煮。當(dāng)然這兩個命令都有-f選項,用于強制刪除存在容器的鏡像或啟動中的容器居夹。
Docker運維操作
docker attach
docker attach可以連接正在運行的容器败潦,觀察該容器的運行情況,或與容器的主機進(jìn)程進(jìn)行交互式操作准脂。其使用方法如下:
# docker attach --help
Usage: docker attach [OPTIONS] CONTAINER
Attach local standard input, output, and error streams to a running container
Options:
--detach-keys string Override the key sequence for detaching a container
--no-stdin Do not attach STDIN
--sig-proxy Proxy all received signals to the process (default true)
docker inspect
docker inspect命令可以查看鏡像和容器的詳細(xì)信息劫扒,默認(rèn)會列出全部信息,可以通過--format參數(shù)來指定輸入的模板格式狸膏,以便輸出特定的信息粟关。該命令的使用方法如下:
# docker inspect --help
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes if the type is container
--type string Return JSON for specified type
docker ps
docker ps命令可以查看容器的相關(guān)信息,默認(rèn)只會顯示正在運行的容器信息。其使用方法如下:
# docker ps --help
Usage: docker ps [OPTIONS]
List containers
Options:
-a, --all Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states) (default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display numeric IDs
-s, --size Display total file sizes
docker ps 常用-a和-l闷板,-a查看所有的容器澎灸,-l查看最新創(chuàng)建的容器,包括不在運行的容器遮晚。
其他子命令
docker commit
docker commit是將容器固化為一個新的鏡像性昭,當(dāng)需要指定特定的鏡像的時候,會對容器的配置進(jìn)行修改县遣,然后通過commit將這些修改保存起來糜颠,使其不會因為容器的停止而丟失。使用方法如下:
# docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Createza new image from a container's changes
Options:
-a, --author string Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
-c, --change list Apply Dockerfile instruction to the created image
-m, --message string Commit message
-p, --pause Pause container during commit (default true)
提交保存時萧求,只能使用正在運行的容器來制作新的鏡像其兴。
docker events/logs/history
這三個命令都是用于查看Docker的系統(tǒng)日志信息,其中events會打印出實時的系統(tǒng)事件夸政,history會打印指定鏡像的歷史版本信息元旬,即構(gòu)建該鏡像的每一層鏡像的命令記錄,logs命令會打印容器內(nèi)進(jìn)程的運行日志守问。其使用方法如下:
# docker events --help
Usage: docker events [OPTIONS]
Get real time events from the server
Options:
-f, --filter filter Filter output based on conditions provided
--format string Format the output using the given Go template
--since string Show all events created since timestamp
--until string Stream events until this timestamp
# docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
--tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
# docker history --help
Usage: docker history [OPTIONS] IMAGE
Show the history of an image
Options:
--format string Pretty-print images using a Go template
-H, --human Print sizes and dates in human readable format (default true)
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs