一、镜像
1.1 获取镜像
docker pull user/repo:tag
1.2 查看镜像信息
查看所有镜像信息
docker images
docker image ls
为本地镜像添加新的标签,注意这样不同tag的镜像ID是一样的
docker tag user/repo:old_tag repo/new_tag
查看镜像的详细信息
docker inspect image_id
1.3 搜寻镜像
docker search image_name
1.4 删除镜像
注意:需要先删除该镜像生成的所有容器,才能删除镜像
删除所有指向该镜像的标签,然后删除该镜像文件本身
docker rmi image_id
docker image rm image_id
删除多个镜像
docker rmi <your-image-id> <your-image-id> ...
镜像只有一个标签就会删除镜像,否则删除标签
docker rmi user/repo:tag
在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:
docker image prune -a
1.5 生成镜像
保存容器为镜像
docker commit -m "message" container_id user/repo:tag
本地文件导入镜像
cat file_name | docker import - user/repo:tag
1.6 保存和载入镜像
保存镜像到当前目录
docker save -o filename.tar image_id
注意文件名的后缀是.tar
docker save -o filename.tar user/repo:tag
注意文件名的后缀是.tar
保存镜像到指定目录
docker save image_id > /path/image_file_name.tar
载入镜像
docker load -i filename.tar
1.7 上传镜像到仓库
docker push user/repo:tag
第一次使用时会提示输入登陆信息,账号与密码
二、容器
2.1 创建容器
新建的容器处于停止状态
docker create -it user/repo:tag
启动一个停止的容器
docker start container_id
创建并启动一个容器,允许用户通过bash进行交互
docker run -it user/repo:tag /bin/bash
-i
: 交互式操作
-t
: 终端
创建并启动一个容器,容器在后台运行
docker run -d user/repo:tag /bin/bash
查看本机存在的所有容器,去掉-a
,仅查看活动的容器
docker ps -a
docker container ls -a
查看容器输出信息
docker logs container_id
重命名容器
docker rename old_name new_name
2.2 终止容器
等待10s后终止容器
docker stop container_id
docker container stop container_id
立刻退出容器
docker kill container_id
在容器中输入命令exit
,立刻退出
在容器中ctrl+d
,立刻退出
查看终止状态的容器ID
docker ps -a -q
启动处于终止状态的容器
docker start container_id
让处于运行状态的容器终止,然后再启动它
docker restart container_id
2.3 进入容器
多个窗口会同步显示容器内容,一个窗口阻塞后,其它窗口也无法操作
docker attach container_id
另开一个终端进入容器
docker exec -it container_id /bin/bash
2.4 删除容器
删除处于终止状态的容器
docker rm container_id
docker container rm container_id
-f
:终止运行的容器,并删除容器
-v
:删除容器挂载的数据卷
删除所有已停止的容器
docker container prune
2.5 导出容器
与镜像导出的区别在于,舍弃了中间层,仅保存当前快照,体积较小。
不管是否处于运行状态,都可导出
docker export -o file_name.tar container_id
导入容器
docker import file_name user/repo:tag
导入容器后,形成一个新的镜像为user/repo:tag
,再根据镜像实例化命令创建一个新的容器即可。
三、数据卷
3.1 数据卷
在容器内创建数据卷,容器/
目录下会多一个dbdata
目录,/dbdata
,与/root
类似
docke run -it -v /dbdata ubuntu:18.04 /bin/bash
挂载主机目录作为数据卷,目录不存在会自动创建
docker run -it -v /home/user/dir:/root/dir ros:melodic /bin/bash
查看docker卷
docker volume ls
删除docker卷
docker volume rm 4e12af8913af
删除所有未使用的卷
docker volume prune
3.2 数据卷容器
创建dbdata_container
容器,并在容器中创建数据卷/dbdata
docke run -it -v /dbdata --name dbdata_container ubuntu:18.04 /bin/bash
挂载数据卷容器dbdata_container
到其它容器中,如果有多个数据卷容器,作为一个list放在--volumes-from
后面在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:
docker image prune -a
docker run -it --volumes-from dbdata_container ros:melodic /bin/bash
删除数据卷容器,删除了挂载的容器(包括dbdata_container
),数据卷并不会被自动删除,必须删除最后一个挂载它的容器时,显式调用-v
参数
docker rm -v dbdata_container container_id
四、网络
Docker 包括三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
docker system是用于管理磁盘空间的命令,docker system df,类似于df命令,专门用来查看docker的磁盘使用情况。
docker cp
1 从容器拷贝文件到宿主机
例如,将容器mycontainer中路径:/opt/testnew/下的文件file.txt拷贝到宿主机:/opt/test/路径下
拷贝方式为:docker cp 容器名:容器中要拷贝的文件名及其路径 要拷贝到宿主机里面对应的路径
在宿主机中执行命令如下:
docker cp mycontainer:/opt/testnew/file.txt /opt/test/
2 从宿主机拷贝文件到容器
例如,将宿主机中路径:/opt/test/下的文件:file.txt拷贝到容器:mycontainer的:/opt/testnew/路径下
拷贝方式为:docker cp 宿主机中要拷贝的文件名及其路径 容器名:要拷贝到容器里面对应的路径
同样还是在宿主机中执行命令如下:
docker cp /opt/test/file.txt mycontainer:/opt/testnew/
注意:不管容器有没有启动,拷贝命令都会生效
docker copy复制的时候容器中地址不能用~,得用/绝对地址,用pwd查看路径。使用-a命令进行
docker diff
Docker 容器内部获取自身容器 id 方法
进入容器
cat /proc/self/cgroup | head -1
输出:
12:cpuset:/docker/9440dd89c4052167611e467efd47e1feccabaad448594cbc90eb7fb3f12f4c3f
可以看出后面的 944 开头的就是容器自身的id。