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