赞
踩
Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源
是在Linux容器里运行应用的开源工具
是一种轻量级的”虚拟机“
Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的,可移植的,自给自足的容器。
docker本质就是宿主机的一个进程,docker是通过namespace(命名空间)实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。
●镜像
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker容器引擎的只读模板。
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。
●容器
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。
●仓库
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker的镜像、容器、日志等内容全部都默认存储在/var/lib/docker
systemctl stop firewalld
setenforce 0
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils:提供了yum-config-manager 工具。device mapper:
是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。device mapper存储驱动程序需要 device-mapper-persistent-data和 lvm2。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce docker-ce-cli containerd.io
systemctl start docker.service
systemctl enable docker.service
安装好的Docker系统有两个程序,Docker服务端和ocker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。
Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
docker version
docker info 数量信息,容器信息,镜像信息
docker search 关键字
docker pull 名称
docker images
docker inspect 镜像名称或者id
docker tag 旧库名:旧标签 新名:新标签
docker rmi 库名:标签
docker rmi 镜像id号 -f
注意如果这个镜像在被容器使用,加上-f会把容器也删除
先导出镜像
docker save -o 自定义文件名 库名:标签
删除镜像
docker rmi 镜像名:标签
在导入镜像
docker load -i 镜像名
docker load < 镜像名
docker images | awk ‘NR>=2 {print " docker rmi " $3}’ |bash
新创建的容器默认处于停止状态,不运行任何程序,需要再其中发起一个进程来启动容器
docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入
-t:让Docker分配一个伪终端tty
-it:合起来实现和容器交互的作用,运行一个交互式会话shell
docker create -it nginx:latest /bin/bash
docker ps -a
docker start 容器id/容器名
docker stop 容器id
或
docker kill 容器id
两者区别是 docker stop 想当于给程序发送一个指令,等程序处理完进程后 关闭程序
而 docker kill 是不管三七二十一,直接强制删除
可以直接执行 docker run命令,等同于先执行docker create命令,再执行 docker start命令。 心 注意:容器是一个与其中运行的 shell命令共存亡的终端,命令运行容器运行,命令结束容器退出。 docker容器默认会把容器内部第一个进程,也就是 pid=1的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。 当利用 docker run来创建容器时,Docker在后台的标准运行过程是: (1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载; (2)利用镜像创建并启动一个容器; (3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层; (4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中; (5)分配一个地址池中的IP地址给容器; (6)执行用户指定的应用程序,执行完毕后容器被终止运行。
在后台持续运行docker run创建的容器
docker run -d centos:7 /bin/bash -c "while true; do echo helloworld; done"
先停止一个容器
docker stop 容器id
修改容器名称
docker run -tid --name ck centos:7 /bin/bash
docker exec -it 容器名 bash
如何创建完容器直接进入容器(一条命令搞定)
docker run -it centos:7 bash
宿主机导入文件到容器
docker cp 文件 容器id号:/容器目录/
容器导出文件到宿主机并改名
docker cp 容器id号:/容器目录/文件 宿主机目录/新文件名
docker export 容器id/名称 > 文件名 导出容器
cat 文件名 | docker import - 镜像名称:标签 导入容器
docker images 查询导出的容器
#因为导出的是容器,查询用docker ps -a查询不到结果
docker rm 容器id/容器名
删除正在运行的容器,需要先停止容器 或者加-f 强制删除
如何一次性删除所有容器
docker ps -a | awk 'NR>=2{print $1}'|xargs docker rm -f
批量清理后台停止的容器
docker rm $(docker ps -a -q)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。