Docker-01简介
Docker-01简介 1.是什么 Docker是一个开源的应用容器引擎,可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任意Linux机器上,及容器虚拟化技术。 Docker容器完全使用沙箱机制,相互之间不会有任何接口,且容器的开销极低。 沙箱机制: 默认情况下,一个应用程序可以访问机器上所有的资源、比如cpu、内存、文件系统、网络等。这是不安全的,如果随意操作资源,就有可能破坏其他应用程序使用的资源,或造成数据泄露。 解决这个问题有两种方案:1)为程序分配一个限定权限的账号,级利用系统的权限机制进行限制;2)为程序提供一个受限的运行环境,即沙箱机制。 沙箱是一个虚拟系统程序,沙箱提供的环境相对于每一个运行的程序都是独立的,而且不会对现有的程序产生影响。 2.干嘛用的 Docker解决的问题:docker解决开发和运维部署间的矛盾,一次封装,到处运行。 传统上,软件开发测试完成后,输出的是程序或那个编译执行的二进制文件,为了让这些程序可以顺利执行,开发团队需要准备完整的部署文件,让运维团队得以部署应用程序,开发团队需要清楚地告诉运维部署团队,用的全部配置文件+所有的软件环境,不过即使如此,仍然时常发生部署失败的情况。Docker镜像的设计,是docker打破程序即应用的观念。透过镜像(images)将作业系统核心除外,运作应用程序所需要的系统环境,由上而下打包,达到应用程序跨平台间的无法接轨运作。 3.Docker优点 Docker与传统虚拟化方式的区别: 1)传统虚拟机技术是虚拟出一套硬件后,在上面运行一套完整系统吗,在该系统上再运行所需要的应用程序,因为要运行一套完整系统,资源浪费比较严重。 2)Docker容器内的应用直接运行于宿主机的内核,容器没有自己的内核,而且容器也没有进行硬件虚拟,因此要比传统虚拟机技术节约资源。 3)Docker每个容器之间相互隔离,每个容器都有自己的文件系统,容器能能之间进程不会相互影响,能区分管理资源。 Docker带来的好处(一次构建,到处运行):1)带环境安装,更快的交付和部署;2)通过镜像运行新的容器,更便捷的升级和扩缩容;3)运行环境和镜像一致,可以通过镜像定位问题,更换镜像解决问题,系统运维更简单;3)是内核的虚拟化,节约资源,更高效的资源利用率。 4.Docker组成
Docker由客户端、Docker主机、注册中心3部分组成 Docker主机Docker_HOST由容器和镜像组成 注册中心Registry为云端仓库,存有镜像 Docker镜像images是一个个只读的模版,可以用来创建Docker容器,一个镜像可以创建很多Docker容器。 Docker容器Container可以看做是一个简易的Linux系统 Docker命令: docker pull ,从云端下载镜像到本地 docker run ,由镜像生成一个容器并运行,如果本地镜像不存在,会去往注册中心下载。 5.Docker的安装 以下命令需要使用root权限,如果不是root用户,需要先获取root权限 1)较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,卸载它们: yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2)安装依赖包 yum -y install gcc yum -y install gcc-c++ yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 3)配置yml国内仓库地址 阿里云: yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 清华大学: yum-config-manager \ --add-repo \ https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo 4)更yum新软件包索引 yum makecache fast 5)安装Docker yum install docker-ce docker-ce-cli containerd.io 6)启动服务 systemctl start docker 7)查看docker版本信息 docker version 8)配置阿里云镜像加速器 使用淘宝等账号访问登录:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 如果页面没有开通就进行开通,在左边最下面镜像中心有个镜像加速器,右边有加速器操作文档,选择需要的系统。 复制操作文档下面格式的一段代码直接执行: sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xy2bm1t2q.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 上面的代码进行的操作是: 创建配置文件目录: sudo mkdir -p /etc/docker 创建配置文件并输入配置: sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xy2bm1t2q.mirror.aliyuncs.com"] } EOF 刷新配置重启docker: sudo systemctl daemon-reload sudo systemctl restart docker 6.Docker底层原理 1)Docker的组成 Docker由以下3部分组成: 镜像(image):只读模版,用于生成容器,只能下载上传,可以根据镜像new出n个容器 容器(container):运行我们程序的虚拟的地方 仓库(repository):仓库一般在网上,用于存储镜像 2)底层原理 Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端进行访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器是一个运行时环境。 7.Docker常用命令 1)帮助命令: docker info 查看docker的运行信息 docker help 帮助文档 2)镜像命令: docker images 查看本地镜像 docker search name 从远程仓库查找名称为name的镜像 参数 -s 数字,列出收藏数不少于多的镜像 docker pull name[:version] 下载镜像,可以通过:version指定版本,不指定默认最新的 docker rmi nameId(或name) 删除名称id为nameId的(或名称为name的)镜像 3)容器命令: docker run [options] IMAGE [command] [arg ...] 创建并启动容器 参数说明: --name 指定容器的名字 -d 后台运行容器(demons) -i 以交互模式运行容器,通常与-t同时使用 -t 为容器重新分配一个伪输入端,即一个命令行窗口,常与-i一块使用 -P随机端口映射 -p指定端口映射,docker容器内如果要运行程序,占用的是容器内的端口, 需要映射到主机的端口才可以访问,映射格式有以下4种: ip:hostPort:containerPort ip::containerPort hostPort:continerPort containerPort eg: eg:docker run -it centos eg:docker run -it --name ct1 centos 特别说明1:每run一次都重新创建了一个容器。 特别说明2:docker 容器后台运行,就必须有一个前台进程,否则docker启动容器后会立即再关闭容器(但交互模式除外,即用来-i参数的) 比如使用命令 docker run -d --name ct4 centos 启动一个centos容器ct4,然后再用后面的ps命令查看ct4这个容器的状态,会发现这个容器启动后仅隔着1秒就停止了。 docker run name:version 下载并生成指定版本的容器 docker ps [options] 查看正在运行的容器 参数说明: -a:列出氮气所有正在运行的容器+历史上运行的容器 -l:显示最近创建的容器 -n:显示最近创建的n个容器,eg: docker ps -n3 exit 停止容器并退出 ctrl+p+q 退出登录,但容器不停止 docker start 容器id或名字 启动已有的容器 docker restart 容器id或名字 重新启动已有的在运行容器 docker stop 容器id或名字 停止在运行容器 docker kill 容器id或名字 强制停止在运行容器 docker rm 容器id或名字 删除容器 参数说明: -f:强制 docker logs 容器id或容器名字 查看容器日志 参数说明: -f 跟随打印最近日志 -t 加入时间戳 --tail 数字 显示最后多少行 docker top 容器id或容器名字 查看容器内的运行进程(在容器外面) 进入某个容器并以命令行交互,有多种方式: docker exec -it 容器id或容器名称 bashShell bashShell为bash的全名,在容器中打开新的终端,并可以启动新的进程。 eg:docker exec -it ct3 /bin/bash docker attach 容器id或容器名称 直接进入容器启动命令的终端,不会启动新的进程 docker cp 本地文件路径 容器id或容器名称:容器内目录 拷贝文件到docker