写点什么

Docker 系列(1)--Docker 原理及安装,java 线程池回收原理

作者:Java高工P7
  • 2021 年 11 月 09 日
  • 本文字数:3654 字

    阅读完需:约 12 分钟

=========================================================================


(1)概念




Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的


Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。非常方便。


(2)架构




一个完整的 Docker 有以下几个部分组成:


  1. DockerClient 客户端

  2. Docker Daemon 守护进程

  3. Docker Image 镜像

  4. DockerContainer 容器



Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker


客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互


(3)特性




  1. Automating the packaging and deployment of


applications(使应用的打包与部署自动化)


  1. Creation of lightweight, private PAAS environments(创建轻量、私密的 PAAS 环境)

  2. Automated testing and continuous


integration/deployment(实现自动化测试和持续的集成/部署)


  1. Deploying and scaling web apps, databases and backend


services(部署与扩展 webapp、数据库和后台服务)


由于其基于 LXC 的轻量级虚拟化的特点,docker 相比 KVM 之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的 PaaS(如 dokku),


构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的 web 应用)。


(4)局限




Docker 是基于 Linux 64bit 的,无法在 32bit 的 linux/Windows/unix 环境下使用


LXC 是基于 cgroup 等 linux kernel 功能的,因此 container 的 guest 系统只能是 linux base 的


隔离性相比 KVM 之类的虚拟化方案还是有些欠缺,所有 container 公用一部分的运行库 网络管理相对简单,主要是基于 namespace 隔离


cgroup 的 cpu 和 cpuset 提供的 cpu 功能相比 KVM 的等虚拟化方案相比难以度量(所以 dotcloud 主要是按内存收费)


Docker 对 disk 的管理比较有限 container 随着用户进程的停止而销毁,container 中的 log 等用户数据不便收集


(5)Docker 和 Vm 区别




1.实现原理不同


VM 通过 Hypervisor 提供基础环境实现虚拟机 Docker 通过 docker


engine 与物理机共享操作系统而不是在向虚拟机一样,完全仿真一个虚拟操作系统,Docker 达到了类似虚拟机的效果,但是又没有虚拟机的开销,它虚拟的层次更加高。Docker 不虚拟机器,仅仅虚拟应用的运行环境



2.使用上的区别



_**Docker 在宿主机器的操作系统上创建 Docker 引擎,直接在宿主主机的操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源,所以操作速度快。


这个其实安装一个 ubuntu 的虚拟机和拉取一个 Docker 的 ubuntu 镜像文件,运行一下就知道了,区别很明显,虚拟机开一下大概得 2 分多钟,而 Docker 只需要 2 秒钟。**_


二:docker 三个特征


===========================================================================


镜像


容器


仓库


docker 实际可以理解为简易版的 linux 系统



容器就是镜像的一个实例



仓库(Repository)是存放镜像的厂所



仓库注册服务器(Registry)放着多个仓库,每个仓库又放着多个镜像,每个镜像又有不同的标签(类似版本号)



仓库分为公开仓库和私有仓库两种形式 最大的公开库是 Docker Hub。(太慢,国外网站) 国内公开仓库包括阿里云,网易云


三、docker 的安装及测试


=============================================================================


部署环境:




[root@a ~]# ping qq.com


PING qq.com (125.39.52.26) 56(84) bytes of data.


64 bytes from no-data (125.39.52.26): icmp_seq=1 ttl=50 time=59.6 ms


64 bytes from no-data (125.39.52.26): icmp_seq=2 ttl=50 time=152 ms


64 bytes from no-data (125.39.52.26): icmp_seq=3 ttl=50 time=210 ms


64 bytes from no-data (125.39.52.26): icmp_seq=4 ttl=50 time=88.2 ms


^C


--- qq.com ping statistics ---


4 packets transmitted, 4 received, 0% packet loss, time 3015ms


rtt min/avg/max/mdev = 59.646/127.784/210.411/58.431 ms


[ro


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ot@a ~]# cat /etc/redhat-release


CentOS Linux release 7.7.1908 (Core)


[root@a ~]# uname -r


3.10.0-1062.el7.x86_64


1、设置 yum 源




[root@a ~]# yum install -y yum-utils


[root@a ~]# yum-config-manager \


--add-repo \


https://download.docker.com/linux/centos/docker-ce.repo


[root@a ~]# yum makecache fast


Docker 安装报错:containerd.io-1.2.13-3.1.el7.x86_64 (docker-ce-stable) 需要:container-selinux >= 2:2.74


解决方案:


[root@a ~]# yum install -y wget


[root@a ~]# wget -O http://mirrors.aliyun.com/repo/Centos-7.repo


[root@a ~]# mv Centos-7.repo /etc/yum.repos.d/


[root@a ~]# yum install epel-release


[root@a ~]# yum install container-selinux


2、安装最新版本的 Docker Engine-Community 和 containerd




[root@a ~]# yum install docker-ce docker-ce-cli containerd.io


...


Installed:


containerd.io.x86_64 0:1.2.13-3.2.el7 docker-ce.x86_64 3:19.03.8-3.el7


docker-ce-cli.x86_64 1:19.03.8-3.el7


Complete!


3、启动服务




[root@a ~]# systemctl start docker


[root@a ~]# docker --version


Docker version 19.03.8, build afacb8b


4、配置镜像加速器




登录阿里云搜素镜像加速器


[root@a ~]# mkdir -p /etc/docker


[root@a ~]# tee /etc/docker/daemon.json <<-'EOF'


{


"registry-mirrors": ["https://..............."]


}


EOF


[root@a ~]# systemctl daemon-reload


[root@a ~]# systemctl restart docker


[root@a ~]# ps -ef |grep docker


root 12225 1 0 08:10 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock


root 12362 1737 0 08:12 pts/0 00:00:00 grep --color=auto docker


5、测试




[root@a ~]# docker run hello-world


Unable to find image 'hello-world:latest' locally


latest: Pulling from library/hello-world


0e03bdcc26d7: Pull complete


Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1


Status: Downloaded newer image for hello-world:latest


Hello from Docker!


This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:


  1. The Docker client contacted the Docker daemon.

  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.


(amd64)


  1. The Docker daemon created a new container from that image which runs the


executable that produces the output you are currently reading.


  1. The Docker daemon streamed that output to the Docker client, which sent it


to your terminal.


To try something more ambitious, you can run an Ubuntu container with:


$ docker run -it ubuntu bash


Share images, automate workflows, and more with a free Docker ID:


https://hub.docker.com/


For more examples and ideas, visit:


https://docs.docker.com/get-started/


6、run 有什么用?




开始>>>docker 在本机中寻找镜像>>>本机是否有该镜像{1.有,以镜像为模板生产容器实例运行 2.没有,去 dockerHub 上找}>>>dockerHub 上能否找到{1.能,下载镜像到本地,以镜像为模板生产容器实例运行 2.不能,返回错误值结束}


7、基础命令



一、帮助命令

1、docker version(查看 docker 基本信息)


[root@a ~]# docker version


Client: Docker Engine - Community


Version: 19.03.8


API version: 1.40


Go version: go1.12.17


Git commit: afacb8b


Built: Wed Mar 11 01:27:04 2020


OS/Arch: linux/amd64


Experimental: false


Server: Docker Engine - Community


Engine:


Version: 19.03.8


API version: 1.40 (minimum version 1.12)


Go version: go1.12.17


Git commit: afacb8b


Built: Wed Mar 11 01:25:42 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 info(查看容器信息)

[root@a ~]# docker info


Client:


Debug Mode: false


Server:


Containers: 1


Running: 0


Paused: 0


Stopped: 1


Images: 1


Server Version: 19.03.8


Storage Driver: overlay2


Backing Filesystem: <unknown>


Supports d_type: true


Native Overlay Diff: true


Logging Driver: json-file


Cgroup Driver: cgroupfs


Plugins:


Volume: local


Network: bridge host ipvlan macvlan null overlay


Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Docker系列(1)--Docker原理及安装,java线程池回收原理