docker容器学习基础篇

docker容器学习基础篇

为什么要学docker

在开发工作中,都是团队协作开发的,不同开发人员的代码运行环境,配置环境等等都不同,这回在整合过程中浪费太多时间,降低开发效率,而docker容器可以模拟配置环境等,解决了代码’'水土不服”的问题,对于要就业的小伙伴,docker是一项必须要掌握的技术。

什么是docker

Docker是基于Go语言实现的云开源项目,Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。是解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。docker与传统的虚拟机相比更轻量,更快,更便捷的升级和扩缩容,这也是docker的优势。

docker知识目录

docker的基本组成

镜像

Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多

容器。它也相当于是一个root文件系统。比如官方镜像 centos:7 就包含了完整的一套 centos:7 最小系

统的 root 文件系统。相当于容器的“源代码”,docker镜像文件类似于类模板,而docker容器实

例类似于new出来的实例对象。容器与镜像的关系就类似于面向对象编程中的类与对象的关系。

容器
  1. 从面向对象角度

Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是J类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

2.从镜像容器角度

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

仓库

仓库(Repository)是集中存放镜像文件的场所。类似于Maven仓库,存放各种jar包的地方;github仓库,存放各种git项目的地方;Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云等。

通俗的讲就是 仓库里面装镜像,镜像实例出容器,每一个容器可以理解为一个轻量级、可执行的独立软件包像一个linux环境一样被使用

在Centos7上安装Docker

直接百度搜或看文档就ok

安装镜像加速器

挺重要的,docker总是拉取不了镜像需要用到镜像加速器,一般用国内的阿里云的等等,在学习docker的时候遇到了加速器不管用的情况,就需要换加速器,自己上网找能用的加速器,否则该拉取不了镜像了。

docker常用命令

docker是在Linux中使用的,通过shell编程操作,可以通俗的理解像操作linux一样,用docker。

帮助启动类指令
systemctl start docker  启动docker

systemctl stauts docker 查看docker的运行状态

systemctl restart docker 重启docker

systemctl stop docker 停止docker

docker --help  查看docker帮助文档 

docker cp --help 查看详细的docker帮助文档 
镜像命令
docker images 列出本地主机上的镜像

docker search 某个XXX镜像名字/ID   指定搜索某个镜像的名称。

docker pull 某个xxx镜像的名字/ID   拉取镜像到本地(下载镜像)

docker system df 查看镜像/容器/数据卷所占的空间

docker rmi 某个xxx镜像的名字/ID   删除某个镜像(不能删除正在运行的镜像)

docker rmi -f 某个xxx镜像的名字/ID  强制删除
(也有删除多个镜像和全部镜像的命令,与之类似,感觉不常用)

仓库名标签都是none的镜像叫做虚悬镜像
容器命令
docker run 容器名称  启动容器
这样无法启动容器,因为启动完就退出
docker run -it 容器名称 /bin/bash  启动容器
这样可以 
-it 组合选项 使你能在docker容器中打开一个可用的窗口并与容器进行互动 docker中有许多选项如-d -i -t等等 
-i:交互式操作(使容器保持开放,以便能输入命令) -t:终端(分配一个伪终端,使在容器中运行更像是在终端运行)
/bin/bash:启动一个bash shell,让你能在容器内部直接输入命令并操作。
通俗的讲这个命令创建了一个新的虚拟的容器系统,然后命令行窗口会自动打开,可以像在真实的系统上输入和执行。

docker run -d ID/容器 后台启动

docker ps 列出正在运行的容器
(docker ps -a/-l/-h/-q等等不常用好像就不解释了)
docker logs  ID/容器 查看容器日志的命令

docker top  ID/容器 查看容器内运行的进程

docker exec -it ID/容器 /bin/bash 进入容器内部

docker attach  ID/容器 进入容器(这个不推荐最好用docker exec 命令,退出容器终端,不会导致容器的停止。)

用exec,exit 退出不停止容器 用attach,exit 退出停止
ctrl+p+q 退出,容器不停止

docker start ID/容器 启动已停止的容器

docker restart ID/容器 重启容器

docker stop ID/容器  停止容器

docker kill ID/容器  强制停止容器

docker rm ID/容器 删除已停止的容器
 
docker rm -f  ID/容器 删除正在运行的容器
(也可以一次删除多个容器)

docker cp 容器ID:容器内路径 目的主机路径  从容器内拷贝文件到主机上

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号  读取 tar,将内容导入到 Docker 镜像中

docker export 容器ID > 文件名.tar    将文件中的某个内容导出来,以tar.gz的文件保存

对docker镜像的进一步探究

docker镜像的底层原理

1.docker镜像是分层的文件系统

我们可以把它理解为一块分层的蛋糕,每一个分层的镜像都有单独的功能,然后汇聚成一个大的整体的镜像,

我们又把它叫做联合文件系统,一次同时加载多个文件系统,但从外面看只看到一个大的文件系统,联合加载是让他们叠加起来。

2.docker镜像是如何加载的

bootfs是最底层起引导内核加载的作用 上面是rootfs包含容器所要用到的核心文件系统,提供相关的文件和目录结构

docker镜像层都是只读的,容器层是可写的 当一个容器启动时新的可写层(容器层)被加载到镜像的顶部

所有对容器的改动都发生在容器层

创建镜像的一种实例,对镜像的底层原理加深理解:

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

docker commit命令的作用就是提交容器副本使之成为一个新的镜像

总之,docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像,新的镜像是从基础镜像一层层叠加生成的,每安装一个软件,就在现有镜像的基础上增加一层。

将本地镜像推送到阿里云

固定方法多用

将本地镜像推送到私有库

Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以

需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。Docker Registry是官方提供

的工具,可以用于构建私有镜像仓库。

a.搭建私服:1.下载镜像Docker Registry 2.运行私服容器

b.将镜像推送到私服库

c.可以从私服拉取镜像

多用多练就好

docker容器数据卷

数据卷可以类比外设硬盘,是一个用于持久化和共享容器数据的机制

容器卷和数据卷是一个东西

理解:数据卷在主机上,可以挂载数据卷到容器文件目录,不同容器都可以挂载到同一数据卷,从而实现了容器数据共享,即使把容器删了,数据卷仍然存在,从而实现容器之间的数据共享和重用数据。(后面要会实操挂载数据卷)

数据卷中的更改可以直接实时生效

数据卷的更改不会包含在镜像的更新中

数据卷的生命周期可以持续到没有容器使用它为止

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录镜像名 添加数据卷的命令

docker inspect 容器id 查看据卷是否挂载成功

docker run -it --privileged=true -v /tmp/hostData:/tmp/dockerData1:ro ubuntu /bin/bash 只想在容器内部进行读操作

docker run -it --privileged=true –volumes-from 父类 --name u2 ubuntu 容器的数据卷还可以被继承和共享。

docker中常见软件的常规安装

安装tomcat

安装mysql

安装redis

有简单版本的安装和复杂安装,就把它们当作正常的软件安装就行吧,然后就是在docker容器下使用这些软件嘛。

有问题欢迎指正,共勉!

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值