Docker基础知识 + 基础命令

namespace、cgroup、联合文件系统(容器的核心技术 )

# namespace
    pid namespace   # 隔离进程id
    net namespace   # 隔离网络接口
    mnt namespace   # 文件系统挂载点隔离
    ipc namespace   # 信号量,消息队列和共享内存的隔离
    uts namespace   # 主机名和域名的隔离

# cgroup        # 是一种linux内核功能,可限制和隔离进程的资源使用情况(CPU、内存、磁盘I/O、网络等)

# 联合文件系统    # 又叫UnionFS,是通过创建文件层进行操作的文件系统,常用的联合文件系统有AUFS、Overlay2、Devicemapper等

容器、镜像、仓库(三大核心概念)

# 镜像image   
    是一个只读的文件和文件目录的组合体,是静态只读文件,是docker容器启动的先决条件

# 容器
    容器是镜像运行的实体,
    容器运行着真正的应用进程,
    容器有初建、运行、暂停、停止、删除五种状态。

# 仓库
    集中存放镜像的地方,最大的仓库 dockerhub

镜像image的常见操作方法

# 拉取镜像
    #语法格式
    docker pull <镜像名称>:<标签>
    docker pull nginx       # 拉取docker官方最新版nginx(即 latest 标签)
    docker pull nginx:1.21  # 拉取docker官方指定版本nginx
    docker pull docker.io/nginx                 # 从指定镜像仓库docker.io拉取最新版nginx
    docker pull myregistry.com/my_namespace/my-image:mytag                          # 从指定私有镜像仓库拉取特定镜像的特定tag版本
    docker pull --platform=linux/arm64 myregistry.com/my_namespace/my-image:mytag   # 拉取指定架构平台的镜像

# 查看镜像  
    [root@localhost ~]# docker images   # 查看本地镜像列表
    镜像的仓库名   标签       镜像唯一ID       镜像创建时间      镜像大小
    REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
    nginx        latest    3b25b682ea82   5 weeks ago     192MB
    mysql        5.7.44    5107333e08a8   11 months ago   501MB

    # 查看特定镜像的详细信息
    docker inspect <image id|image name:tag>    # 返回JSON格式的详细信息,含镜像的配置、创建时间、大小、环境变量等
    docker inspect nginx:latest

    # 查看镜像的历史记录
    docker history <image id|image name:tag>    # 显示了镜像构建的每一层,包括每层的大小和执行的命令
    docker history nginx:latest

    # 查看镜像的大小(使用 docker images --format 命令按格式化输出,仅查看镜像的名称、标签和大小)
    [root@localhost ~]# docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
    REPOSITORY   TAG       SIZE
    nginx        latest    192MB
    mysql        5.7.44    501MB

# 重命名镜像(可以对镜像名或者tagj进行操作)
    # 语法
    docker tag <旧镜像名称:旧标签> <新镜像名称:新标签>
    docker tag nginx:latest mynginx:latest      # 将nginx:latest镜像重命名为mynginx:latest
    docker tag nginx:latest mynginx:l.21        # 将nginx:latest镜像重命名为mynginx:1.21

    docker tag bbbbd59a03f3 my/cen:v3
    docker tag my/centos:v2.0.1 192.168.122.20:5000/my/centos:v2.0.1

    # 删除旧tar镜像tag语法(镜像内容仍然保留,只是旧标签被移除)
    docker rmi <镜像名称:旧标签>
    docker rmi nginx:1.21       # 当一个镜像有多个标签时,删除nginx镜像的tag标签1.21

    #释放磁盘空间,当你docker rmi image_id后,其实并没有释放磁盘空间
    docker system prune -a

# 导入和导出镜像
    # 导出镜像(将centos:7.5.1804的本地镜像,保存成一个tar包,可用于分享)
    docker save -o centos.tar.gz centos:7.5.1804
    # 导入镜像
    docker load < centos.tar.gz                             # 方式一
    docker load --input centos.tar.gz                       # 方式二
    cat centos7.5-tar.gz | docker import - my/centos:7.5    # 方式三,导入时指定了仓库名、image名称、tag(Tips:名字必须是tar.gz结尾的文件)

# 删除镜像
    #语法
    docker rmi <镜像ID或镜像名称:标签>
    docker rmi image_id
    docker rmi my/centos:V2.0.1
    docker rmi -f image_id              # 强制删除
    docker rmi -f $(docker ps -a -q)    # 删除所有的docker镜像,-q会列出所有的容器ID

    # 同时删除多个镜像
    docker rmi <镜像ID1> <镜像ID2>        
    docker rmi nginx:latest ubuntu:20.04
    docker rmi $(docker images -q)      # 删除所有镜像(docker images -q 会列出所有镜像的 ID)

    # 删除未使用的镜像(dangling 悬空镜像:是指没有标签的镜像,通常是在构建新镜像或更新镜像时产生的中间层)
    docker image prune
    docker image prune -f           # 不逐个确认,全部强制删除未使用的镜像
    docker image prune -a           # 删除所有未使用的镜像
    docker image prune -af          # 不逐个确认,删除所有未使用的镜像

# 上传镜像(要先打个TAG才能上传)
    # 完整仓库地址示例
    docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/2018/smokeping:[镜像版本号]
    docker push registry.cn-shenzhen.aliyuncs.com/2018/smokeping:[镜像版本号]

# 基于Dockerfile 构建镜像
# 基于现有容器构建镜像
#查看帮助
    docker help run    等

#查询当前运行中的有那些docker程序
    docker ps       #查看运行中的容器
    docker ps -a    #查看所有容器
    docker version  #检查是否安装成功
    docker stop c5644b1f4a64|NAME   #停止容器

#查看docker hub里面有哪些mysql的容器
    docker search mysql

#运行镜像,创建容器并启动一个交互终端
    #-t 表示分配一个伪终端 
    #-i 让容器的标准输入打开
    #/bin/bash指要运行什么命令)
    #-p 222:80  指定宿主机用222端口来映射docker容器的80端口,这样不管是宿主机重启还是容器重启,222端口始终映射到80端口,除非镜像删除,才会释放
    #-P 80  宿主机会使用一个还未使用的端口,与docker容器的EXPOSE 80端口进行匹配,当容器重启,宿主机的端口会变动)
    #--name 为容器起一个名字,方便以后查找
    docker run -it opensuse /bin/bash
    docker run --rm -it opensuse /bin/bash      # --rm 停止容器后,自动删除
    docker run --rm -it --name debian12 my-arm32-debian12:latest /bin/bash
    docker run -d -p 222:80 --name jichu my/centos:v2.0.1

#已经在后台执行的docker容器,可以用下面的命令进入
    docker exec -ti jichu /bin/bash

# 将本地文件|目录,复制到docker 中
    docker cp ./jre1.8.0_361/ 958ff0bdf211:/root/
    docker cp ./jre-9.0.4/ 958ff0bdf211:/root/

# 从容器中复制文件到本地
    docker cp <container_name_or_id>:<container_file_path> <local_file_path>

#查看容器修改了哪些文件
docker diff smokeping

#使用Dockerfile快速构建一个环境
    docker build -t registry_url/namespace/image_name:V2.0.1 /root/Dockerfile

docker容器启动有两种方式
1:基于镜像新建容器并启动
    docker run centos cal   #启动并打印日历

2:基于某个镜像创建一个镜像(创建完是不会启动的),然后手动启动
    docker create --name mysql_new -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql
    docker start mysql_new

3:让容器在守护状态下运行(-d 参数,表示daemon)

如何查看docker image 有那些标签

# 对于公共仓库
    dnf -y install skopeo
    #skopeo list-tags docker://docker.io/<repository>/<image>       # 通常 <repository> 为 library 表示官方镜像仓库,image 表示镜像名字
    skopeo list-tags docker://docker.io/library/python

# 对于自建的私有仓库(只要你知道镜像名称和地址,也可以用上面的方式)
    curl -X GET "https://<your-registry>/v2/<image-name>/tags/list"
    # 比如阿里云 ACR 需要验证,如下会报错
    curl -X GET "https://registry.cn-hangzhou.aliyuncs.com/v2/images/my-debian12/tags/list"

# 另一种方法,去下面这个网址   (在第二栏输入框,输入你要查询docker镜像  ,比如你的镜像地址是 coturn/coturn:edge-alpine   你就输入 coturn/coturn )
    https://explore.ggcr.dev/

如何创建属于自己镜像

方法一:使用现有镜像进行更改,更该后再进行commit

    docker run -t -i centos /bin/bash
    #进入容器后,安装wget,然后退出
    #c5644b1f4a64 指定根据那个镜像进行创建,my/centos:v2.0.1  (分别是用户,镜像名,TAG)
    docker commit -m 'my new centos' -a 'sada@www.com' c5644b1f4a64 my/centos:V2.0.1 

    #查看刚才创建的容器,然后启动
    docker images
    docker run -ti my/centos:V2.0.1 /bin/bash

方法二:使用Dockefile进行创建镜像

先创建一个Dockerfile文件(该文件包含如何创建镜像的指令,该文件一行表示一层,最多只能127层)

    touch Dockerfile
    vi Dockerfile
#注释,安装时要指定 -qqy 不然可能报错,(测试过只加 -y也可以)
FROM centos
MAINTAINER REGAN 88@wsfnk.com
RUN yum -qqy install python

    #注意后面有个点,.表示在当前目录寻找Dockerfile文件
    docker build -t='my/centos:V2.0.1' .
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/264.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2024/11/24作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录