docker容器技术

docker三大概念

容器三大基本概念 镜像 image 容器 container 仓库 repository docker整个生命周期就是这三个概念。

docker镜像

Docker镜像就是一个只读的模板。 例如:一个镜像能够包含一个完整的CentOS操做系统环境,里面仅安装了Apache或用户须要的其余应用程序。 镜像能够用来建立Docker容器。 Docker提供了一个很简单的机制来建立镜像或者更新现有的镜像,用户甚至能够直接从其余人那里下载一个已经作好的镜像来直接使用。

image的分层存储

由于镜像包含完整的root文件系统,体积是很是庞大的,所以docker在设计时按照Union FS的技术,将其设计为分层存储的架构。 镜像不是ISO那种完整的打包文件,镜像只是一个虚拟的概念,他不是一个完整的文件,而是由一组文件组成,或者多组文件系统联合组成。

docker容器(container)

image和container的关系,就像面向对象程序设计中的 类和实例同样,镜像是静态的定义(class),容器是镜像运行时的实体(object)。 容器能够被建立、启动、中止、删除、暂停 Docker利用容器来运行应用。 容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。每一个容器都是相互隔离的,保证安全的平台。 能够把容器看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 注意:镜像是只读的,容器在启动的时候建立一层可写层做为最上层。

docker仓库(repository)

仓库是集中存放镜像文件的场所。有时候把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上每每存放着多个仓库,每一个仓库中又包含了多个镜像,每一个镜像有不一样的标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,能够提供大陆用户更稳定快读的访问。 当用户建立了本身的镜像以后就可使用push命令将它上传到公有或者私有仓库,这样下载在另一台机器上使用这个镜像时候,只需须要从仓库上pull下来就能够了。 注意:Docker仓库的概念跟Git相似,注册服务器能够理解为GitHub这样的托管服务。

docker Registry

Docker Registry 公开服务是开放给用户使用、容许用户管理镜像的 Registry 服 务。通常这类公开服务容许用户免费上传、下载公开的镜像,并可能提供收费服务 供用户管理私有镜像。 最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并 拥有大量的高质量的官方镜像。 除此之外,还有 CoreOS 的 Quay.io,CoreOS 相 关的镜像存储在这里;Google 的 Google Container Registry,Kubernetes 的镜像 使用的就是这个服务。 因为某些缘由,在国内访问这些服务可能会比较慢。 国内的一些云服务商提供了针 对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见 的有 阿里云加速器、DaoCloud 加速器、灵雀云加速器等。 使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提升不少。在后 面的章节中会有进一步如何配置加速器的讲解。 国内也有一些云服务商提供相似于 Docker Hub 的公开服务。好比 时速云镜像仓 库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。

docker安装

ce 社区版
ee 企业版python

docker版本

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。 企业版包含了一些收费服务,我的开发者通常用不到。本文的介绍都针对社区版。

环境准备

docker最低支持centos7且在64位平台上,内核版本在3.10以上 [root@oldboy_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64

安装方式

1.卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 2.设置存储库 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo 3.安装docker社区版 sudo yum install docker-ce 4.启动关闭docker systemctl start docker

下载docker镜像文件

1、配置docker加速器 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io 这个命令是修改/etc/docker/daemon.json文件,写入一个json数据以下 [root@s20 ~]# cat /etc/docker/daemon.json
    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}这里不能有逗号,不然docker起动不了 配置好了docker加速器,下载镜像就快不少了 改完须要重启docker,否则下载不了镜像文件systemctl restart docker 【有逗号下载时的报错信息】 Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 2、下载centos的docker镜像 docker pull centos #是取dockerhub 下载cnetos镜像的

aliyun镜像加速

管理容器

容器管理的重要点!!!

docker                         容器中必须有进程在后台运行,不然容器挂掉!!!
docker                         镜像每次运行 都会生成新的容器id记录
docker run centos         运行三次,出现三次容器新的记录
【启动容器】docker start 容器名/id
【中止容器】docker stop 容器名/id
【平滑启动】docker restart 容器名/id
【运行容器】: 交互式容器:docker run -it --name=c1 centos:7 /bin/bash    使用centos7镜像启动一个容器并进入容器内  容器名为c1

   守护式容器:docker run -id --name=c2 centos:7 后台启动一个容器 不进入容器 【这种方式建立容器,退出容器后,容器不会关闭】
         docker exec -it c2 /bin/bash      进入容器内   c2容器名linux

【进入容器空间内】: docker exec  -it   运行着的容器id    /bin/bash 
【删除挂掉的容器】: docker rm 容器id
#删除容器id记录 docker rm `docker ps -aq` #批量删除挂掉的容器 运行中的容器不能删除
【查看容器日志】: docker logs 容器id docker logs -f 容器id # 监测容器内的日志
【杀死容器进程】: docker kill 容器进程id
【查看容器进程】: docker ps
#查看正在运行的容器进程 docker ps -a #显示全部运行过的容器进程(正在运行的,以及挂掉的容器进程) docker container ls -a #同上,旧的命令
【提交容器】:
  # 自定义软件后,退出容器,提交这个容器,成为一个新的镜像
  docker commit 容器id  新的镜像的名字
  docker commit 5c2  s20/centos-vim

【查看容器信息】
  dcoker inspect  容器名称
【在容器的后台运行一个进程,运行出活着的容器】: docker run
-d centos /bin/sh -c "while true;do echo 'hello'; sleep 1;done" -d 就是daemonize 后台运行的意思 centos 指定哪一个镜像 /bin/sh 指定linux的解释器 -c 指定一段shell代码 "while true;do echo 'hello'; sleep 1;done" #每秒打印一个

咱们在输入容器id的时候只须要输入前三位便可

镜像管理

【搜索镜像】: docker search centos #去docker hub 搜索有关centos的镜像文件
【下载镜像】: docker pull centos # 下载docker镜像 centos
    docker pull hello-world  # 获取一个hello-world镜像 
    docker pull ubuntu       # 获取一个ubuntu镜像
docker pull redis:5.0 # 下载指定版本号的镜像文件
【查看本地镜像】: docker images #查看本地有哪些docker镜像 docker image ls #命令同上
docker images -q # 查看全部镜像id 【删除本地镜像】: docker rmi 镜像id/镜像名 #删除本地docker镜像 docker rmi -f 镜像id #强制删除镜像文件
docker rmi `docker images -q` # 删除全部镜像
【导出镜像】: # 导出这个镜像文件,指定导出的文件名和后缀 docker save 镜像名/id > /opt/centos-vim.tar.gz 【导入镜像】: docker load < /opt/centos-vim.tar.gz 【修改镜像名字】: docker tag 镜像id/镜像名 以dockerhub仓库id开头的/新的镜像名 docker tag 镜像id/镜像名 新镜像名字 # 给ef9这个容器起的镜像名字是henry/centos-vim docker tag ef9 henry/centos-vim

咱们在输入镜像id的时候只须要输入前三位便可

自定义docker镜像

1.获取一个centos基础镜像,运行处容器后 docker run -it  centos /bin/bash 2.进入容器空间内,默认没有python3 和其余软件 进入以后,安装一个vim yum install vim -y 3.自定义软件后,退出容器,提交这个容器,成为一个新的镜像 exit退出容器 docker 4.此时这个镜像文件,能够发送给其余同事了 docker commit 容器id 新的镜像的名字 docker commit 5c2 s20/centos-vim 此时的镜像文件是在docker容器内的,s20只是名字而已 5.查看提交的镜像文件 docker images 6.导出这个镜像文件,指定导出的文件名和后缀 docker save 镜像名/id > /opt/s20-centos-vim.tar.gz 7.在本地测试导入这个镜像 # 导入命令
    docker load < /opt/s20-centos-vim.tar.gz 8.给导入的镜像,修改tag别名 docker tag 镜像id/镜像名  以dockerhub仓库id开头的/新的镜像名 docker tag 镜像id/镜像名  henry163/centos-vim docker tag 镜像id/镜像名 新镜像名字 9.执行这个docker镜像,运行容器后,查看是否携带了vim #语法
 关键字 关键字 参数 镜像名 你要执行的命令 docker run -it henry163/centos-vim  /bin/bash

数据卷

概念:

配置数据卷

配置数据卷  docker run -it --name=c1 -v /root/data:/opt/datda_contailner  centos:7 /bin/bash   宿主机/root/data目录挂载到容器/opt/data_contailner 【宿主机和容器通讯 文件共享】 一个容器同时挂载多个数据卷 docker run -it --name=a1 -v /root/data1:/opt/data1 -v /root/data2:/opt/data2 centos:7 /bin/bash 两个容器同时挂载同一个目录 实现两个容器的通讯 docker run -it --name=c1 -v /root/data:/opt/data docker run -it --name=c2 -v /root/data:/opt/data  【两个数据卷中的文件共享】

数据卷容器:

c3也是个容器 c3挂载数据卷  c1,c2挂载c3   --->实现c1,c2,c3都挂载到同一个数据卷redis

配置数据卷容器

配置数据卷容器 一、docker run -it --name=c1 -v /volume centos:7 /bin/bash           使用-v参数 设置数据卷    /volume(容器目录) 若是不设置冒号左边的目录 docker会自动分配一个目录 二、doeker run -it --name=c2 --volumes-from c1 centos:7 /bin/bash 将c2挂载到c1容器 三、doeker run -it --name=c3 --volumes-from c1 centos:7 /bin/bash    将c3挂载到c1容器

将打包好的镜像上传dockerhub

一、查看当前镜像docker

docker images

 红线框的是咱们打包好的镜像shell

二、登录dockerhub帐户json

docker login

登录成功ubuntu

三、更改镜像名称vim

想要将镜像上传到dockerhub   镜像的名称必须遵照命名规则(帐户名/镜像名:版本号)centos

四、上传到dockerhub安全

相关文章
相关标签/搜索