docker学习汇总
![](https://img2020.cnblogs.com/blog/2156747/202011/2156747-20201114102159541-1062531879.jpg)
学习思路:
l Docker是什么?
l Docker有什么特点?
l Docker 怎么用?
l 不论什么知识框架都要以官方文档为主
一、认识docker
Docker的概念
Docker是一个开源平台,它包含容器引擎和Docker Hub注册服务器。
· Docker容器引擎:该引擎可以让开发者打包它们的应用和依赖包到一个可移植的容器中,然后将其发布到任何流行的Linux机器上。
· Docker Hub注册服务器:用户可以在该服务器上创建自己的镜像库来存储、管理和分享镜像。利用Docker,可实现软件的一次配置,处处运行。
Docker引擎可以将任何应用打包成一个轻量的、易移植的、隔离的容器。
通过标准的操作系统接口使得应用可以在各种运行环境下保持一致。
容器和虚拟机
Docker是容器的一种,容器是一种轻量级的虚拟技术,和容器对应的更为重量级的虚拟技术是虚拟机。
虚拟机是一种基于硬件的虚拟技术,它采用指令级的虚拟,完全虚拟一整套物理主机,包含CPU、内存、磁盘、网卡等设备,给用户呈现的就是一个物理主机的特性。用户可以在虚拟机里安装各种各样的操作系统,一切操作都看起来和真机一样。(第一类虚拟机管理程序,如Virtualbox和VMWare Workstation,它运行在操作系统之上。第一类虚拟机管理程序,如Xen,它直接运行在裸机上。)
容器是一种基于操作系统的虚拟技术,它运行在操作系统之上的用户空间,所有的容器都共用一个系统内核,甚至是公共库,容器引擎提供进程级别的隔离,让每一个容器都想运行在单独的系统之上,但又能共享很多底层资源。比起虚拟机,容器更为轻量、快速、易于管理。
除了Docker,常见的容器还有Solaris Zone、BSD jails、OpenVZ和LXC等。
![](https://pic2.zhimg.com/v2-edbb2cdfba296c13a719677affa44535_b.png)
更为详细的对比如下表:
![](https://pic1.zhimg.com/v2-c6e5f3bb5d926b5318e1efc39ff0f370_b.png)
Docker与容器
Docker早期是基于LXC(Linux Containers,LXC)4容器的,但是其具有很多LXC这类容器所没有的新特性。
· 跨平台的可移植性。Docker定义了一种统一标准的打包格式,将应用及其依赖打包进单个镜像中,该镜像可以在任何Docker可运行的机器间便携传输,并且在不同机器上,Docker隔离了应用与平台的直接联系,对配置进行了抽象,使得在任何平台上应用的运行环境都一样。LXC的配置却不是可移植的,它依赖于某台具体的机器。
· 面向应用。Docker是为优化应用部署而诞生的,LXC则是面向机器的,这是两者设计哲学上的不同。Docker面向应用的哲学体现在API、用户接口以及文档等各个方面,Docker都是为了更简单地做事。而LXC则是更关注于使用更少地CPU、更少地RAM,成为一个更轻量地机器。
· 版本控制。Docker地版本控制和git工具非常类似,Docker可以跟踪一个容器地版本信息,查看版本差异,提交和回滚版本等。所有地版本信息都将被记录,这样可以清晰地看到一个应用服务器地更改历史。
· 组建复用。Docker容器以组件式搭建,可以利用一个基础镜像构建更多的应用容器。
· 共享性。Docker用于一个公共的注册服务器。开发者上传它们的镜像,我们可以通过这些共享的镜像来进一步定制自己的镜像。Docker的注册服务器本身也是一个开源项目,所以任何人都可以下载源码后在自己的网络中部署自己的注册服务器。
· 工具生态系统。Docker提供了API以供自动化创建和部署容器,而越来越多的工具加入到Docker之中来扩展它的能力,Docker已经形成了自己的软件工具生态圈。
Docker的组件
Docker采用的是C/S架构,Docker客户端,即Docker可执行程序,可以通过命令行和API的形式与Docker守护程序进行通信,Docker守护程序提供Docker服务。
Docker的特性
Docker是利用容器技术实现的一种轻量级的虚拟技术。
· 隔离性:Docker采用libcontainer作为默认容器,取代了之前的LXC。libcontainer的隔离性主要是内核的命名空间来实现的,具体有pid、net、mnt和uts等命名空间,它们将容器的线程、网络、消息、文件系统和主机名进行隔离。
· 可度量性:在Docker中,主要通过cgroups(控制组)来控制资源的度量和分配。
· 移植性:Docker利用AUFS来实现对容器的快速更新。AUFS是一种支持将不同目录挂载到同一虚拟文件系统下的文件系统,支持对每个目录的读写权限管理。另外,AFUS具有层的概念,每一次修改都是在已有的只写层进行增量修改,修改内容将形成新的文件层,而不会影响原有的层。采用AUFS作为Docker容器的文件系统,具有如下好处
· 节省存储空间:多个容器可以共享一个基础镜像存储
· 快速部署
· 升级方便
· 增量修改
· 安全性
有关docker其他更详细的概述请结合docker官网学习
二、使用docker
1 安装docker
![](https://pic3.zhimg.com/v2-b73156d624de14b07b2cfe77a70c4646_b.png)
我这里以Centos 为例:
前提条件
操作系统要求
要安装Docker Engine,您需要一个CentOS 7的维护版本。不支持或未测试存档版本。
该centos-extras库必须启用。默认情况下,此存储库是启用的,但是如果已禁用它,则需要 重新启用它。
overlay2建议使用存储驱动程序。
第一步:Yum安装gcc相关环境
yum -y install gcc
yum -y install gcc-c++
第二步:卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
第三步:安装yum-utils软件包
yum install -y yum-utils
第四步:设置镜像仓库。
#默认的
yum-config-manager \
--add-repo \
#正确使用的国内的
yum-config-manager \
--add-repo \
第五步:更新yum软件包索引
yum makecache fast
第六步:安装DOCKER引擎
安装最新版本的Docker Engine和容器,或转到下一步以安装特定版本:
yum install docker-ce docker-ce-cli containerd.io
第七步:启动Docker
systemctl start docker
第八步:检查docker是否安装成功。
docker version
docker run hello-world
docker images
此命令下载测试图像并在容器中运行它。容器运行时,它会打印参考消息并退出。
Docker Engine已安装并正在运行。您需要使用sudo来运行Docker命令。继续进行Linux后安装,以允许非特权用户运行Docker命令以及其他可选配置步骤。
2 卸载Docker
卸载Docker Engine,CLI和Containerd软件包:
yum remove docker-ce docker-ce-cli containerd.io
主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:
rm -rf /var/lib/docker
您必须手动删除所有已编辑的配置文件。
三、docker安装 MySQL
首先你对应的服务器要有docker引擎以及相关配置
首先下载自己需要的MySQL版本镜像
第一步:docker pull mysql:5.7
![](https://pic4.zhimg.com/v2-fd7233e7d22c12497294b80f1554a62b_b.png)
第二步:启动MySQL
启动命令:docker run -di --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
![](https://pic1.zhimg.com/v2-077e3cf2245e5491cafdb3d104c002b0_b.png)
以上启动命令解释
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
-e:环境配置
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
以上数据卷挂载 先没有做容器内部文件与Linux文件的挂载映射
![](https://pic4.zhimg.com/v2-4bf55c2b4b861ca358b6e64d0e19bd1f_b.png)
以上的MySQL容器已经创建成功
第三步:测试连接
![](https://pic4.zhimg.com/v2-806fa725c4e83920a6148de9183b917f_b.png)
以上已经进入容器内部
![](https://pic1.zhimg.com/v2-0deb7fd34636cdf9078a446260196d3c_b.png)
第四步:Navicat测试连接
![](https://pic3.zhimg.com/v2-cdc331d2d5aa918924ffcb89f1f605da_b.png)
![](https://pic4.zhimg.com/v2-95aee230e4bcfadff9a1b2eb4a301ccf_b.png)
![](https://pic1.zhimg.com/v2-9165a013710ce753a67ded4a0ff71e2c_b.png)
![](https://pic2.zhimg.com/v2-b8916ee748652e55342cebd924875be9_b.png)
初次安装可能因为权限不足不让远程访问:必须进容器内容设置并刷新权限:
mysql授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
刷新权限:
flush privileges;
三、docker-compose部署项目
首先服务以上要有安装docker-compose以及相关配置:
首先手写一个springboot项目(集成Redis 计数器)
打开IDEA ->File->new->project
第一步:项目准备
![](https://pic1.zhimg.com/v2-815fd8598ecde4f84715ac605232b978_b.png)
下一步
![](https://pic4.zhimg.com/v2-0637aa9830cf9209ea9679fa5b6baceb_b.png)
下一步
![](https://pic4.zhimg.com/v2-d108eefb6947393cf578414467ca4f13_b.png)
下一步:
![](https://pic2.zhimg.com/v2-dbddf65ce2e9bb42b8d46d3e26961de1_b.png)
配置:application.properties 文件
![](https://pic4.zhimg.com/v2-bc13db9a718fe3f387dc014f8fb3a357_b.png)
编写controller
![](https://pic3.zhimg.com/v2-881ead990265d253a43e12ead06a5dbe_b.png)
编写Dockerfile
![](https://pic4.zhimg.com/v2-5119e2031fabde0dece7716fc0fd2367_b.png)
编写docker-compose.yml
![](https://pic2.zhimg.com/v2-d937e6a24790500aed120a9272b54cdd_b.png)
对于以上的文件如何编写docker-compose官网有详细说明
项目打包:
![](https://pic2.zhimg.com/v2-82d386223ecc766c01c4ab3705ae84c5_b.png)
打包成功:
![](https://pic4.zhimg.com/v2-2c7b47e4f752cfd6aa4222fecae99c23_b.png)
第二步:将打包好的项目放到自己的服务器
我这里用的xftp:
1 首先找一个空的文件夹
![](https://pic2.zhimg.com/v2-e613a599f3b953ab3df3703189694771_b.png)
2 把打包好的项目、dockerfile 、docker-compose.yml 放到新建的目录下
![](https://pic4.zhimg.com/v2-c9545cdfc86e0f852d8af6cacf54eb6b_b.png)
3 去服务器上检查是否把文件上传成功
![](https://pic4.zhimg.com/v2-c9545cdfc86e0f852d8af6cacf54eb6b_b.png)
第三步:启动项目
首先在服务器上要到所放文件的目录下
输入:docker-compose up 或者后台运行:docker-compose up -d
![](https://pic4.zhimg.com/v2-3c45cf4ff7310522ad0e3946723f6207_b.png)
第四步:访问测试
![](https://pic1.zhimg.com/v2-92bd612923e3f5614faa9cdaf0ee11d4_b.png)
希望我以上的docker学习的小小分享,希望能对大家有所帮助,有不到之处请大家批评指正!
古今成大事者,不唯有超世之才,必有坚韧不拔之志!