概述
- Docker是开源、轻量级容器引擎
- Docker使用容器承载应用程序,而不使用操作系统,因此开销小,性能高
- Docker对应用程序的隔离不如虚拟机彻底
Docker存储驱动
- 每个Docker文件都有一个本地存储空间,用户保存层叠的镜像层[Image Layer],以及挂载的容器文件系统。
- 默认情况下,容器的所有读写操作都发生在其镜像层上或挂载的文件系统中。
Docker运维技能
- Docker镜像下载
- 运行容器
- 登陆容器
- 在容器内运行命令
- 销毁容器
Docker两个主要组件
- Docker客户端
- Docker daemon[服务端,引擎]
* daemon实现了Docker引擎的API
sudo docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:49 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:44:20 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
镜像
- 可以将Docker镜像理解为一个包含了OS文件系统和应用的对象
- 在Docker世界中,镜像实际上等价于未运行的容器
- 查看Docker镜像
sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest adafef2e596e 3 months ago 73.9MB
- 镜像包含了基础操作系统,以及应用程序运行所需的代码和依赖包。
- Docker的每个镜像都有自己的唯一ID。可以通过应用镜像的ID或名称来使用镜像。
- 在Docker主机上获取镜像[拉取(pulling)]
docker pull ubuntu
Using default tag: latest
容器
- 拉取镜像到本地后,可以使用 docker container run 从镜像启动容器。
- -it [将SHELL切换到容器终端]告诉Docker开启容器的交互模式并将当前的Shell连接到容器终端
- docker run 告诉Docker Daemon 启动新的容器
- /bin/bash 告诉Docker,想要在容器内部运行哪个进程。
docker run -it ubuntu /bin/bash
root@5dabfa10b0a0:/#
- 在容器内部运行ps命令查看当前正在运行的全部进程
可以看到容器中仅包含两个进程
PID 1 代表 /bin/bash 进程,该进程是通过docker run 命令通知容器运行的
PID 8 代表 ps -elf 进程,查看当前运行中进程所使用的命令/程序
root@bf5f99b5ada3:/# ps -elf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 1063 do_wai 10:14 pts/0 00:00:00 /bin/bash
0 R root 8 1 0 80 0 - 1471 - 10:17 pts/0 00:00:00 ps -elf
- 按 Ctrl-PQ 组合键,可以在退出容器的同时还保持容器运行
[在容器内部使用该操作可以退出当前容器,但不会杀死容器进程]
同时Shell返回到Docker主机终端
再次运行 ps 命令
与Docker容器相比,Docker主机中运行的进程数要多很多,
ps -elf | grep docker
4 S root 1370 1 0 80 0 - 151446 - 03:55 ? 00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
0 S root 4171 1369 0 80 0 - 26909 - 07:10 ? 00:00:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/59dee264970f0e239e1f40acf5b05afb856835ee0abb8a143af8e43a879353c2 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
0 S vagrant 4268 2406 0 80 0 - 3558 pipe_w 07:11 pts/0 00:00:00 grep --color=auto docker
- 可以通过docker container ls 命令查看系统内全部处于运行状态的容器
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59dee264970f ubuntu "/bin/bash" 3 minutes ago Up 3 minutes magical_mestorf
- 连接到运行中的容器
执行 docker exec 可以将Shell连接到一个运行中的容器终端
magical_mestorf 表示上述示例容器名称
docker exec -it magical_mestorf /bin/bash
root@59dee264970f:/#
- docker exec 命令的格式如下
将本地Shell连接到容器是通过-it参数实现的。
docker exec <options> <container-name or container-id> <command/app>
docker container stop magical_mestorf
docker container rm magical_mestorf
安装
- 有多种场景和方式安装:手工安装、脚本方式安装、向导方式安装
- 多平台支持:Windows、Mac、Linux
Linux 安装 Docker
- 本文主要记录Linux下的Docker安装,安装社区版[CE]
- 使用wget从https://get.docker.com获取并运行Docker安装脚本,然后采用shell中管道(pipe)的方式来执行这个脚本
wget -qO- https://get.docker.com/ | sh
// 也可通过curl获取安装脚本
// curl -sSL https://get.daocloud.io/docker | sh
- 确认安装结果
- 查看如下信息,版本信息与docker系统信息包含Clinet及Server则表示安装成功
docker --version
Docker version 19.03.12, build 48a66213fe
sudo docker system info
Client:
Debug Mode: false
Server:
Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 1