@docker 介绍及教程—概念篇
1. docerk 为什么会出现,为什么那么热门??
a)因为软件部署上线阶段开发环境和配置与实际生产环境与配置不同导致程序无法运行。同时软件版本的迭代,不同版本环境的兼容,都会岛主软件无法运行。
b)热门原因:它提供了一种针对环境及配置的一种标准化解决方案。
c)传统运行的环境需要安装各种软件、各种驱动包,这样配置麻烦、工作量大、同时不能跨平台。移植到相同的服务器也很麻烦。在这个过程难免会有异常发生。
d) docker镜像的设计,使docker打破传统的程序即应用的观念。通过镜像将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运行。
举例:传统的方式:开发有一台系统,上面安装了n个软件,同时还需要进行各类的配置。繁琐、耗时、又没办法标准化。
现在方式:把开发环境做成一个镜像,这个镜像可以快速复制n个副本。
2. docker的理念:
a)docker是基于go语言实现的云开源项目。
b)docker主要的目标是“Build,ship and run any app,anywhere”
翻译过来就是:通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的app(可以是一个web应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
c)解决了运行环境和配置问题软件容器,方便做持续集成并由助于整体发布的容器虚拟化技术。
d)docker三个概念:镜像、容器、仓库 ----docker架构图
e)docker三大要素:
1.镜像(image):镜像就是模板。 镜像就是一个只读模板。镜像可以用来创建docker容器,一个镜像可以创建很多容器。
2.容器(container):容器就是镜像中的一个实例。
docker利用容器独立运行的一个或者一组应用,容器用镜像创建的运行实例。
它可以被启动、开始、停止、删除。每个容器都是相互各类、保证安全的平台。可以把容器看做一个简易版的linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
3.仓库(repository): 仓库是集中存放镜像文件的场所。
仓库和仓库注册服务器是由区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库和私有仓库两种形式。
最大的公开仓库是 docke hub
存放了数量庞大的镜像供用户下载国内的公开仓库包括阿里云、网易云等。建议是用阿里云。
docker daemon 就是daocker与外界通讯的接口。
3. docker能干什么?
a)与虚拟机区别:
1.虚拟机就是带环境安装的一种解决方案。包含环境、软件、硬件的一套模拟系统。
缺点:资源占用多、冗余步骤多、启动慢
虚拟机是分钟级。
容器是秒级。
2.容器虚拟化 (linux容器 简称lxc):
Linux容器不是模拟一个完整的操作系统,对进程进行隔离。没有自己的内核。
容器不需要一整套操作系统,只需要软件工作所需要的软件和配置。
b)那些企业在用: 新浪、美团、蘑菇街等等。。。。。
docker就是缩小版以及精细版的linux系统。
优点:1.快速的应用交付和部署 2.便捷的升级和扩容
3.更简单的系统运维 4、更高效的计算资源利用
4.docker安装 —只列举centos 6.8 其他登录官网查看
a)前提说明
docker支持centos版本
centos 7 64位
centos 6.564位或更高版本
b)前提条件
centos内核要求:centos7 内核3.10以上
centos-6.5 内核要求 2。6.32-431或更高版本
c)查看内核版本:uname -r
查看系统版本:cat /etc/redhat-release
e) 安装流程命令: contos6.8。其它版本参考官网。
1.yum install -y epel-release #(docker使用epel发布,RHEL系的os首先要确保已经持有epel仓库,否则先检查os的版本,然后安装相应的epel包)
2.yum install -y docker-io。 #(正式安装docker io)
3.安装后的配置文件:/etc/sysconfig/docker (其它系统文件。文件存放位置可能不同。参考官方文档)
4.启动docker后台服务:service docker start
5.docker version 验证; (查看docker详细的信息,版本之类的)
-
如何从仓库内下载一个镜像,运行。—阿里云镜像加速
1、访问阿里云网址。 dev.aliyun.com/search.html
2、注册一个阿里云平台的账号。
3、获得加速器地址链接—登陆阿里云开发者平台----获取加速器地址。 (登陆-镜像加速器–选择版本- 根据要求进行修改)
4、配置本机docker运行镜像加速器 (不同系统不同操作方式)
/etc/sysconfig/docker
vim /etc/sysconfig/docker
修改(other_args=“拷贝此处”)
5、重新启动docker后台服务:service docker restart
6、linux系统下配置完加速器需要检查是否生效。
ps -ef|grep docker
(查看加速期地址是否正确) -
启动docker 后台容器(测试运行hello world)
a)docker run
docker run hello-world。(通过docker客户端运行一个hello-world的镜像)
b)run干了什么
先从本地搜索 hello-world镜像,没有从阿里云搜索。
7. docker底层原理
a) docker 是怎么工作的。
docker 是一个client—sercver结构的系统,docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。是一个运行时环境。
b)为什么docker比vm快
docker比虚拟机有更少的抽象层,由于docker不需要hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此cpu、内存利用率上docker将会在效率上有明显优势。
@docker 介绍及教程—命令篇
1. docker基础命令
a)帮助命令
docker verion (自己的验证)
docker info (对docker自己的一个详细描述)
docker help (相当于linux的man ls)
--options。选项。 可以省略
--command docker常用命令
--arg。参数
b)镜像命令
表头解释
【REPOSITORY】. 表示镜像的仓库源
【TAG】镜像的标签
【IMAGE ID】镜像ID
【CREATED】镜像创建时间
【SIZE】。 镜像的大小
1.查询镜像信息
docker image ---列出本地镜像 (加参数-a。列出本地所有镜像)
2.查询网络上镜像 具体到镜像名称
docker search --去docker hub上去查找找相应的镜像 (docker.hub)
举例:docker search -s 30 (docker。命令 search 命令。-s 参数。30 点赞数超过三十)
3.下载镜像
docker pull +镜像名【:tag】--下载镜像 [:tag]等于制定版本。 不加等于最新版。 latest。最新版本。
举例:docker pull tomcat:latest (从阿里云下载tomcat上的最先版本的tomcat镜像)
镜像联合系统。镜像就是一层一层的。
4.删除镜像
docker rmi (镜像名称):latest。 (latest代表是版本号。不写直接是最新的)
强制删除单个镜像。docker rmi -f 镜像名
删除多个镜像: docker rmi -f 镜像名 镜像名 镜像名
删除全部: docker rmi -f $(docker images -qa).
-q. -a 参数
c)容器命令
注:OPTIONS说明(常用):有些事一个减号,有些事两个减号
--name--=“容器新名称”:为容器指定一个名称;
-d:后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p:指定端口映射,有以下四种格式
ip:hostPost:containerPort
ip::containerPort
hostPort:containePort
containerPort
1、新建并启动容器
docker run -it id号或者名称 (生成容器或者实例,并进入)
注:相当于创建容器并登入终端界面
docker ps(查看当前运行的运行的进程)
docker run -it --name 自定义名称 id号或者名称 (--name自定义一个名称)
docker ps -l 查看上一个运行的容器
docker ps -a。查看之前所有运行的容器
docker ps -n 3。查看上3次运行的容器
docker ps -lq。 只显示容器编号
docker run -it --name 自定义名称 镜像名称
2、退出容器
exit 退出关闭容器
ctrl+p+q 退出不关闭
3、启动容器
docker start 容器id
4、重启容器
docker restart 容器id或者名称
5、停止容器
docker stop 容器id或者名称
6、强制停止容器
docker kill 容器id或者容器名称
7、删除已停止的容器
docker rm 容器名称和id
注:rmi。删除镜像
rm: 删除容器
强制删除加参数 -f
8、一次删除多个容器
docker ps -q (当前运行的容器)
docker ps -qa (所有的容器)
docker rm -f$(docker ps -a -q).
d)重要
1、启动守护式容器
docker run -d 容器名称或者id (后台运行此容器)
2.查看容器日志
docker logs -f -t --tail 容器id
注:-t 是加入时间戳
-f 跟随最新的日志打印
–tail 数字 显示最后多少条
4、查看容器内的进程
docker top 容器id
5、查看容器内部细节
docker inspect 容器id
6、进入正在运行的容器并以命令行交互
docker exec -it 容器id (执行命令) —针对这个容器进去执行bashshell的东西。 并没有进去,只是在这个容器执行了这个命令,并在外面返回结果。
docker attach 容器id。 --重新进入这个容器的终端
7、从容器内拷贝文教到主机上
docker cp 容器id:路径 /目的主机路径
总结:
docker镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
docker 镜像加载原理
docker为什么采用分层架构
镜像都是制度的,当容器启动时,一个新的可写层被夹在到镜像的顶部,
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”
docker 镜像commit操作补充
1、docker commit 提交容器副本使之成为一个新的镜像
docker commit -m=“提交的描述信息”-a=“作者”容器id 要创建的目标镜像名:[标签名]
案例演示
1.从hub上下载tomcat镜像到本地并成功运行
docker pull tomcat
docker run -it -p 8888:8080 tomcat
(解释 -p 主机端口:docker容器端口
-P随机分配端口
i:交互
t:终端
可以通过浏览器查看;IP地址:主机端口
2、故意删除上一步镜像生产tomcat容器的文档
docker exec -it 容器id /bin/bash
ls -l
rm -rf docs
3、也即当前的tomcat运行实例是一个没有文档的容器
以它为模版commit一个没有doc的tomcat新镜像
docker ps
docker commit -m=“提交的描述信息”-a=“作者”容器id 要创建的目标镜像名:[标签名]
docker rm -f $(docker ps -q)
docker images
docker run -it -p 8888:8080 容器id
4、启动我们的新镜像并和原来的对比。
【以上案例相当于vm里面 将一个模版里面的某些不要的内容删除重新生成一个模版】
docker 容器数据卷
1、是干什么?
做持久化
容器间继承+共享数据
docker的理念:
将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据要求希望是持久化的。容器之间希望有可能共享数据。
docker 容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷
2、能干嘛?
1、数据卷可在容器之间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用为止。
容器间继承+共享数据
容器的持久化
3、数据卷?
1、如何添加容器卷
a)直接命令添加
不带权限命令:docker run -it -v /宿主机绝对路径目录:/容器内目 镜像名
如:docker run -it -v /mydate:/datecentos centos
-v有新建功能
带权限命令:
docker run it -v /宿主机绝对路径目录:/容器内目:ro 镜像名
:ro(只读)
4、数据卷容器?
是什么?
命名的容器挂在数据卷,其它容器通过挂在这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。
白话: 活动硬盘上挂活动硬盘实现数据之间的传递。
容器间传递共享(--volumes-from)
1.先启动一个父容器dc01
docker run -it --name dc01 容器名
2、dc02/dc03继承自dc01。 --volumes-from
命令:
docker run -it --name dc02 --volumes-from dc01 容器名
3.回到dc01可以看到02/03各自添加的都能共享了
4.删除dc02后dc03可否访问
docker rm -f dc01
5、新建dc04继承dc03后再删除dc03
docker run -it --name dc04 --volumes-from dc03 容器名
docker rm -f dc03
6、结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用为止。
dockerFile 重要
1、手动编写一个dockerfile文件,必须要符合file的规范
2、有这个文件后,直接docker build命令执行,获得一个自定义的镜像
3、run
dockerfile是什么???
dockerfile是什么:dockerfile是用来构建docker镜像的文件,是由一系列的命令和参数构成的脚本
dockerfile构建三步骤:编写dockerfile文件-docker build --docker run
文件什么样???:以我们数据的centos为例。
docker images (查看镜像)
dockerfile的解析过程
dockerfile内容基础知识
dockerfile 体系结构(保留字指令)
1.FROM
基础镜像,当前新镜像是基于哪个镜像的
2.MAINTAINER
镜像维护着的姓名和邮箱地址
3.RUN
容器构建需要的运行的命令
4.EXPOSE
当前容器对外暴露出的端口号
5.WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
6.ENV
用来在构建镜像过程中设置环境变量
7.ADD
将宿主机目录下的文件拷贝进镜像且add命令会自动处理URL和解压tar压缩包
8.COPY
类似add,拷贝文件和目录到镜像中
将从构建上下文目录中(源路径)的文件/目录复制到新的一层的镜像内的(目标路径)为止
9.VOLUME
容器数据卷,用来数据保存和持久化工作
10.CMD
指定一个容器启动时要运行的命令
dockerfile中可以有多个cmd指令,但只有最后一个生效,cmd会被docker run之后的参数替换
11.ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPOINT的目的和cmd一样,都是在指定容器启动程序及参数
12.ONBUILD
当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像后父镜像的onbuild被触发。
自定义镜像
**案例:**
场景:docker pull centos。
此centos 是一个浓缩版的centos。 无法使用vim。ifconfig。现在需要能使用。
编写此centos的dockerfile
from centos 继承本地的centos
ENV /DATA 设置登录系统后默认进入的目录 环境变量
WORKDIR $mypath 引用上方的env。登录系统后默认进入的目录
RUN yum -y install vim 安装想要的软件
RUN yum -y install net-tools
EXPOSE 80 容器暴露的端口号
CMD /bin/bash
需要在宿主机内创建一个这样的dockerfile文本
将以上内容放进去
示例 docker build -t 新镜像名字:TAG. (.代表当前路径)
实际写:在宿主机上
docker build -f dockerfile路径 -t 新镜像名字:TAG.
docker run -it 新建的镜像名称:TAG.
尝试是否可以使用vim。ifconfig 等等
列出镜像的变更历史
docker images 新的镜像名称
案例2:cmd和ENTRYPOINT区别
docker常用安装
总体步骤
搜索镜像
拉取镜像
查看镜像
启动镜像
停止容器
移除容器
安装mysql
docker search mysql
docker pull mysql:5.6. (:5.6版本号)
docker run -p 12345:3306 --name mysql
-v /date/mysql/conf:/etc/mysql/conf.d
-v /date/mysql/logs:/logs
-e MYSQL_ROOT_PASSWORD=123456
-d mysql:5.6
mysql -uroot -p。 进入mysql
数据备份
本地镜像发布到阿里云流程
可以参考docker官网。 centos7 安装docker
1.安装相关插件
yum -y install gcc
yum -y install gcc-c++
2.卸载之前的docker
3.安装需要的软件包
4.安装阿里云上的docker
5。更新yum软件包
6.安装docker ce
7.启动docker
sysemctl start docker
8.docker run hello-word
9。配置镜像加速
10.卸载: