linux运维、架构之路-Docker架构原理

一、Docker架构原理介绍

       Docker使用了C/S架构,客户端与守护进程通信,Docker守护进程负责构建,运行和分发Docker容器。Docker客户端和守护进程可以在同一个系统上运行,也可以将Docker客户端连接到远程Docker守护进程。Docker客户端和守护进程使用REST API通过UNIX套接字或网络接口进行通信。

linux运维、架构之路-Docker架构原理

二、Docker介绍

       Docker的英文翻译是”搬运工“的意思,他搬运的东西就是我们常说的集装箱Container,Container里面装的是任意类型的App,我们的开发人员可以通过Docker 将App变成一种标准化的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。Docker和虚拟机比较类似,只是更加轻量级,更加方便使用。

1、Docker和虚拟机区别:

  • 虚拟化技术依赖的是物理CPU和内存,是硬件级别的;而Docker是构建在操作系统层面的,利用操作系统的容器化技术,所以Docker同样的可以运行在虚拟机上面。
  • 虚拟机中的系统就是我们常说的操作系统镜像,比较复杂;而Docker比较轻量级,我们可以使用Docker部署一个独立的Redis,就像类似于在虚拟机当中安装一个Redis应用,但是我们用Docker部署的应用是完全隔离的。
  • 在传统的虚拟化技术是通过快照来保存的;而Docker引用了类似于源码的管理机制,将容器的快照历史版本一一记录下来,切换成本低。
  • 传统的虚拟化技术在构建系统的时候非常复杂;而Docker可以通过一个简单的Dockerfile文件来构建整个容器,更重要的是Dockerfile可以手动编写,这样应用开发人员可以通过发布Dockerfile来定义应用的环境和依赖,这样对于持续交付非常有利。

2、Docker安装

①安装指定版本docker

#docker官方提供了安装脚本,我们确认好版本就可以直接安装#
export VERSION=18.06
curl -fsSL "https://get.docker.com/" | bash -s -- --mirror Aliyun

②设置overlay2为默认存储驱动,并配置加速器

mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://hjvrgh7a.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

要添加harbor仓库时需要在添加下面一行 "insecure-registries": ["harbor.demon.com"],默认docker hub需要https协议,使用上面配置不需要配置https。

③设置开机自启并设置docker命令补全

yum install -y epel-release bash-completion && cp /usr/share/bash-completion/completions/docker /etc/bash_completion.d/
systemctl enable --now docker

三、Docker基本操作

1、常用命令

①Docker镜像管理

  • 搜索镜像:docker search
  • 获取镜像:docker pull
  • 查看镜像:docker images
  • 删除镜像:docker rmi
  • 构建镜像:docker build -t <镜像名>

②Docker容器管理

  • 启动容器:docker run –name -h hostname
  • docker run -d -P nginx
  • -d运行在后台
  • -P 代表随机映射
  • nginx 镜像的名称
  • 停止容器:docker stop CONTAINER ID
  • 查看容器:docker ps -a -l
  • 进入容器:docker exec | docker attach |nsenter
  • 删除容器:docker rm
  • 查看容器日志:docker logs CONTAINER ID
  • 杀死所有正在运行的容器:docker kill $(docker ps -a -q)
  • 删除所有容器(只有先停止才可以删除):docker rm $(docker ps -a -q)

③Docker 网络访问

  • 随机映射:docker run -P
  • 指定映射:
  • -p hostPort:containerPort
  • -p ip:hostPort:containerPort

④Docker 查看容器映射信息

  • docker port mynginx #容器名称
  • 80/tcp -> 192.168.56.100:81
  • docker port 65439bce352e #容器ID
  • 80/tcp -> 192.168.56.100:81

⑤镜像导出导入

  • docker save nginx:latest > /home/nginx.tar
  • docker load < /home/nginx.tar

四、Docker 数据共享与持久化

1、数据卷 (Data Volumes)

       数据卷是一个可供一个容器或多个容器使用的特殊目录,数据卷的使用,类似于NFS挂载,镜像中被指定为挂载点的目录会隐藏掉,能显示看的是挂载的数据卷。

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会马上生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

①创建一个数据卷

[ ~]# docker volume create my-volume
my-volume

②查看数据卷

[ ~]# docker volume ls
DRIVER              VOLUME NAME
local               my-volume
如果使用的Docker有容器在运行,这里可能会不止一个。但是如果不添加-v参数,当容器停止或者删除时,volume同时也会被删除。

③使用inspect查看指定数据卷的信息

[ ~]# docker volume inspect my-volume 
[
    {
        "CreatedAt": "2020-01-17T15:54:55+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-volume/_data",
        "Name": "my-volume",
        "Options": {},
        "Scope": "local"
    }
]

④启动一个挂载数据卷的容器

2、挂载主机目录 (Bind Mounts)

相关推荐