一、什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
二、Docker 的用途
Docker 的主要用途,目前有三大类。
- 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
- 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
三、Docker 架构
Docker通过客户端访问守护进程,从而操作Docker容器,而容器是通过镜像创建的,Docker镜像保存在Docker仓库中。
1、docker client 客户端
Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信。
2、docker Daemon 守护进程
Docker是C/S架构的程序,Docker的客户端向守护进程发起请求,守护进程处理完成后返回结果。
Docker客户端既可以在本地访问守护进程,也可以远程访问守护进程。
3、docker Image(镜像)
镜像是Docker容器的基石,容器基于镜像启动和运行,镜像可以看做容器的源代码,保存了用于启动容器的各种条件。
4、docker Container(容器)
Docker容器通过镜像启动,容器是Docker的执行单元,容器中可以运行客户的多个进程。
容器与镜像的关系类似于面向对象编程中的对象与类。
5、docker Registry(仓库)
Docker用仓库保存用户创建的镜像,仓库分共有和私有两种。Docker公司自己提供了最大的公有仓库Docker Hub,可以在Docker Hub上创建账户,保存分享自己创建的镜像。
三、Windows Docker 安装
Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。
Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。
因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。
在 Windows 上部署 Docker 的方法都是先安装一个虚拟机,并在安装 Linux 系统的虚拟机中运行 Docker。
Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-windows
- 安装完成后打开DOS窗口执行 docker run hello-world 出现如下信息表明安装成功
四、基础操作
1、使用 docker run 命令来在容器内运行一个应用程序
C:\Users\86182>docker run ubuntu:15.10 /bin/echo "Hello world"
- 参数解析:
docker:Docker 的二进制执行文件。
run:与前面的 docker 组合来运行一个容器。
ubuntu:15.10:指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo “Hello world”:在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
2、使用docker run -i -t,让 docker 运行的容器实现"对话"的能力
C:\Users\86182>docker run -i -t ubuntu:15.10 /bin/bash
root@c28c8fd6852c:/#
- 参数解析:
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
注意第二行 root@c28c8fd6852c:/#,此时我们已进入一个 ubuntu15.10 系统的容器
在容器中运行命令 cat /proc/version和ls分别查看当前系统的版本信息和当前目录下的文件列表:
C:\Users\86182>docker run -i -t ubuntu:15.10 /bin/bash
root@907ab6969919:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@907ab6969919:/# cat /proc/version
Linux version 5.10.16.3-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220) #1 SMP Fri Apr 2 22:23:49 UTC 2021
exit 命令或者使用 CTRL+D 来退出容器
3、创建一个以进程方式运行的容器
C:\Users\86182>docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
733509098cc41ad4893b16215e9a5ae15fc55d17bff487f96a49a1fe2c8d8bf2
这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:
C:\Users\86182>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
733509098cc4 ubuntu:15.10 "/bin/sh -c 'while t…" About a minute ago Up About a minute cool_bhaskara
- 参数解析:
CONTAINER ID:容器 ID。
IMAGE:使用的镜像。
COMMAND:启动容器时运行的命令。
CREATED:容器的创建时间。
STATUS:容器状态。
PORTS:容器的端口信息和使用的连接类型(tcp\udp)。
NAMES:自动分配的容器名称。
在宿主主机内使用 docker logs 命令,查看容器内的标准输出:
C:\Users\86182>docker logs 733509098cc4
hello world
hello world
hello world
hello world
hello world
hello world
docker stop 命令来停止容器