学习的视频地址: https://www.bilibili.com/video/BV1og4y1q7M4
Docker
Docker 为什么要学它
- 高级工程师必备
- DevOps开发模式
学前准备:
- Linux(必备)
- SpingBoot
Docker 学习
学习路线
- Docker 概述
- Docker 安装
- Docker 命令
- 镜像命令
- 容器命令
- 操作命令
- … .
- Docker 镜像
- 容器数据卷
- DockerFile
- Docker 网络原理
- IDEA整合Docker
上面这些对于一个开发者一家够用了
- 集群管理:Docker Compose
- 集群管理:Docker Swarm(简化版的k8s)
- Ci\CD Jenkins
下面才是考验功底的
Docker概述
Docker为什么出现?
一款产品:
开发:上线 两套环境!应用环境,应用配置!
开发——>运维 问题:在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大? 环境配置是十分的麻烦,每一个机器要部署环境(集群Redis、ES、Hadop…)!费时费力。
发布一个项目(jar + (Redis MySQL jdk ES)),项目能不能都带上环境安装包! 之前在服务配置一个应用的环境Redis MySQL jdk ES Hadop,配置超麻烦了,不能够跨平台。 Windows,最后发布到Linux!
传统:开发jar,运维来做!
现在:开发打包部署上线,一套流程做完!
java — apk — 发布(应用商城) —张三使用apk — 安装即可用! java — jar(环境) — 打包项目带上环境(镜像) — (Docker 仓库:商店) — 下载我们发布的镜像 —直接运行即可!
Docker给以上的问题,提出了解决方案!https://www.docker.com/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52BYEP-72)(docker学习笔记.assets/image-042809.png)]
Docker的思想就是来自于集装箱 JRE --多个应用(多个端口冲突)–原来都是交叉的! 隔离:Docker核心思想!打包装箱!每个箱子是相互隔离的。 水果 生化武器 Docker 通过隔离机制,可以将服务器利用到极致!
Docker的历史
历史:
2010年,几个搞it的年轻人,就在美国成立了一家公司dotCloud
做一些pass的云计算服务!LXC 有关的容器技术(pass:is基础设计服务,平台服务,以及最终的应用级服务、软件服务)
他们将自己的技术(容器化技术)命名 就是Docker!
Docker 刚刚诞生的时候,没有引起行业的注意!dotCloud,就活不下去!
开源
开源代码!
2013年,Docker开源!
Docker越来越多的人发现了Docker的优点!火了,Docker每个月都会更新一个版本
2014年4月9日,Docker1.0发布!
在容器技术出来之前,我们都使用虚拟机技术!
虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出一台或多台电脑!笨重!
虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
vm:linux centos 原生镜像(一台电脑!)隔离,需要开启多个虚拟机! 几个G 几分钟 Docker:隔离,镜像(最核心的环境 4m + jdk + mysql )十分的小巧,运行镜像就可以了!小巧! 几个m kb 秒级启动!
讯享网
聊聊Docker
Docker是基于GO语言开发的!开源项目!
官网:https://www.docker.com/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t03WJLr2-73)(docker学习笔记.assets/image-.png)]
文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/
Docker能做什么
kernel:内核
Lib:运行所需要的库
之前的虚拟机技术
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAeU10Cl-75)(docker学习笔记.assets/image-.png)]
虚拟机技术的缺点:
1、资源占用十分多
2、冗余步骤多
3、启动很慢
容器化技术
容器化技术不是模拟一个完整的操作系统(每个容器都是个独立的个体)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7bzu68QX-75)(docker学习笔记.assets/image-.png)]
比较Docker和虚拟机技术的不同:
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后再这个系统上安装和运行软件
- 容器内的应用直接运行再宿主机的内容,容器时没有自己的内核的,也没有虚拟我i们的硬件,所以轻巧了
- 每个容器间时相互隔离,每个容器内都有一个属于自己的文件系统互不影响。
DevOps(开发\运维)
应用更快捷的交付部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布到测试,一键运行
更便捷的升级和扩缩容
使用了Docker之后,我们部署应用和搭积木一样!
项目打包为一个镜像,扩展 服务器A! 服务器B!
更简单的系统运维
在容器化之后,我们的开发,测试环境都在高度一致的.
更高效的计算机资源利用
Docker是内核级别的虚拟化,可以再一个物理机上运行很多容器实例!服务器性能可以被压榨到极致!
Docker安装
Docker的基本组成
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GENqfIvn-76)(docker学习笔记.assets/image-.png)]
镜像(image):
Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的).
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的.
启动,停止,删除,基本命令!
仓库(repository):
仓库就是存放镜像的地方!
仓库分为共有仓库和私有仓库!
Docker Hub(默认是国外的)
阿里云…都有容器服务器(配置镜像加速!)
安装Docker
环境准备
- 需要会一点点的Linux的基础
- CenOS7
- 我们使用Xshell连接远程服务器进行操作
阿里云服务器的购买
- 入口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxfb58ci-78)(docker学习笔记.assets/购买服务器的入口.png)]
- 选择自己需要的服务器类型(看经济情况和使用场景)
2.1修改阿里云连接服务器的密码设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXvi5raM-79)(docker学习笔记.assets/修改阿里云连接服务器的密码设置.png)]
- 新增或编辑端口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRZcLiAt-80)(docker学习笔记.assets/新增或编辑端口.png)]
- 容器加速的配置
4.1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-41GY0b52-82)(docker学习笔记.assets/容器加速的配置地方1.png)]
4.2
查看环境
讯享网# 系统内核是3.10以上 [admin@localhost /]$ uname -r 2.6.32-642.el6.x86_64
# 系统版本 [root@localhost ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
帮助文档:
讯享网# 1、卸载旧的旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 2、需要的安装包 yum install -y yum-utils # 3、设置镜像的仓库 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 默认是从国外的!比较慢 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 建议用国内阿里云的,比较快 # 更新yum软件包索引 yum makecache fast # 4、安装docker docker-ce 社区 ee 企业版 yum install docker-ce docker-ce-cli containerd.io # 5、启动docker systemctl start docker # 6、使用docker version
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ch7LwrtB-83)(docker学习笔记.assets/image-.png)]
# 7.测试hello -world docker run hello-world
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1gpPIAB-84)(docker学习笔记.assets/image-.png)]
讯享网# 8、查看一下下载的这个hello-world镜像 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 8 months ago 13.3kB
了解:卸载docker
# 1、卸载依赖 yum remove docker-ce docker-ce-cli containerd.io # 2、删除资源(要谨慎) rm -rf /var/lib/docker # /var/lib/docker docker的默认工作路径!
1、登录阿里云找到容器服务,并找到镜像加速地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uFbBTr3u-85)(docker学习笔记.assets/image-.png)]
2、配置使用
讯享网sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://l9bydpdt.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
回顾Hello-World执行流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJoIC9J5-86)(docker学习笔记.assets/image-.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gbI2MMK2-87)(docker学习笔记.assets/image-.png)]
Docker底层原理
Docker是什么工作原理
Docker是一个Client - Server结构的系统,Docker的守护进行运行在主机上。通过Socket从客户端访问!
DockerServer接收到Docker-Client的指令,就会执行这个命令!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbXDQRZW-88)(docker学习笔记.assets/image-000844.png)]
备注:Linux守护进程
守护进程是一个在后台运行并且不受任何终端控制的进程。Unix操作系统有很多典型的守护进程(其数目根据需要或20—50不等),它们在后台运行,执行不同的管理任务。
用户使守护进程独立于所有终端是因为,在守护进程从一个终端启动的情况下,这同一个终端可能被其他的用户使用。例如,用户从一个终端启动守护进程后退出,然后另外一个人也登录到这个终端。用户不希望后者在使用该终端的过程中,接收到守护进程的任何错误信息。同样,由终端键人的任何信号(例如中断信号)也不应该影响先前在该终端启动的任何守护进程的运行。虽然让服务器后台运行很容易(只要shell命令行以&结尾即可),但用户还应该做些工作,让程序本身能够自动进入后台,且不依赖于任何终端。
守护进程没有控制终端,因此当某些情况发生时,不管是一般的报告性信息,还是需由管理员处理的紧急信息,都需要以某种方式输出。Syslog 函数就是输出这些信息的标准方法,它把信息发送给 syslogd 守护进程。
Docker为什么比VM快?
1、Docker有着比虚拟机更少的抽象层。
2、Docker利用的是宿主的内核,vm需要Guest OS。
- 如果要在vm上面跑两个服务,就需要虚拟两个centos出来
- docker是直接在主机上安装docker engine服务,然后实例镜像,产生容器(每一个容器都是一个小的linux系统)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3sKUE7J-89)(Docker学习笔记.assets/image-.png)]
所以说,新建一个容器的时候,docker不需要像虚拟机一样加载操作系统内核,避免引导。虚拟机是加载Guest OS,分钟级别,而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtfuzT2B-90)(docker学习笔记.assets/image-.png)]
Docker的常用命令
帮助命令
docker version # 显示docker的版本信息 docker info # 显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help # 帮助命令
镜像命令
docker images 查看所有本地主机的镜像
讯享网[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 8 months ago 13.3kB # 解析 REPOSITORY 镜像的仓库源 TAG 镜像的标签 IMAGE ID 镜像的id CREATED 镜像的创建时间 SIZE 镜像的大小 # 可选项 --all , -a # 列出所有镜像 --quiet , -q # 只显示镜像的id
docker search 查找镜像
NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 9822 [OK] mariadb MariaDB is a community-developed fork of MyS… 3586 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 719 [OK] # 可选项,通过过来搜索 --filter=STARS=3000 # 搜素出来的镜像就是STARS大于3000的 [root@yebin ~]# docker search mysql --filter=STARS=3000 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 9822 [OK] mariadb MariaDB is a community-developed fork of MyS… 3586 [OK]
docker pull 下拉镜像
讯享网# 下载镜像,docker pull 镜像名[:tag] [root@yebin ~]# docker pull mysql Using default tag: latest # 如果不写tag,默认就是latest latest: Pulling from library/mysql bf: Pull complete # 分层下载,dockerimages的核心,联合文件系统 a9871: Pull complete 938e3e06dac4: Pull complete ea28ebf28884: Pull complete f3cef38785c2: Pull complete 894fa: Pull complete 1d8a: Pull complete 6cf: Pull complete ff39fdb566b4: Pull complete fffaba: Pull complete 4d34e365ae68: Pull complete 7886ee20621e: Pull complete Digest: sha256:c358e72e100ab493a0304bda35e6f239db2ec8c9bb836d8a427ac34307d074ed # 签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 真实地址 # 等价于它 docker pull mysql docker pull docker.io/library/mysql:latest # 指定版本下载 [root@yebin ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql bf: Already exists a9871: Already exists 938e3e06dac4: Already exists ea28ebf28884: Already exists f3cef38785c2: Already exists 894fa: Already exists 1d8a: Already exists 5f09bf1d31c1: Pull complete 1b6ff254abe7: Pull complete 74310a0bf42d: Pull complete dfd: Pull complete Digest: sha256:da58f943b94721d46e87d5de208dc07302a8b13e638cd1d24285dd6d84 Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7 # 查看本地镜像 [root@yebin ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 718a6da099d8 6 days ago 448MB mysql latest 0d64f46acfd1 6 days ago 544MB hello-world latest bf756fb1ae65 7 months ago 13.3kB
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usiNU5fS-91)(docker学习笔记.assets/image-.png)]
docker rmi 删除镜像
[root@yebin ~]# docker rmi -f IMAGE ID # 删除指定镜像 [root@yebin ~]# docker rmi -f IMAGE ID1 IMAGE ID2 IMAGE ID3 # 删除多个镜像 [root@yebin ~]# docker rmi -f $(docker images -aq) # 删除所有镜像
容器命令
说明: 我们有了镜像才可创建容器,linux,下载一个centos镜像来测试学习
讯享网docker pull centos
新建容器并启动
docker run [可选参数] image # 参数说明 --name=“Name” 容器名字 tomcat01 tomcat02 用来区分容器 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容器的端口 -p 8080:8080 -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 容器端口 -p 随机指定端口 # 测试,启动并进入容器 [root@yebin ~]# docker run -it centos /bin/bash [root@74e82b7980e7 /]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/58531.html