Docker容器是一种轻量级、可移植的软件打包和部署技术。它允许开发者将应用程序及其依赖项、运行时环境等打包到一个称为容器的单一单元中。这个容器可以在支持任何支持Docker的环境中运行,而不需要担心底层系统的配置差异。
Docker的底层原理涉及到多个组件,主要包括Linux内核特性(cgroup/namespace)、容器镜像、容器运行时、Union文件系统(联合文件系统)等技术。
Linux内核特性,namespace用来隔离系统资源,包括:
* UTS:主机名和域名
* IPC:进程间通信
* PID:进程编号
* Network:网络设备、端口、网络栈
* Mount:文件系统
* User:用户和用户组
Linux内核特性,cgroups可以限制和隔离Linux进程组所使用的物理资源,如CPU、内存、磁盘和网络IO
容器镜像是一个包含应用程序代码、运行时环境、系统工具和库等的只读文件。它是容器的静态表示,用于创建容器的运行实例。
容器是用镜像创建的运行实例,可以被启动、停止、删除和迁移。
容器运行时负责在机器上创建和管理容器。Docker使用的容器运行时主要是containerd和runc。containerd是一个用于管理容器的守护进程,而runc是一个用于创建和运行容器的CLI工具它使用标准的容器格式和运行时。
Docker Daemon是后台服务,负责管理容器的创建、运行、停止等操作。它接收来自Docker CLI或其他客户端的命令,并与容器运行时交互。
Docker使用联合文件系统来构建容器镜像。这使得镜像可以通过层叠的方式组合,每一层包含文件系统的增量变化,这种机制提高了镜像的重用行和效率。同时容器有写时复制的特性。当容器启动时,一个新的可写层会被加载到镜像的顶部,这一层通常被称作容器层。对于容器层的改动,无论添加、删除、修改都只会发生在容器层。只有容器层是可写的,镜像层都是只读的。
搜索官方Dockerhub镜像仓库
$ docker search 镜像名
拉取镜像
$ docker pull 镜像仓库:镜像名:标签
上传镜像
$ docker push 镜像仓库:镜像名:标签
查看镜像
$ docker imags ls
查看镜像详细信息
$ docker inspect image 镜像名
给镜像打标签
$ docker tag 原镜像 新镜像
删除镜像
$ docker image rm 镜像名
强制删除没有被使用的镜像
$ docker image prune -a -f
导出镜像
$ docker image save -o test.tar 镜像名
导入镜像
$ docker image load -i test.tar
查看所有容器
$ docker ps -a
查看正在运行中的容器
$ docker ps
查看所有容器的容器ID
$ docker ps -qa
查看已经停止的容器
$ docker ps -a -f status=exited
停止容器
$ docker stop 容器名/id
启动容器
$ docker start 容器名/id
查看容器所有日志
$ docker logs 容器名
查看容器日志并实时刷新
$ docker logs -f 容器名
复制文件到容器
$ docker cp 文件 容器名:路径
docker有四种网络模式
将容器的80端口映射到宿主机的8080端口
$ docker run -d -p 8080:80 nginx
$ docker run -d --network host nginx
容器80端口直接显示在宿主机
$ docker run -d --network none nginx
$ docker run -d --name web nginx
$ docker run -d --network container:web php
2. 常用命令
查看网络
$ docker network ls
查看网络详细信息
$ docker network inspect 网络名
删除网络
$ docker network rm 网络名
创建网络
$ docker network create -d 网络类型 网络名称
volumes(数据卷)是用于持久化存储容器数据的一种机制。它本质上是容器上的一个或多个目录,这些目录可以绕过联合文件系统,与宿主机上的某个目录绑定关系。当容器中的程序对这些目录写入数据时,实际上是写入到与之绑定的宿主机目录上。
将宿主机的/root/test目录挂载到容器的/usr/local/test目录
$ docker run -d -v /root/test:/usr/local/test --name web nginx
查看卷
$ docker volume ls
删除卷
$ docke volume rm 卷名
创建卷,此卷的相关信息存储在本地,可使用docker volume inspect my-volume查看
$ docker volume create my-volume
使用创建的卷
$ docker run -d -v my-volume:/usr/local/test --name web nginx
Docker镜像仓库是Docker用来存储和管理镜像的服务,分为公共仓库(docker hub)和私有仓库(harbor)两种类型。公共仓库是开源的,任何人都可以注册,并将自己的镜像推送上去,进行共享。私有仓库是私有的,一般是公司内部部署,存储和管理容器镜像的。
登录镜像仓库,输入用户名/密码,登录之后可以向镜像仓库中推送拉取镜像
$ docker login 镜像仓库地址
退出镜像仓库地址
$ docker logout 镜像仓库地址
其中登录镜像仓库的用户名和密码存放在/root/.docker/config
文件中,可以此查看