1.容器 vs 虚拟机

共同点:
1.容器和虚拟机都需要依赖宿主机才能运行

不同点:
对于系统资源的处理方式
虚拟机:
是硬件虚拟化,将因减肥物理资源划分为虚拟资源。

容器:
是将系统资源划分为虚拟资源。
os也占领了全部硬件资源。在os层之上, 需要安装容器引擎(如docker)。容器引擎可以获取系统资源,比如进程树,文件系统以及网络栈,接着将资源分割为安全的互相隔离的资源结构,称之为容器。

占用系统资源
虚拟机中每个操作系统都会占用一点系统资源。
容器共享一个操作系统/内核。这意味着只有一个操作系统消耗CPU, RAM 和存储资源,只有一份OS损耗。

启动时间
虚拟机启动要重启内核开始
容器需要的是位于下层操作系统的共享内核是启动了的。唯一对容器启动时间有影响的是容器内应用启动所花费的时间。8

2.检查 docker daemon

  1. # 1. 检查docker是否正在运行
  2. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker version
  3. Client: Docker Engine - Community
  4. Version: 19.03.12
  5. API version: 1.40
  6. Go version: go1.13.10
  7. Git commit: 48a66213fe
  8. Built: Mon Jun 22 15:46:54 2020
  9. OS/Arch: linux/amd64
  10. Experimental: false
  11. Server: Docker Engine - Community
  12. Engine:
  13. Version: 19.03.12
  14. API version: 1.40 (minimum version 1.12)
  15. Go version: go1.13.10
  16. Git commit: 48a66213fe
  17. Built: Mon Jun 22 15:45:28 2020
  18. OS/Arch: linux/amd64
  19. Experimental: false
  20. containerd:
  21. Version: 1.2.13
  22. GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
  23. runc:
  24. Version: 1.0.0-rc10
  25. GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
  26. docker-init:
  27. Version: 0.18.0
  28. GitCommit: fec3683
  29. # 2.检查 docker status 状态
  30. [vic@izwz93lmtccp8mvky0xj4uz ~]$ service docker status
  31. Redirecting to /bin/systemctl status docker.service
  32. docker.service - Docker Application Container Engine
  33. Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
  34. Active: active (running) since Mon 2020-07-27 16:19:11 CST; 18h ago
  35. Docs: https://docs.docker.com
  36. Main PID: 4591 (dockerd)
  37. Memory: 132.0M
  38. CGroup: /system.slice/docker.service
  39. └─4591 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
  40. # 3.检查 docker 是否是有效的
  41. [vic@izwz93lmtccp8mvky0xj4uz ~]$ systemctl is-active docker
  42. active

3.运行容器

  1. docker contain run <options> <image>:<tag> <app>
  2. optins 命令参数
  3. -it 使容器具备交互性并与终端进行连接

4.容器进程

ps -elf

通过 ps -elf 命令在容器内部查看

  1. root@ba35c3926bfe:/# ps -elf
  2. F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
  3. 4 S root 1 0 0 80 0 - 1025 do_wai 05:48 pts/0 00:00:00 /bin/bash
  4. 0 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

  1. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. ba35c3926bfe ubuntu:latest "/bin/bash" 4 minutes ago Up 4 minutes modest_kepler

终端重连到 Docker

当前容器仍然在运行, 并且可以通过 docker container exec 命令将终端重新连接到 Docker。

  1. $ docker container exec -it ba35c3926bfe bash

5.停止并删除容器

  1. # 1.停止
  2. $ docker container stop ba35c3926bfe
  3. # 2.删除
  4. $ docker container rm ba35c3926bfe

6.容器生命周期

容器的生命周期:从创建、运行、休眠、直至销毁的整个过程。
停止容器并不会损毁容器或者其中的数据。
卷(volume)才是容器中存储持久化数据的首选方式。

删除容器的最佳方式是两步: 先停止容器然后删除。

7.重启策略进行容器的自我修复

三种重启策略
always: 当 Docker daemon 重启时, 当 daemon 启动完成时, 该容器也会重新启动。
unless-stopped: 当处于 stopped(Exited) 状态的容器, 不会在 Docker daemon 重启的时候被重启
on-failed: 在退出容器并且返回值不是0的时候,重启容器。当处于 stopped 状态,在Docker daemon 重启的是时候,容器也会被重启。

  1. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. a94ee5c7e815 alpine "sleep 1d" 4 seconds ago Up 4 seconds on-failure
  4. d3474f264212 alpine "sleep 1d" 41 seconds ago Up 40 seconds unless-stopped
  5. 6bbe398c3ec1 alpine "sleep 1d" About a minute ago Up About a minute always
  6. 6dc1cf0d9695 ubuntu:latest "/bin/bash" 33 minutes ago Up 31 minutes percy
  7. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container stop a94ee5c7e815
  8. a94ee5c7e815
  9. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls
  10. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  11. d3474f264212 alpine "sleep 1d" About a minute ago Up About a minute unless-stopped
  12. 6bbe398c3ec1 alpine "sleep 1d" 2 minutes ago Up 2 minutes always
  13. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container stop unless-stopped
  14. unless-stopped
  15. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls
  16. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  17. 6bbe398c3ec1 alpine "sleep 1d" 3 minutes ago Up 3 minutes always
  18. 6dc1cf0d9695 ubuntu:latest "/bin/bash" 35 minutes ago Up 32 minutes percy
  19. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container stop always
  20. always
  21. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls
  22. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  23. 6dc1cf0d9695 ubuntu:latest "/bin/bash" 35 minutes ago Up 32 minutes percy
  24. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -a
  25. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  26. a94ee5c7e815 alpine "sleep 1d" About a minute ago Exited (137) About a minute ago on-failure
  27. d3474f264212 alpine "sleep 1d" 2 minutes ago Exited (137) 27 seconds ago unless-stopped
  28. 6bbe398c3ec1 alpine "sleep 1d" 3 minutes ago Exited (137) 4 seconds ago always
  29. fa4a0c4cb71a alpine "sh" 21 minutes ago Exited (137) 19 minutes ago neversaydie
  30. 6dc1cf0d9695 ubuntu:latest "/bin/bash" 35 minutes ago Up 32 minutes percy
  31. [vic@izwz93lmtccp8mvky0xj4uz ~]$ systemctl restart docker
  32. ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
  33. Authentication is required to manage system services or units.
  34. Authenticating as: root
  35. Password:
  36. ==== AUTHENTICATION COMPLETE ===
  37. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -a
  38. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  39. a94ee5c7e815 alpine "sleep 1d" 2 minutes ago Up 5 seconds on-failure
  40. d3474f264212 alpine "sleep 1d" 2 minutes ago Exited (137) 51 seconds ago unless-stopped
  41. 6bbe398c3ec1 alpine "sleep 1d" 3 minutes ago Up 5 seconds always
  42. fa4a0c4cb71a alpine "sh" 22 minutes ago Up 5 seconds neversaydie
  43. 6dc1cf0d9695 ubuntu:latest "/bin/bash" 36 minutes ago Exited (0) 7 seconds ago percy
  44. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container start unless-stopped
  45. unless-stopped
  46. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -a
  47. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  48. a94ee5c7e815 alpine "sleep 1d" 2 minutes ago Up 36 seconds on-failure
  49. d3474f264212 alpine "sleep 1d" 3 minutes ago Up 5 seconds unless-stopped
  50. 6bbe398c3ec1 alpine "sleep 1d" 4 minutes ago Up 36 seconds always
  51. fa4a0c4cb71a alpine "sh" 22 minutes ago Up 36 seconds neversaydie
  52. 6dc1cf0d9695 ubuntu:latest "/bin/bash" 36 minutes ago Exited (0) 37 seconds ago percy
  53. [vic@izwz93lmtccp8mvky0xj4uz ~]$ systemctl restart docker
  54. ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
  55. Authentication is required to manage system services or units.
  56. Authenticating as: root
  57. Password:
  58. ==== AUTHENTICATION COMPLETE ===
  59. [vic@izwz93lmtccp8mvky0xj4uz ~]$ docker container ls -a
  60. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  61. a94ee5c7e815 alpine "sleep 1d" 3 minutes ago Up 3 seconds on-failure
  62. d3474f264212 alpine "sleep 1d" 3 minutes ago Up 3 seconds unless-stopped
  63. 6bbe398c3ec1 alpine "sleep 1d" 4 minutes ago Up 3 seconds always
  64. fa4a0c4cb71a alpine "sh" 23 minutes ago Up 3 seconds neversaydie
  65. 6dc1cf0d9695 ubuntu:latest "/bin/bash" 37 minutes ago Exited (0) About a minute ago percy

8.web服务示例

  1. # 运行示例
  2. # 参数
  3. # -d 表示后台模式, 告知容器在后台运行
  4. # -p 参数将 Docker 主机的端口映射到容器内。将 Docker 主机的 80 端口映射到了容器内的 8080 端口。
  5. # 当有流量访问主机 80 端口的时候, 流量会直接映射到容器内的8080端口。
  6. $ docker container run -d --name websever -p 80:8080 nigelpoulton/pluralsight-docker-ci
  7. Unable to find image 'nigelpoulton/pluralsight-docker-ci:latest' locally
  8. latest: Pulling from nigelpoulton/pluralsight-docker-ci
  9. 729ec3a6ada3: Pull complete
  10. f0a3eea3dca0: Pull complete
  11. e07851c50ad6: Pull complete
  12. f78e7cd1f8dc: Pull complete
  13. 7cad1fbd2f07: Pull complete
  14. 22835c51693f: Pull complete
  15. Digest: sha256:61bc64850a5f2bfbc65967cc33feaae8a77c8b49379c55aaf05bb02dcee41451
  16. Status: Downloaded newer image for nigelpoulton/pluralsight-docker-ci:latest
  17. f6a73b675b2aadf75af691aff9d2fd1049af2d38df33b27e8f5ea25bb52a417a