Docker--个人笔记

Docker
什么是Docker? 一处构建,处处运行
概述: 是一套完整的一套容器管理系统
提供了一组命令,让用户更加方便的直接使用容器技术,而不需要过多关心底层内核技术.
一款产品从开发到上线,操作系统,到运行环境,再到应用配置,作为运维跟开发之间的协作我们需要关心很多东西,这也是很多互网联公司都不的面对的问题,特别是各个版本的迭代之后,不同版本环境的兼容,对运维人员都是考验.
Docker之所以发展这么迅速,也是因为它对此提供了一个标准化的解决方案.
环境配置如此麻烦,换一台机器,就要重来一次,费时耗力,很多人想到,能不能从根本上解决问题,软件可以带环境安装,也就是说,安装的时候,把原始环境一模一样复制过来,开发人员利用docker可以消除协作编码时,”在我的机器上可以正常工作”的问题.

镜像
镜像即对当前正常运行环境封装打包,除了代码以外,还有运行文档,运行环境,配置环境,运行依赖包,操作系统发行版,内核等,保证迁移能够正常运行.
Docker镜像的设计,使得docker打破过去程序即应用的观念,通过镜像(images)将作业系统核心除外,运作应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间无缝接轨运作.

什么是容器?
容器技术的核心有以下几个内核技术组成:

-Cgroups(资源管理)
限制进程使用多少资源

-NameSpace–进程隔离

六大空间:

用户
命名空间(主机名)
文件系统(filesystem)
进程
信号向量
网络()


-Selinux安全
设置相关的权限,对文件,目录等.
直接使用真机操作系统,所有资源都是直接使用真机的,不用装系统,容器没有独立操作系统
优点:快速,高效
相比于传统的虚拟化技术,容器更加简洁高效

传统虚拟机需要给每个VM安装操作系统
容器使用的共享公共库和程序
缺点: 不能跨平台
容器的隔离性没有虚拟化强
公用linux内核,安全性先天缺陷
Selinux难以驾驭
监控容器和容器排错是挑战
由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速.


Docker三大核心
镜像
容器基于镜像启动
镜像只读
镜像是启动容器的核心
镜像采用分层设计
使用快照的COW技术,确保底层数据不丢失.也可以理解为后端盘,后端盘只读,前端盘读写.
基于后端盘可以创建无数个前端盘

镜像下载: https://hub.docker.com

-docker search 镜像名称 //查找镜像
-docker pull 镜像名称 //下载镜像

查看命令:

]#docker images //查看镜像
]#docker ps //查看容器信息(正在运行的容器)

镜像的备份与恢复

]#docker images //查看镜像
REPOSITORY + TAG IMAGE ID
名称         标签  唯一值
]#docker save 目标(名称:标签)
-o tar包名称(一般名称.tar) ]#docker load -i tar包名称 //tar包恢复

启动镜像

]#docker run -it docker.io/centos:latest /bin/bash
I交互式t 镜像 名称+标签 启动命令不写使用默认启动命令
-run = create + start
当标签仅为 latest 时,可以省略

镜像常用命令

]#docker search nginx //搜索镜像
]#docker pull docker.io/pebbletech/nginx-proxy //下载镜像
]#docker images //查看镜像列表
]#docker history 镜像名 //查看镜像制作历史
]#docker inspect 镜像名 //查看镜像底层信息,查看镜像详细信息
]#docker pull 镜像名 //下载镜像
]#docker push 镜像名 //上传镜像
]#docker save 目标(名称:标签) -o tar包名称(一般名称.tar) //镜像备份
]#docker load -i 镜像备份名.tar //使用tar包导入镜像
]#docker run -it docker.io/centos:latest /bin/bash //启动镜像
]#docker ps //查看容器信息
]#docker rmi docker.io/busybox:latest //删除本地镜像,如果启动了容器,先删除容器
]#docker rmi $(docker images -f “dangling=true” -q) //删除空悬镜像,名称和标签为none
]#docker tag docker.io/ubuntu:latest ubuntu:xx //复制一份链接并且重命名镜像名与标签
]#docker rmi ubuntu:xx / docker.io/ubuntu:latest //删除镜像,并不会删除复制的镜像
]#docker info //查看dock所有信息
]#doker search -s 30 tomcat [–no trunc] //查找使用超过30的镜像,或显示完整的ID
]#docker logs -t(显示时间) -f(持续不间断,实时显示) 容器ID //持续不间断的查看容器日志
]#docker cp 容器ID:路径 宿主机路径 //拷贝容器数据到宿主机

容器常用命令

]#docker run -it docker.io/centos:latest /bin/bash //当标签唯一,可以不写,默认启动命令
]#docker run -itd docker.io/centos:latest /bin/bash //使用镜像启动容器,放入后台运行
]#docker ps //查看正在运行容器列表
]#docker ps -a //查看所有容器列表
]#docker ps -aq //仅显示容器id
]#docker start/stop/restart 5804a9953983 //开启/关闭/重启容器
]#docker attach 5804a9953983 //进入容器,exit退出会关闭容器
]#docker exec -it 5804a9953983 启动命令 //进入容器,exit不会关闭容器,id可以缩写,当唯一时.
]#docker inspect 5543 //查看容器底层信息(详细信息)
]#docker top 554 //查看容器进程列表信息
]#docker rm 554 //删除指定容器,容器正在运行不能被删除.
]#docker rm $(docker stop be) //先停止运行的容器,再删除容器
]# docker rm $(docker ps -aq) //删除所有的容器,将后面命令的结果交给前面执行
]#docker rm $(docker stop $(docker ps -aq)) //先列出,在停止,再删除
快捷键 ctrl + p + q //退出容器,返回真机,并不会停止运行中的容器
]# docker stop $(docker ps -q)

自定义镜像(将容器打包为镜像)

使用镜像启动容器,在该容器基础上修改,将修改后的容器另存为一个新镜像.
使用命令打包镜像
]#docker run -it docker.io/centos:latest //利用镜像运行容器实例
]#docker commit 3586bf56457b docker.io/myos:latest //将id号为…的容器封装为镜像

利用脚本打包镜像(Dockerfile)

使用镜像发布ssh服务:

]#mkdir /root/abc/
]#cd /root/abc/
]#vim Dockerfile FROM docker.io/myos:latest ADD local.repo /etc/yum.repos.d/local.repo //ADD加载文件内容到容器文件 必须与Dockerfile在同一个目录下 RUN yum -y install openssh-server-7.4p1-16.el7.x86_64 initscripts RUN指定后面的命令在容器内运行 RUN sshd-keygen RUN echo123456” | passwd --stdin root EXPOSE 22 //指定端口 CMD ["/usr/sbin/sshd","-D"] //指定镜像启动命令,用 , 表示空格 WORKDIR /var/www/html/ //当使用WORKDIR设置了工作目录,则下面所有的操作都在该目录下执行

比如: RUN touch f1
RUN cd /tmp/
RUN touch f2 //当RUN后面使用cd,则文件f1,f2都在/root/下,cd无效

执行脚本,打包镜像 -t tag的意思

]#docker build -t centos:latest /root/abc/
固定模式 打标签 名称 标签 Dockerfile所在目录

自定义私有镜像仓库

-yum -y install docker-distribution

服务名: docker-distribution 端口: 5000

仓库配置文件及数据存储路径
-/etc/docker-distribution/registry/config.yml //仓库配置文件
-/var/lib/registry //数据存储路径

Docker主机指定仓库地址

-vim /etc/sysconfig/docker
-ADD_REGISTRY=’–add-registry 192.168.1.30:5000//指定仓库地址
-INSECURE_REGISTRY=’–insecure-registry 192.168.1.30:5000//加密

 

验证:

在docker1上传镜像到镜像仓库,Docker2主机利用仓库镜像直接启动容器.

[docker1 ~]# docker push 192.168.1.30:5000/myos:httpd //上传镜像到仓库
]# curl http://192.168.1.30:5000/v2/_catalog //查看仓库镜像列表
]# curl http://192.168.1.30:5000/v2/myos/tags/list //查看指定镜像有哪些标签
[docker2 ~]#docker run -itd 192.168.1.30:5000/myos:httpd //从仓库中的镜像启动容器

 

持久化存储

-docker容器不保存任何数据
重要的数据请使用外部卷存储
容器可以挂载真实机目录或共享存储为卷
将真实机目录挂载到容器中提供持久化存储
–目录不存在就自动创建
–目录存在就直接覆盖掉

 

共享存储
1.使用NFS共享存储技术共享文件目录给docker机,目录权限为rw
2.客户端挂载共享,并将共享目录映射到容器中.

]#docker run -v /data:/data -it docker.io/centos bash //使用 -v选项映射磁盘到容器中
真实机目录,容器目录


网络

]#docker network create --subnet=10.10.10.0/24 docker1 //创建docker1交换机
]#docker run -it myos:latest //启动与docker0 连接的容器
]#docker run -it --network=docker1 myos:latest //启动与docker1 连接的容器

 

日志查看

docker container logs ${container name}

 

 

额外知识

]#/usr/lib/systemd/system/.service //查看服务启动命令
-yum search ssh //列出哪些包提供ssh服务
-rpm -ql 软件名 //列出该软件都安装了哪些目录
-yum provides 文件 //查看该文件由哪个包产生
-/usr/lib/systemd/system/.service //查看启动命令
Created symlink from /etc/systemd/system/multi-user.target.wants/docker-distribution.service to /usr/lib/systemd/system/docker-distribution.service.
posted @ 2021-11-21 19:31  不会跳舞的胖子  阅读(41)  评论(0编辑  收藏  举报