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    # 创建并运行容器
posted @ 2020-11-04 16:34  慢歩  阅读(56)  评论(0)    收藏  举报