常用命令

  1. 启动常用命令
启动docker:               systemctl start docker
停止docker:               systemctl stop docker
重启docker:               systemctl restart docker
查看docker状态:           systemctl status docker
开机启动:                 systemctl enable docker
查看docker概要信息:       docker info
查看docker总体帮助文档:   docker --help
查看docker命令帮助文档:   docker 具体命令 --help
  1. 镜像常用命令
docker images 列出本地主机上的镜像
    参数:
        [ -a ] 含历史映像层
        [ -q ] 只显示镜像ID

docker search IMAGE_NAME 搜索镜像
    参数:
        [ --limit number ]

docker pull IMAGE_NAME[:TAG] 拉取镜像

docker system df  查看镜像/容器/数据卷所占的空间


docker rmi [-f 强制] IMAGE_NAME/IMAGE_ID  删除单个镜像

docker rmi -f $(docker images -qa) 删除全部

  1. 容器命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS:
    --name="容器名字"
    -d 后台运行容器
    -i 以交互模式运行容器
    -t 为容器重新分配一个伪输入终端
    -P 随机端口映射 大写P
    -p HOST_PORT:CONTAINER_PORT 指定端口映射 小写p
    -v HOST_DIR:CONTAINER_DIR 映射目录到容器

IMAGE:
    IMAGE:TAG

COMMAND:
    /bin/bash 在容器执行的命令

docker ps 列出当前所有正在运行的容器
    参数:
        -a 全部
        -l 最近创建
        -n 最近n个
        -q 只显示ID

docker start        CONTAINER_NAME/CONTAINER_ID   启动停止的容器
docker restart      CONTAINER_NAME/CONTAINER_ID   重启容器
docker stop         CONTAINER_NAME/CONTAINER_ID   停止容器
docker kill         CONTAINER_NAME/CONTAINER_ID   强制停止容器
docker rm           CONTAINER_ID                  删除单个容器
docker rm -f $(docker ps -qa)                     删除全部容器
docker logs         CONTAINER_ID                  容器日志
docker top          CONTAINER_ID                  容器内运行的进程
docker inspect      CONTAINER_ID                  查看容器配置
docker exec -it     CONTAINER_ID /bin/bash        交互式进入正在运行的容器, exit不会导致容器停止
docker attach       CONTAINER_ID                  进入正在运行的容器, exit会导致容器停止

一般用-d后台启动的程序, 再用exec进入对应容器实例


docker cp CONTAINER_ID:CONTAINER_DIR/FILE HOST_DIR/ 拷贝容器文件到宿主机

docker export CONTAINER_ID > FILE.tar.gz             导出快照
cat FILE.tar.gz | docker import - CONTAINER_NAME:TAG 导入快照

docker save -o FILE.tar.gz CONTAINER_NAME:TAG        导出镜像
docker save CONTAINER_NAME:TAG > FILE.tar.gz         导出镜像
docker load -i FILE.tar.gz                           导入镜像
docker load <  FILE.tar.gz                           导入镜像

export 和 save的区别:
    docker load命令导入镜像库存储文件到本地镜像库;
    docker import命令导入一个容器快照到本地镜像库.
    容器快照将会丢弃所有的历史记录和元数据信息, 
    而镜像存储文件将保存完整记录, 体积也会更大.

Docker环境信息    info、version
镜像仓库命令      login、logout、pull、push、search
镜像管理          build、images、import、load、rmi、save、tag、commit
容器生命周期管理  create、exec、kill、pause、restart、rm、run、start、stop、unpause
容器运维操作      attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update
容器资源管理      volume、network
系统信息日志      events、history、logs
  1. 联合文件系统
镜像加载原理
docker的镜像实际上由一层一层的文件系统组成, 这种层级的文件系统就是 UnionFS.

UnionFS
联合文件系统.Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统, 
它支持对文件系统的修改作为一次提交来一层层的叠加, 同时可以将不同目录挂载到同一个
虚拟文件系统下(unite several directories into a single virtual filesystem).
Union 文件系统是 Docker 镜像的基础.镜像可以通过分层来进行继承, 
基于基础镜像(没有父镜像), 可以制作各种具体的应用镜像.

特性:一次同时加载多个文件系统, 但从外面看起来, 只能看到一个文件系统, 
联合加载会把各层文件系统叠加起来, 这样最终的文件系统会包含所有底层的文件和目录

bootfs
boot file system.主要包含bootloader和kernel, bootloader主要是引导加载kernel,
Linux刚启动时会加载bootfs文件系统, 在Docker镜像的最底层是bootfs.
这一层与我们典型的Linux/Unix系统是一样的, 包含boot加载器和内核.
当boot加载完成之后整个内核就都在内存中了, 此时内存的使用权已由bootfs转交给内核, 
此时系统也会卸载bootfs.

rootfs
root file system.在bootfs之上.包含的就是典型 Linux 系统中的 /dev, /proc, /bin,
/etc 等标准目录和文件.rootfs就是各种不同的操作系统发行版, 比如Ubuntu, Centos等等.

对于一个精简的OS, rootfs可以很小, 只需要包括最基本的命令、工具和程序库就可以了, 
因为底层直接用Host的kernel, 自己只需要提供 rootfs 就行了.
由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别,
因此不同的发行版可以公用bootfs.
  1. Commit 创建自定义镜像
docker commit [OPTIONS] CONTAINER_ID NEW_IMAGE:[TAG]
    OPTIONS:
        -m="附加说明信息"
        -a="作者"
        docker commit -m "add vim" -a="zk" f8c8c578d3c1 zk/ubuntu:1.0

docker commit [OPTIONS] CONTAINER_ID [REPOSITORY[:TAG]]
二、 镜像仓库
  1. 阿里云镜像仓库
登陆
docker login --username=XXX registry.cn-hangzhou.aliyuncs.com

拉取
docker pull registry.cn-hangzhou.aliyuncs.  com/ns-2023/lib-2023:[镜像版本号]

推送
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ns-2023/lib-2023:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/ns-2023/lib-2023:[镜像版本号]

  1. 搭建自己的镜像仓库
# 拉取镜像
docker pull registry

# 启动registry容器
docker run -d -p 5000:5000 -v /registry:/tmp/registry[:rw/ro 读写挂载/只读挂载] --privileged=true registry

# 将改动的容器转为镜像
docker commit -m="add vim" -a="zk" 4d69fa4a6400 mycentos:1.0

# 查看本地私有仓库
curl -XGET http://127.0.0.1:5000/v2/_catalog

# 配置文件添加 insecure-registries 支持http
cat /etc/docker/daemon.json
{
"registry-mirrors":[
   "https://bhtknto5.mirror.aliyuncs.com",
   "https://yo3sdl2l.mirror.aliyuncs.com",
   "https://blkjc4x3.mirror.aliyuncs.com",
   "https://gfmnzvu1.mirror.aliyuncs.com",
   "https://yxzrazem.mirror.aliyuncs.com",
   "http://hub-mirror.c.163.com",
   "https://registry.docker-cn.com",
   "http://hub-mirror.c.163.com",
   "https://docker.mirrors.ustc.edu.cn"
   ],
   "insecure-registries": ["127.0.0.1:5000"]
}

# 推送
docker tag mycentos:1.0 127.0.0.1:5000/mycentos:1.0
docker push 127.0.0.1:5000/mycentos:1.0   

# 查看
curl -XGET http://127.0.0.1:5000/v2/_catalog
{"repositories":["mycentos"]}

# 拉取
docker pull 127.0.0.1:5000/mycentos:1.0
  1. 快速继承其他容器的卷 –volumes-from CONTAINER_ID/CONTAINER_NAME
docker run -it --privileged=true --name centos1 -v /root/zk:/tmp/zk centos:7 /bin/bash
docker run -it --rm --privileged=true --name centos2 --volumes-from centos1 centos:7 /bin/bash
# 进入容器 centos 查看 /tmp/zk
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。