DOCKER的常用命令

DOCKER的常用命令–持续更新中

镜像相关命令

镜像结构底层其实是UnionFS,即联合文件系统,有多层文件系统构成,我们再执行下载时可以观察到,镜像实质是按层进行的下载,分层结构的目的是为了共享资源。

1、查看镜像相关命令

  • 查看镜像: docker image ls 等价于 docker images
  • 查看所有镜像:docker images -a
  • 查看镜像image iD: docker images -q
  • 查看所有镜像image ID :docker images - qa
  • 查看镜像摘要信息:docker images - -digests
  • 查看镜像完整信息:docker images --no-trunc

2、镜像移除相关命令

  • 移除特定镜像:eg.移除ngix , docker rmi nginx
  • 强制移除镜像:docker rmi -f nginx
  • 删除多个镜像(用空格连接):docker rmi -f ngix hello-world
  • 查询所有image ID号并完成批量删除镜像:docker rmi -f $(docker images -qa)

3、镜像搜索相关命令

  • HUB上搜索镜像:docker search 镜像 eg. docker search tomcat (返回字段信息:名称,描述,星级,是否官方,是否自动构建)
  • HUB上搜索星级30星以上的镜像:docker search -s 30 tomcat
  • HUB上搜索星级30星以上的镜像并展开详细描述:docker search -s 30 --no-trunc tomcat
  • HUB上搜索星级30星以上且属于自动构建的镜像并展开详细描述:docker search -s 30 --no-trunc --automated tomcat

4、镜像下载相关命令

  • docker pull 镜像:版本号 e.g. docker pull tomcat等价于docker pull tomcat:lastest

5、镜像提交相关命令

  • docker commit -m=‘描述信息’ -a=‘作者’ 容器ID 要创建的目前镜像名:[标签名tag] 作用:提交容器副本(即修改后的容器),使之成为一个新的镜像
    e.g.docker commit -m=‘tomcat without docs’ -a=‘dongminghao’ ccda50862dae test/mytomcat

容器相关命令

1、交互式虚拟伪终端方式新建并运行一个容器:

  • docker run -it imageid
  • 参数说明: -I:交互式 -t :终端方式 - -name:用来指定容器名称 -P 随机端口映射 -p:指定端口映射 (-p的四种方式:1、ip:hostPort:containerPort 2、ip:containerPort 3、hostPort:containerPort 4、containerPort)
  • e.g. docker run -it -p 8888:8080 tomcat 8888是docker对外端口,宿主机访问时用的端口 8080 是tomcat的对外端口

2、守护式启动一个容器(非交互式):

  • docker run -d imageid 后台方式运行,容器运行的命令如果不是一直挂起的命令(top,tail),就会自动退出

3、查看容器:

  • docker ps
  • 参数说明:
    • -a:列出当前所有正在运行的容器,和历史上运行过的容器
    • -l:显示最近创建的容器
    • -n:显示最近n个创建的容器
    • -q:显示容器编号
    • –no-trunc:不截断输出(显示详细信息)

4、退出容器(交互式退出):

  • 方式一:exit(关闭并退出容器)
  • 方式二:control +p+q(退出但并不关闭容器)

5、启动容器:

  • docker start containerID , e.g:docker start 8074ed6fc954

6、重启容器:

  • docker restart containerID

7、停止容器:

  • docker stop containID

8、强制停止容器:

  • docker kill containID

9、删除已停止容器:

  • docker rm containID

10、一次性删除所有容器:

  • docker rm -f $(docker ps -a -q) 或者 docker ps -a -q | xargs docker rm

11、查看docker日志:

  • docker logs -f -t —tail n containerID
  • 参数说明:
    • -t 是加入时间戳
    • -f 跟随最新的日志打印
    • –tail 数字 显示最后几条

12、查看docker容器内的进程:

  • docker top containerID

13、查看docker容器内部细节:

  • docker inspect containerID 以json串的形式返回容器内部细节

14、重新进入正在运行但是退出的交互式容器(前提是以control+P+Q的方式退出的容器):

  • 方式一:进入容器交互式 docker attatch containerID
  • 方式二:进入容器并在容器中执行相关操作并退回宿主机 docker exec -it containerID ls -l /tmp
  • 其中:docker exec -it containerID /bin/bash 等价于 docker attatch containerID

15、将容器内数据拷贝到主机(宿主机上运行):

  • docker cp 容器ID:容器路径 目的主机路径

容器数据卷相关理念:

目的即实现数据持久化,完成数据的迁移与同步,即容器之间的资源共享。
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过UnionFileSystem提供一些用于持续存储或共享数据的特性。
卷的目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

特点:
1、数据卷可在容器间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止

容器数据卷相关命令:

1、添加容器数据卷:

  • 方式一:命令添加方式 docker run -it -v /宿主机的绝对目录:/容器的内目录 镜像名
    • eg. docker run -it -v /Users/admin/mydataVolumn:/dataVolumnContainer centos
      • 通过inspect命令可以查询到相关信息

          "Type": "bind",
          "Source": "/Users/admin/mydataVolumn",
          "Destination": "/dataVolumnContainer",
          "Mode": "ro",
          "RW”:true,
          "Propagation": "rprivate"
        
      • 备注:此时宿主机与容器的数据卷已经同步共享,随便修改宿主机或容器上的数据卷内容,两者都可以保持同步内容更新;容器在停止退出后,主机修改文件,当重新运行容器时,文件仍可以同步到容器中。

    • e.g. docker run -it -v /Users/admin/mydataVolumn:/dataVolumnContainer:ro centos
      • 通过inspect命令可以查询到相关信息

         "Type": "bind",
         "Source": "/Users/admin/mydataVolumn",
         "Destination": "/dataVolumnContainer",
         "Mode": "ro",
         "RW": false,
         "Propagation": "rprivate"
        
      • 备注:容器内目录只读不可写 read-only操作

  • 方式二:DockerFile添加添加方式
    • 步骤一:根目录下新建mydocker并进入

    • 步骤二:在Dockerfile中使用VOLUME指令类给镜像添加一个或多个数据卷

        VOLUME语法规则:	VOLUME[“/dataVolumnContainer1”,“/dataVolumnContainer2”,“/dataVolumnContainer3”]
      
    • 步骤三:FIle构建 构建dockerfile文件,文件内容如下:

        #volume test
        FROM centos
        VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]  #定义两个数据卷
        CMD echo "finished,---------success1"
        CMD /bin/bash
      
    • 步骤四:build生成镜像 获得一个新镜像 dongminghao/centos
      docker build -f /Users/admin/mydocker/dockerfile -t dongminghao/centos .

      • 运行后,提示信息如下:

          Sending build context to Docker daemon  2.048kB
          Step 1/4 : FROM centos
          ---> 67fa590cfc1c
          Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
          ---> Running in 8b243d47a2a6
          Removing intermediate container 8b243d47a2a6
           ---> 442b5f347138
          Step 3/4 : CMD echo "finished,---------success1"
           ---> Running in 5d2a3639c3de
          Removing intermediate container 5d2a3639c3de
          ---> b8cd1b9177dc
          Step 4/4 : CMD /bin/bash
          ---> Running in 4ca239604d34
          Removing intermediate container 4ca239604d34
          ---> 88e38f8371d2
          Successfully built 88e38f8371d2
          Successfully tagged dongminghao/centos:latest
        
      • 结果:

          REPOSITORY        TAG             IMAGE ID          CREATED      SIZE
          dongminghao/centos   latest    88e38f8371d2 34 seconds ago      202MB		
        
    • 步骤五:运行新镜像,并进入容器
      docker run -it 88e38f8371d2
      通过ls 命令查看通过dockerfile生成的数据卷 dataVolumeContainer1与dataVolumeContainer2

    • 步骤六: docker inspect containerID 可以查看宿主机默认的数据卷存放路径 : /var/lib/docker/volumes/ee813e32423ab0ccaf71d446218dfe143638a70520f5cbf02b5411b58f828e1b/_data

      • LINUX系统直接查询上述返回的数据卷路径即可,即可查到宿主机上的数据卷
      • MAC系统会出现路径不存在问题,解决方案如下:
        • (1):screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 加回车
        • (2) 再执行 cd /var/lib/docker/volumes/ee813e32423ab0ccaf71d446218dfe143638a70520f5cbf02b5411b58f828e1b/_data 即可进入相应的数据卷中,这时宿主机与容器的数据卷已经实现同步,与方式一效果相同
        • 备注:
          如果需要干掉这个screen,按ctrl+a + k,最后按y确认即可以kill掉这个screen了;
          如果只是暂时退出这个screen,下次再进去,使用ctrl+a + d,而如果需要再次进入的时候应当使用screen -dr,否则使用screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty再进去会是一片乱码

内容总结来源

[1] 尚硅谷docker容器讲解视频

你可能感兴趣的:(docker,docker容器常用命令)