1.容器 vs 虚拟机
共同点:
1.容器和虚拟机都需要依赖宿主机才能运行
不同点:
对于系统资源的处理方式
虚拟机:
是硬件虚拟化,将因减肥物理资源划分为虚拟资源。
容器:
是将系统资源划分为虚拟资源。
os也占领了全部硬件资源。在os层之上, 需要安装容器引擎(如docker)。容器引擎可以获取系统资源,比如进程树,文件系统以及网络栈,接着将资源分割为安全的互相隔离的资源结构,称之为容器。
占用系统资源
虚拟机中每个操作系统都会占用一点系统资源。
容器共享一个操作系统/内核。这意味着只有一个操作系统消耗CPU, RAM 和存储资源,只有一份OS损耗。
启动时间
虚拟机启动要重启内核开始
容器需要的是位于下层操作系统的共享内核是启动了的。唯一对容器启动时间有影响的是容器内应用启动所花费的时间。8
2.检查 docker daemon
# 1. 检查docker是否正在运行[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker versionClient: Docker Engine - CommunityVersion: 19.03.12API version: 1.40Go version: go1.13.10Git commit: 48a66213feBuilt: Mon Jun 22 15:46:54 2020OS/Arch: linux/amd64Experimental: falseServer: Docker Engine - CommunityEngine:Version: 19.03.12API version: 1.40 (minimum version 1.12)Go version: go1.13.10Git commit: 48a66213feBuilt: Mon Jun 22 15:45:28 2020OS/Arch: linux/amd64Experimental: falsecontainerd:Version: 1.2.13GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429runc:Version: 1.0.0-rc10GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dddocker-init:Version: 0.18.0GitCommit: fec3683# 2.检查 docker status 状态[vic@izwz93lmtccp8mvky0xj4uz ~]$ service docker statusRedirecting to /bin/systemctl status docker.service● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)Active: active (running) since Mon 2020-07-27 16:19:11 CST; 18h agoDocs: https://docs.docker.comMain PID: 4591 (dockerd)Memory: 132.0MCGroup: /system.slice/docker.service└─4591 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock# 3.检查 docker 是否是有效的[vic@izwz93lmtccp8mvky0xj4uz ~]$ systemctl is-active dockeractive
3.运行容器
docker contain run <options> <image>:<tag> <app>optins 命令参数-it 使容器具备交互性并与终端进行连接
4.容器进程
ps -elf
通过 ps -elf 命令在容器内部查看
root@ba35c3926bfe:/# ps -elfF S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD4 S root 1 0 0 80 0 - 1025 do_wai 05:48 pts/0 00:00:00 /bin/bash0 R root 10 1 0 80 0 - 1468 - 05:48 pts/0 00:00:00 ps -elf
如果通过 exit 退出 Bash Shell, 那么容器也会退出(终止)。 原因是容器如果不运行任何进程则无法存在。
杀死容器的主进程, 则容器也会被杀死。
容器后台运行
按下 Ctrl-PQ 组合键则会退出容器但并不终止容器运行。
查看当前系统正在运行的容器列表,
docker container ls
[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESba35c3926bfe ubuntu:latest "/bin/bash" 4 minutes ago Up 4 minutes modest_kepler
终端重连到 Docker
当前容器仍然在运行, 并且可以通过 docker container exec 命令将终端重新连接到 Docker。
$ docker container exec -it ba35c3926bfe bash
5.停止并删除容器
# 1.停止$ docker container stop ba35c3926bfe# 2.删除$ docker container rm ba35c3926bfe
6.容器生命周期
容器的生命周期:从创建、运行、休眠、直至销毁的整个过程。
停止容器并不会损毁容器或者其中的数据。
卷(volume)才是容器中存储持久化数据的首选方式。
7.重启策略进行容器的自我修复
三种重启策略
always: 当 Docker daemon 重启时, 当 daemon 启动完成时, 该容器也会重新启动。
unless-stopped: 当处于 stopped(Exited) 状态的容器, 不会在 Docker daemon 重启的时候被重启
on-failed: 在退出容器并且返回值不是0的时候,重启容器。当处于 stopped 状态,在Docker daemon 重启的是时候,容器也会被重启。
[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa94ee5c7e815 alpine "sleep 1d" 4 seconds ago Up 4 seconds on-failured3474f264212 alpine "sleep 1d" 41 seconds ago Up 40 seconds unless-stopped6bbe398c3ec1 alpine "sleep 1d" About a minute ago Up About a minute always6dc1cf0d9695 ubuntu:latest "/bin/bash" 33 minutes ago Up 31 minutes percy[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container stop a94ee5c7e815a94ee5c7e815[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd3474f264212 alpine "sleep 1d" About a minute ago Up About a minute unless-stopped6bbe398c3ec1 alpine "sleep 1d" 2 minutes ago Up 2 minutes always[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container stop unless-stoppedunless-stopped[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6bbe398c3ec1 alpine "sleep 1d" 3 minutes ago Up 3 minutes always6dc1cf0d9695 ubuntu:latest "/bin/bash" 35 minutes ago Up 32 minutes percy[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container stop alwaysalways[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6dc1cf0d9695 ubuntu:latest "/bin/bash" 35 minutes ago Up 32 minutes percy[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa94ee5c7e815 alpine "sleep 1d" About a minute ago Exited (137) About a minute ago on-failured3474f264212 alpine "sleep 1d" 2 minutes ago Exited (137) 27 seconds ago unless-stopped6bbe398c3ec1 alpine "sleep 1d" 3 minutes ago Exited (137) 4 seconds ago alwaysfa4a0c4cb71a alpine "sh" 21 minutes ago Exited (137) 19 minutes ago neversaydie6dc1cf0d9695 ubuntu:latest "/bin/bash" 35 minutes ago Up 32 minutes percy[vic@izwz93lmtccp8mvky0xj4uz ~]$ systemctl restart docker==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===Authentication is required to manage system services or units.Authenticating as: rootPassword:==== AUTHENTICATION COMPLETE ===[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa94ee5c7e815 alpine "sleep 1d" 2 minutes ago Up 5 seconds on-failured3474f264212 alpine "sleep 1d" 2 minutes ago Exited (137) 51 seconds ago unless-stopped6bbe398c3ec1 alpine "sleep 1d" 3 minutes ago Up 5 seconds alwaysfa4a0c4cb71a alpine "sh" 22 minutes ago Up 5 seconds neversaydie6dc1cf0d9695 ubuntu:latest "/bin/bash" 36 minutes ago Exited (0) 7 seconds ago percy[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container start unless-stoppedunless-stopped[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa94ee5c7e815 alpine "sleep 1d" 2 minutes ago Up 36 seconds on-failured3474f264212 alpine "sleep 1d" 3 minutes ago Up 5 seconds unless-stopped6bbe398c3ec1 alpine "sleep 1d" 4 minutes ago Up 36 seconds alwaysfa4a0c4cb71a alpine "sh" 22 minutes ago Up 36 seconds neversaydie6dc1cf0d9695 ubuntu:latest "/bin/bash" 36 minutes ago Exited (0) 37 seconds ago percy[vic@izwz93lmtccp8mvky0xj4uz ~]$ systemctl restart docker==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===Authentication is required to manage system services or units.Authenticating as: rootPassword:==== AUTHENTICATION COMPLETE ===[vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa94ee5c7e815 alpine "sleep 1d" 3 minutes ago Up 3 seconds on-failured3474f264212 alpine "sleep 1d" 3 minutes ago Up 3 seconds unless-stopped6bbe398c3ec1 alpine "sleep 1d" 4 minutes ago Up 3 seconds alwaysfa4a0c4cb71a alpine "sh" 23 minutes ago Up 3 seconds neversaydie6dc1cf0d9695 ubuntu:latest "/bin/bash" 37 minutes ago Exited (0) About a minute ago percy
8.web服务示例
# 运行示例# 参数# -d 表示后台模式, 告知容器在后台运行# -p 参数将 Docker 主机的端口映射到容器内。将 Docker 主机的 80 端口映射到了容器内的 8080 端口。# 当有流量访问主机 80 端口的时候, 流量会直接映射到容器内的8080端口。$ docker container run -d --name websever -p 80:8080 nigelpoulton/pluralsight-docker-ciUnable to find image 'nigelpoulton/pluralsight-docker-ci:latest' locallylatest: Pulling from nigelpoulton/pluralsight-docker-ci729ec3a6ada3: Pull completef0a3eea3dca0: Pull completee07851c50ad6: Pull completef78e7cd1f8dc: Pull complete7cad1fbd2f07: Pull complete22835c51693f: Pull completeDigest: sha256:61bc64850a5f2bfbc65967cc33feaae8a77c8b49379c55aaf05bb02dcee41451Status: Downloaded newer image for nigelpoulton/pluralsight-docker-ci:latestf6a73b675b2aadf75af691aff9d2fd1049af2d38df33b27e8f5ea25bb52a417a
