Docker介绍及简单操作
1、简介
Docker 是一个开源的容器引擎,它基于 LXC 容器技术,使用 Go 语言开发
源代码托管在 GitHub 上,并遵从 Apache2.0 协议
Docker 采用 C/S架构,其可轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器
简单来说:Docker 是一种快速解决业务稳定环境的一种技术手段
角色组成
| 组件 | 描述 |
|---|---|
| Docker镜像 | 它是一个只读文件,类似于安装操作系统所需的iso光盘镜像,通过运行这个镜像来完成各种应用的部署。这里的镜像就是一个能被docker运行起来的一个程序 |
| Docker容器 | 容器类似于运行起来的操作系统,而且这个操作系统启动了某些服务。这里的容器就是运行起来的一个docker镜像 |
| Docker仓库 | 仓库类似于操作系统光盘的一个镜像站。这里的仓库就是docker镜像存储的地方 |
官方资料
Docker 官网:http://www.docker.com
Github Docker 源码:https://github.com/docker/docker
2、原理解析
Docker Engine 是一个C/S架构的应用程序,主要包含下面几个组件:
- 常驻后台进程 Dockerd
- 一个用来和 Dockerd 交互的 REST API Server
- 命令行 CLI 接口,通过和 REST API 进行交互(docker 命令)
![在这里插入图片描述]()
流程图
Docker 使用 C/S 体系的架构,Docker 客户端与 Docker 守护进程通信,Docker 守护进程负责构建,运行和分发 Docker 容器。Docker 客户端和守护进程可以在同一个系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程使用 REST API 通过 UNIX 套接字或网络接口进行通信

3、Docker 安装与操作
3.1、安装Docker
apt install docker-ce –y
说明:安装启动docker后,会多出来一个docker0网卡,网卡地址172.17.0.1
3.2、docker 开启 | 关闭 | 重启 | 状态
1 systemctl [start | stop | restart | status | ...] docker
3.3、docker版本
1 docker version | info
3.4、检查Docker是否安装正确
1 sudo docker run hello-world3.5、设置国内镜像站(加速仓库)
1 # 定制加速仓库(国内镜像站) 2 echo '{"registry-mirrors": ["https://kcmn5udq.mirror.aliyuncs.com"]}' > /etc/docker/daemon.json 3 4 # 重启服务 5 systemctl restart docker
4、镜像管理
4.1、搜索
docker search <image_name>
4.2、获取、下载
docker pull <image_name>
4.3、查看
docker images [image_name]
4.4、历史(镜像制作的操作历史记录)
docker history <image_name>
4.5、标签
docker tag <old_image>:<old_version> <new_image>:<new_version>
4.6删除镜像
docker image rm <image_id> | <image_name:image_version> 或 docker rmi <image_id> | <image_name:image_version>
4.7、导出为压缩包
docker save -o <包文件名> <镜像> 或 docker save 镜像 > 包文件名
4.8、导入镜像压缩包
docker load < 镜像压缩包名 或 docker load -i 镜像压缩包名 或 docker load --input 镜像压缩包名
5、容器管理
5.1、查看
# 查看所有容器(包括已经退出/停止的容器) docker [container] ps -a 或 docker container ls -a 或 docker container ls --all # 查看运行的容器 docker [container] ps 或 docker container ls
5.2、新建并启动容器
docker run -itd --name <容器别名> <image_name>
5.3、启动 | 关闭 | 重启
docker [container] start|stop(kill)|restart <container_id>
5.4、删除
docker rm [-f] <container_id>
# -f 表示强制删除一个容器(不管有没有运行都删除)
5.5、进入(登录)容器
docker exec -it <container_id>|容器别名 /bin/bash
属性说明:
-
-i:让容器的标准输入保持打开 —— 可以通过键盘输入指令操作容器 -
-t:让 docker 分配一个伪终端,并绑定到容器的标准输入上 —— 具备命令提示符的可视化终端 -
/bin/bash:执行一个命令 —— bash 交互环境(shell 交互环境),是一个程序
5.6、基于容器提交镜像
docker commit -m "镜像描述/改动信息" -a "作者信息" <container_id> <new_image:tag>
5.7、日志
1 docker logs <container_id> 2
5.8、属性
1 docker inspect <container_id> 2
6、数据管理
数据卷:将宿主机的某个目录,映射到容器中,作为容器数据存储的目录
1 docker run -d --name <容器别名> -v <宿主机目录>:<容器目录> <镜像名称> 2
注意:
-v <宿主机目录>:<容器目录>可以存在多个,表示同时挂载多个- 宿主机文件尽量用绝对路径,若容器文件目录不存在,docker 会自动穿件
7、网络管理
默认构建容器,网络模式为桥架模式,桥接模式下容器只能和宿主机通信
原理图

拓展:
- 虚拟网卡(网关),数据传输的通道口
- 网卡作用:通信,收发数据
- 宿主机访问容器之前会先经过网关(虚拟网卡)
问题:如何通过宿主机的 ip 和端口直接访问容器?
解决:端口映射
端口映射图示

Docker网络的2种实现方式
- 端口映射
- 网络模式
端口映射:将容器内服务端口与宿主机端口关联在一起,通过宿主机ip:宿主机端口port达到访问容器服务
1 # 默认随机映射 2 docker run -P <image_name> 3
说明:
-P指容器应用 port 随机映射到宿主机上的 port- 生产场景一般不使用随机映射,优点是由 docker 分配,宿主机端口不会冲突
1 # 指定端口映射 2 docker run -p ip:port:80 <image_name> 3
说明:
- 指定端口映射,在标准化场景下使用频率高
- 宿主机 ip 不写表示
0.0.0.0,宿主机 port 不写表示随机端口,容器 port 必须指定
网络模式:借助于独立的 docker 网卡功能实现访问容器服务的效果
网络模型分为
bridge模式host模式none模式
bridge模式:
Docker的默认模式,它会在docker容器启动时候,自动配置好自己的网络信息,同一宿主机的所有容器都在一个网络下,彼此间可以通信。类似于我们vmware虚拟机的nat模式。
利用宿主机的网卡进行通信,因为涉及到网络转换,所以会造成资源消耗,网络效率会低。

host模式:
鸠占鹊巢,用着宿主机的东西,干自己的事情。容器使用宿主机的ip地址进行通信。
特点:容器和宿主机共享网络


none模式:
这种模式最纯粹,不会帮你做任何网络的配置,可以最大限度的定制化。

浙公网安备 33010602011771号