Docker学习小总结
参考
https://www.runoob.com/docker/docker-resources.html
https://docs.docker.com/engine/
https://www.cnblogs.com/jackzz/p/10024043.html
https://www.bilibili.com/video/bv1kv411q7Qc/?spm_id_from=333.788.b_636f6d6d656e74.11
基础概念
图片具体可查看百度云链接:
链接:https://pan.baidu.com/s/14Cu94HRJdNGcmv2tiSRLag
提取码:atb3
复制这段内容后打开百度网盘手机App,操作更方便哦
docker是一个用于开发、发布和运行应用程序的开发平台,可将应用程序与基础架构分开,从而快速交付软件。
借助docker,可以与管理应用程序相同的方式管理基础架构,可利用docker方法来快速交付、测试和部署代码,可大大减少编码和在生产环境中运行代码的延迟。
docker提供松散隔离环境(容器)中打包和运行应用程序的功能,其隔离性和安全性使得可以在给定主机上同时运行多个容器(容器是轻量级的,直接在主机内核中运行即可)
docker通过内核虚拟化技术提供容器的资源隔离与安全保障等功能。由于docker是通过操作系统层的虚拟化实现隔离,所以docker容器在运行的时候,不需要类似虚拟机额外的操作系统开销,提升资源利用率。
docker提供工具和平台管理容器的生命周期:
- 使用容器开发应用程序及其支持组件
- 容器成为分发和测试应用程序的单元
- 准备就绪后可将应用程序作为容器或协调服务器部署到生产环境中。无论生产环境是本地数据中心、云提供商还是二者混合,工作原理同,都是在其中安装docker后部署多个容器,然后在容器上运行打包的应用程序
docker中的容器完全使用沙箱机制,相互之前不会有任何借口,性能开发很低。
docker从17.03版本之后分为CE(Community Edition社区版)和EE(Enterprise Edition企业版),日常使用CE即可
Docker Hub:用于分享、管理Docker容器的Docker SaaS平台
docker使用C/S架构,c与docker守护进程通信,守护进程处理复杂繁重的任务,例如建立、运行、发布docker容器。docker的c(客户端)和守护进程间通过socket/RESTful API通信。
应用场景
- Web应用的自动化打包和发布(打包成镜像+镜像获取)
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他后台应用
- 从头编译或扩展现有的OpenShift或Clout Foundry平台搭建自己的PaaS环境
优点
docker是一个用于开发、交付和运行应用程序的开放平台,可以将应用程序与基础架构分开,从而快速交付软件。
借助docker可以与管理应用程序相同的方式管理基础架构,利用docker快速交付、测试和部署代码,可大大减少编写代码和在生产环境中运行代码之间的延迟。
- 快速一致交付应用程序
- 允许使用容器在标准化环境中工作,从而简化开发的生命周期
- 响应式部署和扩展
- docker是基于容器的平台,允许高度可移植的工作负载
- 在同一硬件上运行更多的工作负载
- docker适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情
docker Vs. VM
类别 | docker | KVM/OpenStack |
---|---|---|
部署难度 | 非常简单 | 组件多,部署复杂 |
启动速度 | 秒级 | 分钟级 |
镜像体积 | MB级别 | GB级别 |
管理效率 | 简单 | 组件相互依赖,管理复杂 |
隔离性 | 高 | 彻底隔离 |
管理效率 | 单进程 | 完整的系统管理 |
网络连接 | 较弱 | 可借助Neutron灵活组件各类网路架构 |
基本组件
docker包括三个基本概念:镜像image、容器container、仓库repository
镜像 image
image相当于一个root文件系统,容器运行的只读模板,每个镜像有一系列的层layers组成。
Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
容器 container
image和container的关系类似类和实例(class和new xxx()),镜像是静态的定义,容器是镜像运行的实体。
docker容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的容器可以被创建、启动、停止、删除、暂定等。docker容器是docker的运行部分。
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为 容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。
所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
仓库 repository
仓库课可以看成是一个代码控制中心,用来保存镜像,可以理解为代码控制中的代码仓库。
Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。
安装部署
1.查看系统版本内核 3.0以上最好
uname -r
2.删除旧版本docker
yum remove docker
3.安装需要的安装包
yum install -y yum-utils
4.镜像仓库设置为国内的
yum-config-manager
–add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
报错:
查看python
修改/usr/bin/yum-config-manager和/usr/bin/yum文件,修改首行python版本为2.6
重新设置镜像仓库,成功
5.更新yum软件包索引
yum makecache fast
6.安装docker相关的docker -ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io
出错的话:
如果下载不下来,手动下载:
拉取rpm包
wget
http://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7/Packages/docker-engine-17.03.0.ce-1.el7.centos.x86_64.rpm
安装rpm包
yum install docker-engine-17.03.0.ce-1.el7.centos.x86_64.rpm
验证docker版本确认安装成功
docker --version
6.启动docker
systemctl start docker
7.使用docker version查看是否安装成功
docker version
8.测试一下
docker run hello-world
9.查看一下下载的镜像
docker images
10.卸载依赖
yum remove docker-ce docker-ce-cli container.io
11.删除资源
rm -rf /var/lib/docker
/var/lib/docker为Docker的默认工作路径
docker使用
注意docker命令都是只能在主机上运行,不能在容器内部运行,即进入容器之后就是一个新的独立环境,使用其各自的命令即可。(例如进入一个centos容器中,使用linux正常命令即可)
docker允许在容器中使用docker run
命令运行应用程序
也可以直接运行docker的hello-world镜像,系统会先在宿主机上找镜像是否存在,如果没有的话会先从镜像仓库Docker Hub中拉取hello-world镜像然后构造成容器。
-t:在心容器中制定一个伪终端/终端
-i:允许对容器内的标准输入(STDIN)进行交互
进入容器后可使用cat /proc/version
查看当前系统的版本信息
可通过exit
退出当前容器
确认当前有容器在运行中,使用docker ps
输出参数介绍:
CONTAINER ID:容器ID
IMAGE:使用的镜像
COMMAND:启动容器时运行的命令
CREATED:容器的创建时间
STATUS:容器状态
- created: 已创建
- restarting: 重启中
- running: 运行中
- removing: 迁移中
- paused: 暂停
- exited: 停止
- dead: 死亡
PORTS:容器的端口信息和使用的连接类型(tcp/udp)
NAMES:自动分配的容器名称
容器使用
宿主机内使用docker logs xxxx容器
查看容器内的标准输出
使用docker stop xxx容器
停止容器
exit是在某个容器中输入exit退出容器进入到上一层,docker stop是在宿主机上运行
使用docker start xx容器CONTAINER ID/NAMES
启动容器
使用docker
查看docker客户端的所有命令选项
使用docker command --help
具体查看某条command的使用方法
运行并进入容器:docker run -it -P 容器ID /bin/bash
-P:将容器内部使用的网络端口随机映射到使用的主机上
后台运行容器不直接进入容器:docker run -itd 容器名 /bin/bash
后续进入通过docker exec -it 容器ID /bin/bash
导出容器快照:docker export 容器ID > 文件名
导入容器快照:cat 文件名 | docker import - 镜像名
删除容器:docker rm -f 容器ID
查看容器详情:docker info
镜像使用
当运行容器时,使用的镜像本地不存在就会自动从默认的Docker Hub镜像仓库中下载。镜像仓库可以进行自定义配置
yum-config-manager
–add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看系统镜像:docker images
REPOSITORY: 镜像的仓库源
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,使用REPOSITORY:TAG定义不同镜像
查找镜像:docker search 镜像名
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像描述
OFFICIAL: 是否为docker官方发布
stars:点赞
AUTOMATED:自动构建
拉取镜像:docker pull 镜像名
使用镜像:docker run 镜像名
删除镜像:docker rmi 镜像名
创建镜像:当从docker仓库中拉取的镜像不再满足需求的时候,可以通过两种方式对镜像进行更改:
从已创建的容器中更新这个镜像并提交
1.1 使用镜像创建容器
1.2 在容器中使用apt-get udpate
更新或其他更新操作
1.3 exit退出此容器,使用docker commit -m="提交的描述信息" -a="镜像作者" 容器ID 目标镜像名
提交容器副本
1.4 使用docker images查看新镜像
1.5 使用新镜像启动一个容器(注意tag勿忘)
使用Dockerfile指领创建一个新的镜像
使用docker build
创建新的镜像
创建Dockerfile文件用一组指令构建镜像
容器连接
容器中如果运行网络应用的话,可使用-p参数指定端口映射,使得外部也可访问这些应用
-P:容器内部端口随机映射到主机的高端口
-p:容器内部端口绑定到指定的主机端口
docker port 容器名
命令:查看端口的绑定情况
多个容器互连推荐使用docker-compose
参考:
https://www.cnblogs.com/jackzz/p/10024043.html
仓库管理
登录docker hub:docker login
退出:docker logout
推送镜像到自己的仓库中:docker push 镜像名
docker compose
compose:用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
compose使用的三个步骤:
- 使用Dockerfile定义应用程序的环境
- 使用docker-compose.yml定义构成应用程序的服务,这样他梦珂在隔离环境中一起运行
- 执行
docker-compose up
命令启动并运行整个应用程序
centos on docker
1.拉取指定版本的 CentOS 镜像
docker pull centos:centos7
2.查看本地镜像
docker images
3.运行容器,并且可以通过 exec 命令进入 CentOS 容器
docker run -itd --name centos-test centos:centos7
docker exec -it centos-test /bin/bash
4.通过 docker ps
命令查看容器的运行信息
hbase on docker
单机版
参考:
https://blog.csdn.net/boling_cavalry/article/details/78041775
集群版
参考:
https://blog.csdn.net/boling_cavalry/article/details/78041811
docker-compose下载:
wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64
rename docker-compose-Linux-x86_64 docker-compose docker-compose-Linux-x86_64
chmod +x /usr/local/bin/docker-compose
再通过docker-compose version命令进行查看
如果有权限问题:进行赋权 chmod a+wrx xxx文件
如果zookeeper集群中有节点启动失败显示
ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.6/bin/…/conf/zoo.cfg Error
检查创建数据目录是否正确,zoo.cfg配置文件里dataDir指定的那个目录下(本参考中配置的是zkdata/myid)
mysql on docker
redis on docker
mongodb on docker
MongoDB默认使用27017端口
前提:虚拟机上安装好Docker
1.搜索mongodb镜像
docker search mongo
2.拉取mongodb镜像
docker pull mongo:lastest
或
docker pull mongo
可以看到镜像是一个层状结构,拉取下载的时候是从底而上依次下载
3.查看已下载的本地镜像
docker images
4.运行容器
# -p 表示指定分配端口号
# -P 表示随机分配端口号
# --name mongo表示运行的容器名
# -i:交互式操作
# -d:后台运行
# -t:终端
docker run -itd --name mongo -p 27017:27017 mongo
5.查看已运行容器的详细信息
docker ps
docker ps -a:查看历史运行容器信息
docker ps -l:查看最近一次运行容器信息
docker ps:查看当前运行容器信息
6.进入容器并设置mongodb容器的用户名和密码
# 命令最后的admin是用户名 密码是123456
docker exec -it mongo mongo admin
7.连接数据库
结果返回1表示连接成功
8.查看数据库的用户
db.system.users.find()
9.插入数据并查询数据
demo是一个集合
Docker学习小总结相关推荐
- Docker学习四:Docker 网络
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
- docker学习笔记(四)使用docker搭建环境
参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(二)docker常用命令 docker学习笔记(三)镜像 docker学习笔记 ...
- docker学习笔记(二)docker常用命令
参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(三)镜像 docker学习笔记(四)使用docker搭建环境 docker学习 ...
- docker学习笔记(三)镜像
参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(二)docker常用命令 docker学习笔记(四)使用docker搭建环境 ...
- docker学习笔记(五)如何创建自己的阿里云镜像仓库(这是2021版的阿里云教程)
参考:汤小洋老师的教学视频 docker学习笔记(一)[docker 介绍.卸载.安装.配置加速] docker学习笔记(二)docker常用命令 docker学习笔记(三)镜像 docker学习笔记 ...
- Docker学习(2)-Docker基础1
Docker学习(1)-Docker简介 1.2 Docker安装及基础命令介绍 https://www.docker.com/#Docker官网 Docker 运行系统 OS 版本选择: Docke ...
- 狂神docker学习笔记
狂神docker(基础+进阶)-学习笔记 狂神说docker 三体:弱小和无知不是生存的障碍,傲慢才是. 从基础到进阶,每个视频都有认真看,做笔记和练习,以此篇分享整个学习过程 画图网页 docker ...
- 狂神 Docker学习笔记 从基础到进阶 一步到位
Docker 学习笔记 感谢狂神的分享.附上B站视频链接. https://www.bilibili.com/video/BV1og4y1q7M4?from=search&seid=92256 ...
- docker 学习记录1
一. 1. Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到 ...
最新文章
- [转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率
- Asp.net MVC 学习之路-002
- xps文档打印后winform界面文字丢失
- LogStash 中字段的排除和数据的排除
- postgresql 安装_CentOS7安装使用PostgreSQL数据库
- Windows Containers 大冒险: 加速
- 针对开发人员的Microsoft SQL Server元数据
- luogu_P3345[zjoi2015]幻想乡战略游戏
- JavaEE Tutorials (25) - 使用Java EE拦截器
- PHPstrom的Disable Power Save Mode
- Notification通知
- python发起http请求(httplib)
- Master PDF Editor for Mac(PDF文档编辑软件)
- Shell中的Quoting
- python 穷举法 算24点(史上最简短代码)
- cad2023三维立体图形图纸工程设计绘图软件Autodesk AutoCAD 2023 中文
- PTES标准中的渗透测试阶段
- 微信内置浏览器不能下载应用文件的解决方案-微信跳转手机默认浏览器
- 大数据实训整体解决方案
- matlab做拉普拉斯反演,拉普拉斯变换性质和反演.ppt
热门文章
- 【TaaS】什么是测试即服务?
- 智能手环产品分析(资料来源网上,自己总结)
- 【c++】2.处理数据
- 再读Golang中的异常处理
- 宝宝专业智力测试软件,0-3岁6个月婴幼儿智能综合格塞尔Gesell智力测试工具包及软件...
- 智慧城市井盖监测系统中的RTU应用
- [django]django+post+ajax+highcharts使用方法
- 如何加速AI落地?第四范式提供“开箱即用”集成系统
- 在线五子棋对战测试用例
- Filenet基金会关于场外交易FN风险提示公告