docker简介
Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。
Docker可以让开方子打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux上也可以实现虚拟化。
docker架构
Docker运行时分为Docker引擎(也叫服务端守护进程就是下图的Docker daemon)和客户端工具,各种docker命令就是在使用客户端工具和docker引擎进行交互。
docker时C/S架构的服务器,客户端向守护进程发出请求,守护进程完成请求并返回结果。
docker的服务器和客户端可以运行在同一台宿主机上,也可以分开运行。
镜像和容器
Image(镜像)
:镜像就是一个Linux的文件系统,文件系统包含可以运行在Linux内核的程序以及相应的数据。
通过镜像启动容器,镜像就像可执行的包,其中包括运行应用程序所需要的所有内容:包含代码、运行时间、库、环境变量和配置文件。
Container(容器)
:镜像和容器的关系,就像类和实例,镜像是静态的定义,容器时镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停。
镜像分层
:docker可以在基础镜像上安装一些软件来扩展镜像
可以写的容器层
:当容器启动时,一个新的可写层被加载到了镜像的顶部。这一层通常被称为容器层,容器层之下的都叫镜像层。
所有对容器的改动-无论添加、删除还是修改文件都只会发生在容器层中。只有容器层时可写的,容器层下面的所有镜像层都是只读的。
容器层保存的时镜像变化的部分,不会对镜像本身进行任何修改。
总结就是容器层是记录的镜像层的修改,所有镜像层都是只读的,不会被容器修改,所有镜像可以被多个容器共享。
镜像有关的常用命令
docker实际上是有一个提供各种镜像的远程仓库docker hub
下载镜像
docker pull name:tage
docker pull ubuntu:20.04 现在被墙了,没办法从docker hub下载镜像了,可以配置一下
vim /etc/docker/daemon.json
将下面代码粘贴到上面文件
{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://your_preferred_mirror",
"https://dockerhub.icu",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
重新加载docker配置文件
systemctl daemon-reload
重启docker服务
systemctl restart docker.service
查看本地的镜像
docker images
删除一个镜像
docker image rm name:tag
docker rmi name:tag
创建一个container的镜像
docker [container] commit CONTAINER IMAGE_NAME:TAG
将镜像导出成为一个本地文件
docker save -o filename.tar IMGE_NAME:TAG
将镜像从文件中加载出来
docker load -i filename.tar
容器相关常用命令
根据一个镜像创建容器
docker create -it IMAGE_NAME:TAG
显示正在运行的容器
docker ps
显示所有容器
docker ps -a
启动容器
docker start CONTAINER
停止容器
docker start CONTAINER
重启容器
docker restart CONTAINER
创建并启动一个容器
docker run -itd ubuntu:20.04
进入容器
docker attach CONTAINER
退出并挂起容器
ctrl + p然后ctrl + q
退出容器并关闭
ctrl + d
在容器中执行命令
docker exec CONTAINEE COMMAND
删除容器
docker rm CONTAINER
将容器导出为文件.tar
docker export -o xxx.tar CONTAINER
将本地的tar文件导入成镜像并为镜像命名
docker import xxx.tar image_name:tag
export/import 会丢弃历史记录和元数据信息,仅保留当时容器的快照状态
save/load会 保存完整记录,体积更大
查看某容器内的全部进程
docker top CONTAINER
查看某容器内的统计信息
docker stats
本地和容器之间的数据交换
docker cp xxx CONTAINER:xxx
docker cp CONTAINER:xxx xxx
重命名容器
docker rename CONTAINER1 CONTAINER2
修改容器限制
docker update CONTAINER --memory 500MB