docker

什么是docker
docker是容器虚拟化技术,可以有多个容器(可以不同功能)且相互隔离,互不影响。容器没有自己的内核,直接运行于宿主主机的内核。似乎跟虚拟机有点像。
镜像images
镜像是一个模板。
容器containers
可以把容器看成简易版的linux环境
容器是由镜像创建出来,一个镜像可以创建出多个相同的容器实例,每个容器为独立的应用进程。容器可以进行编辑,重新打包为镜像(创建镜像的一种方式,但一般不这么做)。
仓库
仓库(Respository)是集中存放镜像文件的场所
仓库(Respository)和仓库注册服务器(Registry)是有区别的,仓库注册服务器往往存放多个仓库,每个仓库又包含了多个镜像,每个镜像又不停地标签(tag)
官网的镜像仓库:https://hub.docker.com/
阿里云镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/images
Centos安装docker
# 安装一些必要的系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加软件源信息:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新 yum 缓存:
yum makecache fast
# 安装 Docker-ce:
yum -y install docker-ce
# 启动 Docker 后台服务:
systemctl start docker
# 测试运行 检查安装是否正确 hello-world:
docker run hello-world

帮助命令
docker version # docker版本信息
docker info # docker信息描述
docker --help # docker帮助命令
docker镜像(images)
docker images # 查看本地的镜像
docker images -qa # 查看本地所有镜像的Image ID
docker search redis # 搜索镜像
docker pull redis:latest # 获取 redis 5.0.0的镜像,latest为最新
docker rmi redis:latest/镜像ID # 删除redis:latest镜像
# 删除报错,因为容器正在运行,需要强制删除
docker rmi -f redis:latest/镜像ID # 强制删除
docker rmi -f 镜像ID1 镜像ID2 .. # 删除多个
docker rmi -f $(docker images -qa) # 删除全部(别真删完了)
docker 容器命令
有镜像才能创建容器,这是根本前提(下载一个centos镜像演示,之前我们下载过redis和hello-world)
docker pull centos
docker run -it 67fa590cfc1c #(镜像ID) 启动并进入centos(也可以用:docker run -it --name mycentos centos)
docker ps # 查看正在运行的容器列表(鲸鱼背上有哪几个集装箱)
docker ps -a # 查看正在运行的+历史上运行的本地容器
docker ps -l # 查看上一个本地容器
docker ps -lp # 查看上一个容器编号
exit # 退出容器
ctrl+p+q # 暂时退出(可以用docker ps查看一下是否还在运行)
docker start f22cda2d9048 # 启动容器(容器ID)
docker restart f22cda2d9048 # 重启容器(容器ID)
docker stop f22cda2d9048 # 停止容器
docker kill f22cda2d9048 # 强制停止
docker rm f22cda2d9048 # 删除已停止容器
docker rm -f f22cda2d9048 # 删除未停止容器
docker rm -f $(docker ps -qa) # 删除全部
docker run -d centos # 后台运行,启动守护式容器
docker logs -f -t --tail 容器ID # 查看容器日志
docker ps
# 以后台的形式在centos终端sh执行循环每间隔2秒打印一次hello zzyy
docker run -d centos /bin/sh -c 'while true;do echo hello zzyy;sleep 2;done'
docker ps
docker logs 容器ID # 查看容器日志
docker logs -t 容器ID # 查看容器日志(加时间)
docker logs -t -f 容器ID # 查看容器日志(不停地追加)
docker logs -t -f --tail 5 容器ID # 查看容器日志(不停地追加,只看倒数5行)
docker top 容器ID # 查看容器内运行的进程(大部分的linux命令在docker里都可以使用)
docker inspect 容器ID # 查看容器内部细节(这两个命令可以看出centos cmd还在运行刚刚的while语句)
docker attach 容器ID # 进入正在运行的容器兵役命令行交互
docker kill 容器ID
docker run -d centos /bin/bash # /bin/bash是直接得到结果
ctrl+p+q
docker attach 容器ID
docker exec -it 容器ID # 在容器外执行(隔山打牛,根本就没进去,直接拿结果返回宿主机)
docker exec -it 容器ID ls -l /tmp # 到这个容器根目录
docker exec -it 容器ID /bin/bash
docker cp 容器ID # 从容器内拷贝文件到主机上
docker cp 容器ID:/tem/yum.log /root
阿里云镜像加速器配置
正常而言,docker是从官网hub.docker.com上面pull的,但是从这个网址上下镜像非常慢,所以我们需要用阿里云镜像加速器配置
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://f6ralnxv.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

再次运行hello-world



这是容器命令的流程
我们再以redis/nginx镜像为例创建一个容器(因为centos不用写端口号,所以为们还要在写redis/nginx)redis是6379端口,nginx是80端口
docker create -p 16379:6379 --name redis redis:5.0 # 通过镜像,创建容器(以redis为例)
# 16379是虚拟机的端口(可以随意命名),6379是容器内的端口(redis端口),通过该设置,是将操作系统的16379映射到容器内的6379,我们后面使用redis客户端连接redis时,连接的是16379
docker run -p 16380:6379 --name redis2 redis:5.0 # 创建并运行容器

浙公网安备 33010602011771号