Docker 介绍

fansichao 2021-10-23 16:25:17
Categories: Tags:

Docker 的应用场景 Web

Docker 的优点

docker 启动快,开启一个 container 通常只需要几秒钟,而虚拟机开机至少几十秒;
docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化;
docker 更轻量, docker 重装或者复制到其他机器比虚拟机快很多,重新安装 docker 容器只需要几十秒种,而虚拟机至少需要几分钟;并且 dockers 的 image 文件导出占用只有几百兆,但是虚拟机的镜像包往往有几个 G; 2.缺点

docker 无法对外开放所有端口,docker 只能对宿主机和同宿主机的 docker 开放所有端口,其他机器访问 dockers 需要通过宿主机进行端口转发,而不能像虚拟机一样通过 IP 访问;
docker 默认安装系统包较少,默认安装的虚拟机往往字段一些常用的系统包,但是 docker 很多常用的包都没有(比如 docker 下 centos7 默认是没有 ip 命令的,也不支持 ssh 登陆);

Docker 的主要用途

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构

https://blog.csdn.net/u013007900/article/details/62219169
https://blog.csdn.net/xiangxizhishi/article/details/79441391

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类

Docker 术语

集群
一个集群指容器运行所需要的云资源组合,关联了若干服务器节点、负载均衡、专有网络等云资源。
节点
一台服务器(可以是虚拟机实例或者物理服务器)已经安装了 Docker Engine,可以用于部署和管理容器;容器服务的 Agent 程序会安装到节点上并注册到一个集群上。集群中的节点数量可以伸缩。
容器
一个通过 Docker 镜像创建的运行时实例,一个节点可运行多个容器。
镜像
Docker 镜像是容器应用打包的标准格式,在部署容器化应用时可以指定镜像,镜像可以来自于 Docker Hub,阿里云容器 Hub,或者用户的私有 Registry。镜像 ID 可以由镜像所在仓库 URI 和镜像 Tag(缺省为 latest)唯一确认。
编排模板
编排模板包含了一组容器服务的定义和其相互关联,可以用于多容器应用的部署和管理。容器服务支持 Docker Compose 模板规范并有所扩展。
应用
一个应用可通过单个镜像或一个编排模板创建,每个应用可包含 1 个或多个服务。
服务
一组基于相同镜像和配置定义的容器,作为一个可伸缩的微服务。
关联关系
关联关系

镜像:用来启动容器的只读模板,是容器启动所需的 rootfs,类似于虚拟机所使用的镜像。

容器:Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

镜像是容器的基础,可以简单的理解为镜像是我们启动虚拟机时需要的镜像,容器时虚拟机成功启动后,运行的服务。

其他模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
其他模块
使用xshell登录docker -- 方式1 进入docker虚拟机
ssh 192.168.99.100 # docker的IP ,通过查看docker虚拟机的ip登入docker界面
用户名默认是: docker
密码默认: tcuser
端口: 22

# 涉及安装openssh-server
http://blog.csdn.net/vincent2610/article/details/52490397
yum install -y openssh-server
vi /etc/ssh/sshd_config
将PermitRootLogin的值从withoutPassword改为yes
登出容器,并将容器保存为新的镜像。
关闭原有容器,用新镜像生成新的容器
使用xshell登录docker -- 方式2 docker进入容器
1.安装配置好sshd,并进入后重启服务。
2.docker run 通过 -p 50001:22,将22端口映射到50001
3.打开cmd,查看windwosIP,例如 192.168.43.25
4.ssh 192.168.43.25 50001
或者 ssh 192.168.43.25 -p 50001
即可登录进入容器中


配置容器系统参数 - 需要从docker上配置
# sysctl: setting key "vm.max_map_count": Read-only file system 问题
参考链接: https://stackoverflow.com/questions/41064572/docker-elk-vm-max-map-count
说明: 由于docker是最高层级,容器是最低层级,部分系统参数需要从docker中修改,否则权限不足
解决方法:
docker-machine create -d virtualbox default # 创建默认虚拟机,涉及需要开启windows功能 Hyper-V
docker-machine start 机器名称 # 出现蓝屏问题,暂时未解决 PASS
docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
配置容器系统参数 - 需要从docker上配置 -- 问题1: 登陆docker界面,但是docker中virtualbox不存在。

# 查看已有的docker-machine机器名称
docker-machine ls
# 进入docker
docker-machine ssh 机器名称ID


错误: Error: No machine name(s) specified and no "default" machine exists
错误原因: 本机没有machine,需要创建
# 创建docker机器
docker-machine create -d virtualbox default 机器名称

错误: Error with pre-create check: "This computer is running Hyper-V. VirtualBox won't boot a 64bits VM when Hyper-V is activated. Either use Hyper-V as a driver, or disable the Hyper-V hypervisor. (To skip this check, use --virtualbox-no-vtx-check)
错误原因: docker的virtualbox和已有的虚拟机VMware或virtualBox冲突
参考链接: http://blog.csdn.net/qwsamxy/article/details/50533007/
解决方法:
bcdedit /set hypervisorlaunchtype off
bcdedit /set hypervisorlaunchtype auto


bcdedit /copy {current} /d "Windows 10 (开启 Hyper-V)"
bcdedit /set {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} hypervisorlaunchtype auto

![ce8948b05eeb29c99a714e80749170f0.png](en-resource://database/14842:0)




切换用户执行脚本
su - test -c "pwd"
删除images后,释放空间: (会删除未使用的的容器和已删除的镜像-慎重)
docker system prune -a




## docker-ce容器管理页面

参考链接: https://www.cnblogs.com/myzony/p/9071210.html

pass
CentOS7可用?

docker load & docker import 的区别

docker save 对应 docker load

docker export 对应 docker import