Docker-入门
DOCKER架构
docker update --restart=always
一、
工作流程:服务器A上运行docker Engine 服务,在docker Engine上启动很多容器container , 从外网Docker Hub上把image操作系统镜像下载来,放到container容器运行。这样一个容器的实例就运行起来了。
最后,通过Docker client 对docker 容器虚拟化平台进行控制。
Image和Container的关系:image可以理解为一个系统镜像,Container是Image在运行时的一个状态。
如果拿虚拟机作一个比喻的话,Image就是关机状态下的磁盘文件,Container就是虚拟机运行时的磁盘文件,包括内存数据。
dockerhub:dockerhub是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu, centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。(或者建立自己的私有仓库harbor)
二、
Docker 核心技术
1.Namespace — 实现Container的进程、网络、消息、文件系统和主机名的隔离。
2.Cgroup — 实现对资源的配额和度量。
注:Cgroup的配额,可以指定实例使用的cpu个数,内存大小等。就像如下图,vmware虚拟机中的硬件配置参数。
三、
Docker特性
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
优点:
1.一些优势和VM一样,但不是所有都一样。
比VM小,比VM快,Docker容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间和开销。Docker启动一个容器实例时间很短,一两秒就可以启动一个实例。
2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT的发布速度更快。
Docker是一个开放的平台,构建,发布和运行分布式应用程序。
Docker使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。
3.您可以在部署在公司局域网或云或虚拟机上使用它。
4.开发人员并不关心具体哪个Linux操作系统
使用Docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。
然后,在部署时一切是完全一样的,因为一切都在DockerImage的容器在其上运行。
开发人员负责并且能够确保所有的相关性得到满足。
5.Google,微软,亚马逊,IBM等都支持Docker。
6.Docker支持Unix/Linux操作系统,也支持Windows或Mac
缺点局限性:
1.Docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在Docker容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:NFS,ipsan,MFS等, -v 映射磁盘分区
一句话:docker只用于计算,存储交给别人。
oracle 不适合使用docker来运行,太大了,存储的数据太多
安装
添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存:
sudo yum makecache fast
安装 Docker-ce:
sudo yum -y install docker-ce
启动 Docker 后台服务
sudo systemctl start docker
测试运行 hello-world
[root@runoob ~]# docker run hello-world
DOCKER服务开机启动
systemctl enable docker
容器开机启动
##查看docker容器版本
docker version
##查看docker容器信息
docker info
##查看docker容器帮助
docker --help
docker配置文件为/etc/docker/daemon.json
官方文档:https://docs.docker.com/config/daemon/#configure-the-docker-daemon
insecure-registries:私有镜像仓库 "insecure-registries":["ip:端口","ip:端口",] registry-mirrors:镜像加速地址,一般改为国内的 https://help.aliyun.com/document_detail/60750.html "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] Docker 官方中国区: https://registry.docker-cn.com 网易: http://hub-mirror.c.163.com 中科大: https://docker.mirrors.ustc.edu.cn "registry-mirrors" : [ "http://ovfftd6p.mirror.aliyuncs.com", "http://registry.docker-cn.com", "http://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com" ] tcp连接打开。 PS.这儿请务必注意,不能直接配0.0.0.0,因为如果不做ACL或者TLS认证会导致你的Docker被人扫到后直接控制,有可能被远程创建挖矿容器 "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
如果修改了配置文件,需要重启
--配置host重启失败解决
在./etc/docker/daemon.json中添加"hosts":["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]启动失败;
原因是 docker 的 socket 配置hosts出现了冲突,需要注意的是配置host也能重启但是不生效;
解决方法:
centos中找到/usr/lib/systemd/system/docker.service,将其中的ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改成ExecStart=/usr/bin/dockerd;
再执行systemctl reset-failed docker.service && systemctl restart docker;
基本配置
镜像命令
查看镜像
docker search centos
下载镜像
docker pull [ 仓库 ]:[ tag ]
tag
表示镜像的版本号, 不指定时默认为 latest
推镜像
docker push [ 镜像名 ]:[ tag ]
查看已经下载镜像
docker images
含中间层的镜像
docker images -a
删除镜像
docker rmi [ 镜像名 or 镜像 id ]
打包本地镜像
docker save [ 镜像名 ] > [ 文件路径 ]
导入镜像压缩包
docker load < [ 文件路径 ]
修改镜像tag,产品新的镜像,
docker tag [ 镜像名 or 镜像 id ] [ 新镜像名 ]:[ 新 tag ]
docker tag busybox 192.168.31.101/crm/busbox:v1
容器命令
查看运行的容器
docker ps
查看所有容器
docker ps -a
查看映射端口
docker port
关闭容器(发送SIGTERM信号,做一些'退出前工作',再发送SIGKILL信号)
docker stop anyesu-container
强制关闭容器(默认发送SIGKILL信号, 加-s参数可以发送其他信号)
docker kill anyesu-container
启动容器
docker start anyesu-container
重启容器
docker restart anyesu-container
删除容器
docker rm [ 容器名 or 容器 id ]
将容器保存为镜像
docker commit [ 容器名 or 容器 id ] [ 镜像名 ]:[ tag ]
使用 Dockerfile 构建镜像
docker build -t [ 镜像名 ]:[ tag ] -f [ DockerFile 名 ] [ DockerFile 所在目录 ]
创建、启动容器并执行相应的命令
docker run [ 参数 ] [ 镜像名 or 镜像 id ] [ 命令 ]
硬件资源
资源配置
docker stats [ 选项 ] [ 0个或多个正在运行容器 ]
更新资源配置
docker update [ 选项 ]
仓库命令
[root@wyxelk docker]# docker login 192.168.31.101:80 Username: admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@wyxelk docker]# docker logout 192.168.31.101:80 Removing login credentials for 192.168.31.101:80 [root@wyxelk docker]# docker pull 192.168.31.101:80/crm/busbox:v1 v1: Pulling from crm/busbox 61c5ed1cbdf8: Pull complete Digest: sha256:400ee2ed939df769d4681023810d2e4fb9479b8401d97003c710d0e20f7c49c6 Status: Downloaded newer image for 192.168.31.101:80/crm/busbox:v1 192.168.31.101:80/crm/busbox:v1