docker 基本概念

基本概念

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

image.png
上图中有的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 #监控所有容器

image.png

logs、top、wait

  • logs:使用logs命令查看守护式容器

可以通过使用docker logs命令来查看容器的运行日志,其中–tail选项可以指定查看最后几条日志,使用-f选项可以跟踪日志的输出,直到手动停止。

image.png

  • top:显示一个运行的容器里面的进程信息

image.png

  • 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

评论

公众号:mumuser

企鹅群:932154986

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×