基本概念
docker系统组成
- Docker系统有两个程序:docker服务端和docker客户端
- docker服务端:是一个服务进程,管理着所有的容器。也叫docker engine
- docker客户端:扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
大部分情况下,docker服务端和客户端运行在一台机器上
Docker三大核心组件
-
Docker 镜像 - Docker images
-
Docker 仓库 - Docker registeries
-
Docker 容器 - Docker containers
容器的三大组成要素
-
名称空间 namespace 容器隔离(pid,net,mnt,user,)
-
资源限制 cgroups 资源(内存,cpu)
-
文件系统 overlay2(UnionFS)
docker仓库
docker仓库其实只指的docker镜像仓库, Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。
在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。由于 Docker 使用一个统一文件系统,由于镜像不可写,所以镜像是无状态的。
同maven仓库类似,docker仓库也分共有仓库和私有仓库,共有仓库指的是
docker hub
私有仓库可以通过docker registry来搭建,开源的harbo是一个管理docker镜像的开源项目,也可以通过harbo来搭建私有docker仓库。
docker镜像
镜像是Docker最核心的技术之一,也是应用发布的标准格式。无论你是用docker pull image,或者是在Dockerfile里面写FROM image,从Docker官方Registry下载镜像应该是Docker操作里面最频繁的动作之一。
那么docker镜像是如何命名的,这也是Docker里面比较容易令人混淆的一块概念:Registry,Repository, Tag and Image。
- Registry 是镜像存储拉取服务,类似git server。提供镜像的上传下载以及存储服务。
- Repository 是用来组织镜像的,在Repository中可以指定Registry的服务地址,如果不指定则默认的远程仓库(/etc/docker/daemon.json中配置远程仓库),默认是docker hub公共的远程仓库。
- Tag ,镜像的标签,一般用来标识镜像的版本号。
完整的镜像名称格式如下:
仓库名称+镜像分类+tag名称(镜像版本)
完整镜像名称示例:
docker.io/library/nginx:v1
docker.io/library/nginx:latest
daocloud.io/library/nginx
上图中有的Repository中指定了Registry的服务地址,那么该镜像就会从指定的镜像仓库中获取镜像,其实不论是registry还是harbo搭建的私有仓库。我们在制作镜像并上传到私有仓库时都需要指定仓库地址的。
搜索镜像
#这种方法只能用于官方镜像库
#搜索基于 centos 操作系统的镜像
docker search centos
拉取镜像
docker pull tomcat:7
没有加registry,默认是从docker hub下载的,当然我们也可以指定registr比如下面的命令
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.16.3
当然如果我们在docker的配置文件中指定了私有仓库,默认就不会从docker hub中下载了。
查看本地镜像
docker image list
docker images
以上两个命令是一样的。
查看镜像详情
docker image inspect 镜像id
删除镜像
docker rmi daocloud.io/library/mysql
docker rmi 镜像id
注意:rmi和rm,镜像删除是rmi。docker rmi daocloud.io/library/mysql 是删除mysql所有相关tag的镜像。注意如果其中有mysql镜像正在被容器使用是不能删除的。
强制删除
docker rmi docker.io/ubuntu:latest --force
如果镜像正在被使用,需要加--force强制删除
只查看所有镜像的id
docker images -q
删除所有镜像
docker rmi $(docker images -q)
查看镜像制作的过程
#相当于dockfile
ocker history daocloud.io/library/nginx 使用镜像名或者镜像ID都可以
docker容器
Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。
创建容器不启动
docker create -it daocloud.io/library/centos:5 /bin/bash
创建并启动容器
docker run -it --restart=always centos /bin/bash #最常用
参数说明:
参数名 | 说明 |
---|---|
-i | 标准输入输出 |
-t | 分配一个终端或控制台 |
---restart=always | 容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭,也适用于create选项 |
-d | 后台运行容器,并返回容器ID |
--rm | 默认情况下,每个容器在退出时,它的文件系统也会保存下来.另一方面,也可以保存容器所产生的数据。但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。这个时候就需要--rm参数了。注意:--rm 和 -d不能共用 |
--name | 为容器分配一个名字,如果没有指定,docker会自动分配一个随机名称是 docker run子命令的参数 |
退出容器
命令行直接输入exit回车即可。
查看容器
#只查看运行状态的容器:
docker ps
#-a 查看所有容器
docker ps -a
#只查看所有容器id:
docker ps -a -q
查看容器详细信息
docker inspect 容器ID
容器的启停
docker stop 容器id或者name
docker start 容器id或者name
docker kill 容器id或者name #强制停止容器
docker restart 容器id或者name #重启容器
stop和kill的区别:
docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。
删除所有exited的容器
docker rm $(docker ps -qf status=exited)
-f:过滤
pause :暂停容器中所有的进程
unpause:恢复容器内暂停的进程,与pause对应
重命名
docker rename 容器id或者名称 新名字
实施监控
docker stats 容器id或name #实时监控某一个容器
docker stats #监控所有容器
logs、top、wait
- logs:使用logs命令查看守护式容器
可以通过使用docker logs命令来查看容器的运行日志,其中–tail选项可以指定查看最后几条日志,使用-f选项可以跟踪日志的输出,直到手动停止。
- top:显示一个运行的容器里面的进程信息
- wait :–捕捉容器停止时的退出码
#在第一个终端执行停止容器命令
docker stop 容器ID或name
#第二个终端操作
ocker wait 容器ID或name
docker run 之后容器退出的状态码:
0,表示正常退出
非0,表示异常退出(退出状态码采用chroot标准)
125,Docker守护进程本身的错误
126,容器启动后,要执行的默认命令无法调用
127,容器启动后,要执行的默认命令不存在
文件复制
- 从宿主机拷文件到容器里面
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
- 从容器里面拷文件到宿主机
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt
参考资料
https://blog.csdn.net/weixin_45641605/article/details/104782027