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-world

3.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>
View Code

4.2、获取、下载

docker pull <image_name>
View Code

4.3、查看

docker images [image_name]
View Code

4.4、历史(镜像制作的操作历史记录)

docker history <image_name>
View Code

4.5、标签

docker tag <old_image>:<old_version> <new_image>:<new_version>
View Code

4.6删除镜像

docker image rm <image_id> | <image_name:image_version>
或
docker rmi <image_id> | <image_name:image_version>
View Code

4.7、导出为压缩包

docker save -o <包文件名> <镜像>
或
docker save 镜像 > 包文件名
View Code

4.8、导入镜像压缩包

docker load < 镜像压缩包名
或
docker load -i 镜像压缩包名
或
docker load --input 镜像压缩包名
View Code

5、容器管理

5.1、查看

# 查看所有容器(包括已经退出/停止的容器)
docker [container] ps -a
或
docker container ls -a
或
docker container ls --all

# 查看运行的容器
docker [container] ps
或
docker container ls
View Code

5.2、新建并启动容器

docker run -itd --name <容器别名> <image_name>
View Code

5.3、启动 | 关闭 | 重启

docker [container] start|stop(kill)|restart <container_id>
View Code

5.4、删除

docker rm [-f] <container_id>
# -f 表示强制删除一个容器(不管有没有运行都删除)
View Code

5.5、进入(登录)容器

docker exec -it <container_id>|容器别名 /bin/bash
View Code

属性说明:

  • -i:让容器的标准输入保持打开 —— 可以通过键盘输入指令操作容器

  • -t:让 docker 分配一个伪终端,并绑定到容器的标准输入上 —— 具备命令提示符的可视化终端

  • /bin/bash:执行一个命令 —— bash 交互环境(shell 交互环境),是一个程序

5.6、基于容器提交镜像

docker commit -m "镜像描述/改动信息" -a "作者信息" <container_id> <new_image:tag>
View Code

5.7、日志

  1 docker logs <container_id>
  2 
View Code

5.8、属性

  1 docker inspect <container_id>
  2 
View Code

6、数据管理

数据卷:将宿主机的某个目录,映射到容器中,作为容器数据存储的目录

  1 docker run -d --name <容器别名> -v <宿主机目录>:<容器目录> <镜像名称>
  2 
View Code

注意:

  • -v <宿主机目录>:<容器目录> 可以存在多个,表示同时挂载多个
  • 宿主机文件尽量用绝对路径,若容器文件目录不存在,docker 会自动穿件

7、网络管理

默认构建容器,网络模式为桥架模式,桥接模式下容器只能和宿主机通信

原理图

在这里插入图片描述
拓展:

  • 虚拟网卡(网关),数据传输的通道口
  • 网卡作用:通信,收发数据
  • 宿主机访问容器之前会先经过网关(虚拟网卡)

问题:如何通过宿主机的 ip 和端口直接访问容器?
解决:端口映射

端口映射图示

在这里插入图片描述

Docker网络的2种实现方式

  1. 端口映射
  2. 网络模式

端口映射:将容器内服务端口与宿主机端口关联在一起,通过宿主机ip:宿主机端口port达到访问容器服务

  1 # 默认随机映射
  2 docker run -P <image_name>
  3 
View Code

说明:

  • -P指容器应用 port 随机映射到宿主机上的 port
  • 生产场景一般不使用随机映射,优点是由 docker 分配,宿主机端口不会冲突
  1 # 指定端口映射
  2 docker run -p ip:port:80 <image_name>
  3 
View Code

说明:

  • 指定端口映射,在标准化场景下使用频率高
  • 宿主机 ip 不写表示 0.0.0.0 ,宿主机 port 不写表示随机端口,容器 port 必须指定

网络模式:借助于独立的 docker 网卡功能实现访问容器服务的效果

网络模型分为

  • bridge模式
  • host模式
  • none模式

bridge模式

Docker的默认模式,它会在docker容器启动时候,自动配置好自己的网络信息,同一宿主机的所有容器都在一个网络下,彼此间可以通信。类似于我们vmware虚拟机的nat模式。

利用宿主机的网卡进行通信,因为涉及到网络转换,所以会造成资源消耗,网络效率会低。

在这里插入图片描述

host模式

鸠占鹊巢,用着宿主机的东西,干自己的事情。容器使用宿主机的ip地址进行通信。

特点:容器和宿主机共享网络

在这里插入图片描述

在这里插入图片描述
none模式

这种模式最纯粹,不会帮你做任何网络的配置,可以最大限度的定制化。
在这里插入图片描述

posted on 2020-10-09 15:37  yycnblog  阅读(174)  评论(0)    收藏  举报

导航