Docker基础操作

目录

使用阿里源下载安装

拉取镜像

配置镜像加速器

直接拉取最近版

指定镜像的标签版本

从私有仓库拉取镜像 

从本地文件加载镜像

从私有镜像仓库拉取镜像

创建阿里的私有仓库

镜像基础操作

容器基础操作

镜像和容器的格式化输出 


使用阿里源下载安装

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
[root@localhost ~]# yum list docker-ce --showduplicates #查看docker-ce可用版本信息
Last metadata expiration check: 1:04:59 ago on Wed Jul 17 07:45:41 2024.
Installed Packages
docker-ce.x86_64                                                        3:27.0.3-1.el9                                                           @docker-ce-stable
Available Packages
docker-ce.x86_64                                                        3:20.10.15-3.el9                                                         docker-ce-stable 
docker-ce.x86_64                                                        3:20.10.16-3.el9                                                         docker-ce-stable 
docker-ce.x86_64                                                        3:20.10.17-3.el9                                                         docker-ce-stable 
docker-ce.x86_64                                                        3:20.10.18-3.el9                                                         docker-ce-stable
...
...
...
docker-ce.x86_64                                                        3:26.1.3-1.el9                                                           docker-ce-stable 
docker-ce.x86_64                                                        3:26.1.4-1.el9                                                           docker-ce-stable 
docker-ce.x86_64                                                        3:27.0.1-1.el9                                                           docker-ce-stable 
docker-ce.x86_64                                                        3:27.0.2-1.el9                                                           docker-ce-stable 
docker-ce.x86_64                                                        3:27.0.3-1.el9                                                           docker-ce-stable

安装校验

[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           27.0.3
 API version:       1.46
 Go version:        go1.21.11
 Git commit:        7d4bcd8
 Built:             Sat Jul 29 15:20:03 2024
 OS/Arch:           linux/amd64
 Context:           default
 
Server: Docker Engine - Community
 Engine:
  Version:          27.0.3
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       662f78c
  Built:            Sat Jul 29 15:20:03 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.18
  GitCommit:        ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
 runc:
  Version:          1.7.18
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

相似命令还有

docker --version  # 查看 Docker 版本
docker -v         # 查看 Docker 版本
docker info       # 查看 Docker 系统信息

#启动
systemctl start docker
#停止
systemctl stop docker
#重启
systemctl restart docker
#查看Docker服务状态
systemctl status docker

拉取镜像

官方镜像仓库: https://hub.docker.com/icon-default.png?t=N7T8https://hub.docker.com/

阿里云加速器:
阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台欢迎登录阿里云,全球领先的云计算及人工智能科技公司,阿里云为200多个国家和地区的企业、开发者和政府机构提供云计算基础服务及解决方案。阿里云云计算、安全、大数据、人工智能、企业应用、物联网等云计算服务。icon-default.png?t=N7T8https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

网易云镜像仓库:

登录icon-default.png?t=N7T8https://c.163yun.com/hub#/library

配置镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
        "https://docker.rainbond.cc" ,
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://pilvpemn.mirror.aliyuncs.com",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
   ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

这个命令的作用是将一个 JSON 格式的配置内容写入 /etc/docker/daemon.json 文件中,并包含了几个重要的配置项:

  • registry-mirrors:配置了多个 Docker 镜像加速器,用于加速 Docker 镜像的下载速度。
  • exec-opts:指定 Docker 使用 systemd 作为 cgroup driver。
  • log-driverlog-opts:配置 Docker 日志的驱动和相关选项,这里设置日志文件的最大大小为 100MB。
  • storage-driver:指定 Docker 使用的存储驱动为 overlay2

扩展:

insecure-registries 是 Docker 的配置选项之一,用于指定不安全的镜像仓库地址。通常情况下,Docker 默认只信任使用 TLS/SSL 安全连接的镜像仓库(即使用 HTTPS 协议的镜像仓库)。如果你需要连接到一个不支持 TLS/SSL 安全连接的镜像仓库,就需要将该镜像仓库地址添加到 insecure-registries 中。 

例:

{
  "insecure-registries": [
    "http://10.35.186.188:8882"
  ]
}

直接拉取最近版

这条命令会从 Docker Hub(默认的镜像中心)拉取 Rocky Linux 的最新版本。

指定镜像的标签版本

 指定镜像的标签版本,例如:

docker pull rockylinux:9.3-minimal

从私有仓库拉取镜像 

如果你的镜像不在 Docker Hub 上,而是存储在其他私有或公有的 Docker 仓库上,可以使用类似的 docker pull 命令,并指定仓库地址和镜像名称:

docker pull your-registry.com/your-image:tag

从本地文件加载镜像


有时候,你可能已经有了一个 Docker 镜像文件(以 .tar 结尾),可以使用 docker load 命令加载到 Docker 中:

docker load -i /path/to/your-image.tar

这样会将本地文件中的镜像加载到 Docker 中,而不需要通过网络拉取。

从私有镜像仓库拉取镜像

登录私有镜像仓库

docker login --username=aliyun4224941099 registry.cn-hangzhou.aliyuncs.com

输入密码后登录成功

查看当前登录信息

cat ~/.docker/config.json

拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/zzdict/tty:latest

登出 

docker logout registry.cn-hangzhou.aliyuncs.com

创建阿里的私有仓库

要记住这个设置的密码,登录镜像仓库时需要使用 

镜像基础操作

拉取镜像

docker pull mysql

#docker pull <镜像名>:<标签>

查看镜像

docker images

删除指定镜像

docker rmi <镜像id或镜像名>

搜索镜像

docker search <镜像名>

 保存镜像为本地文件,也可结合压缩一起使用

docker save -o /opt/latest.tar.gz my-rocky:latest
或
docker save my-rocky:latest > /opt/latest.tar.gz

导入镜像文件

docker load -i /opt/latest.tar.gz
或
docker load < /opt/latest.tar.gz
或
cat /opt/latest.tar.gz | docker load

上传镜像到私有仓库

1. 登录

[root@localhost ~]# docker login --username=aliyun4224941099 registry.cn-hangzhou.aliyuncs.com    #登录到阿里私有仓库
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-stores

Login Succeeded

#这样就是登录成功了

2. 重新标记镜像

[root@localhost ~]# docker tag dfaa211c6b30 registry.cn-hangzhou.aliyuncs.com/zzdict/tty:latest
#重新标记,这个代表新名称和旧名称都指向同一个镜像
[root@localhost ~]# docker images
REPOSITORY                                     TAG              IMAGE ID       CREATED        SIZE
my-rocky                                       latest           dfaa211c6b30   7 months ago   118MB
rockylinux                                     9.3-minimal      dfaa211c6b30   7 months ago   118MB
registry.cn-hangzhou.aliyuncs.com/zzdict/tty   latest           dfaa211c6b30   7 months ago   118MB
rockylinux                                     8                c79048e50f5f   7 months ago   198MB
centos                                         centos7.9.2009   eeb6ee3f44bd   2 years ago    204MB

3. 上传镜像到阿里云镜像仓库

[root@localhost ~]# docker push registry.cn-hangzhou.aliyuncs.com/zzdict/tty:latest  #上传
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/zzdict/tty]
49f400400d74: Pushed 
latest: digest: sha256:d1f81ec149c64c10e0626b8f4ae561b50b3567901a65cd52406dbff065196f9d size: 528

4. 登出

[root@localhost ~]# docker logout registry.cn-hangzhou.aliyuncs.com

注:

上传到镜像仓库的语法是 docker push 域名/命名空间/仓库名:标签号
若不写域名,则默认匹配的是官方docker hub镜像平台里
例如:
docker push rockylinux:8          #默认会上传到docker hub平台中的library命名空间里
docker push zzdict/rockylinux:8   #这里就是上传到docker hub中指定的zzdict命令空间里

简单总结如下:

# 拉取镜像
docker pull IMAGE_NAME[:TAG]

# 查看本地所有镜像
docker images

# 查看特定镜像的详细信息
docker inspect IMAGE_NAME

# 查找本地镜像
docker search KEYWORD

# 删除本地镜像
docker rmi IMAGE_ID 或 REPOSITORY:TAG
选项 -f 或 --force 可以强制删除镜像

# 删除悬空的镜像
docker image prune

#列出所有镜像的 ID
docker images -q

#删除所有镜像
docker rmi $(docker images -q)

# 删除所有未使用的镜像
docker image prune

# 保存镜像为本地文件
docker save -o 输出文件路径 IMAGE_NAME[:TAG]

# 加载本地镜像文件
docker load -i 输入文件路径

# 打标签给镜像
docker tag 源镜像[:TAG] 目标镜像[:TAG]

# 上传镜像到仓库
docker push 仓库地址[:TAG]

# 构建镜像
docker build -t 镜像名称[:TAG] Dockerfile路径

# 查看镜像历史
docker history 镜像名称

# 查看镜像的大小
docker image inspect --format='{{.Size}}' 镜像名称

# 清理不使用的镜像、容器和其他资源
docker system prune

# 清理所有未使用的镜像、容器和网络
docker system prune -a

# 显示镜像摘要
docker images --digests

# 过滤 Docker 镜像
docker images -f或--filter  参数
支持参数:
dangling:显示标记为空的镜像,值只有true和false
label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的
before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表
since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像
reference:添加正则进行匹配

# 查看 Docker 镜像的历史层次结构和变更记录
docker history 参数 镜像名/ID
-H, --human=true|false:以可读的格式显示镜像大小和时间(默认为 true)。
--no-trunc:不截断输出。
-q, --quiet:仅显示镜像 ID。

容器基础操作

创建容器

docker create -it --name my-container my-rocky:latest /bin/bash

创建时并启动进入容器

docker run -it --name ceshi centos:centos7.9.2009 /bin/bash

创建并退出容器且不停止该容器进程

docker run -dit --name ceshi2 centos:centos7.9.2009 /bin/bash
  • -d:表示在后台运行容器(detached mode)。
  • -it:结合使用 -i(交互式操作)和 -t(分配一个伪终端)

如果已经进入容器了,想要退出在后台运行且不停止使用ctrl+p+q快捷键;如果使用ctrl+d或exit退出容易会正常停止。

进入一个已运行的容器

docker exec -it 容器名 或 容器ID /bin/bash

创建并退出容器且不停止该容器进程并执行命令

docker run -dit --name ceshi2 centos:centos7.9.2009 /bin/bash -c "sleep 300"
  • /bin/bash -c参数是在容器内执行要的命令

查看某个容器状态

docker top ceshi1

输出注解:
CONTAINER ID:容器的唯一标识符。
NAME:容器的名称。
CPU %:容器使用的 CPU 百分比。
MEM USAGE / LIMIT:内存使用量和限制,显示当前使用量和总限制。
MEM %:内存使用的百分比。
NET I/O:网络输入输出。
BLOCK I/O:块输入输出。
PIDS:容器中运行的进程数。

 容器端口映射

小写的-p 参数可以指定端口映射

docker run -dit -p 8000:80 --name web fffffc90d343 nginx -g 'daemon off;'

大写的 -P 参数告诉 Docker 在运行容器时自动将容器内部的所有暴露端口映射到宿主机的随机端口上。 

docker run -dit -P --name web2 fffffc90d343 nginx -g 'daemon off;'

目录映射

-v 参数可以进行目录映射

docker run -dit -v /etc/hosts:/etc/hosts dfaa211c6b30 /bin/bash
docker run ... -v <宿主机路径>:<容器路径> ...

修改容器内配置 

1. 从容器中提取文件到宿主机

docker cp CONTAINER_ID:CONTAINER_PATH LOCAL_PATH
注:
CONTAINER_ID:源容器的 ID 或者名称。
CONTAINER_PATH:容器内部的源文件路径。
LOCAL_PATH:要复制到的宿主机上的本地目录路径。

例:
docker cp 490d08740844:/etc/nginx/conf.d/default.conf ./

2. 使用vim等进行修改即可。

vim default.conf

3. 将文件从宿主机复制到容器中 

docker cp LOCAL_FILE CONTAINER_ID:CONTAINER_PATH
注:
LOCAL_FILE:宿主机上要复制到容器内的本地文件路径。
CONTAINER_ID:目标容器的 ID 或者名称。
CONTAINER_PATH:容器内部的目标路径,可以是绝对路径或相对路径。

例:
docker cp ./default.conf 490d08740844:/etc/nginx/conf.d/default.conf

 容器打包

docker export -o /opt/nginx.tar.gz web2
或
docker export web2 > /opt/nginx222.tar.gz

加载导出的容器

docker import /opt/nginx.tar.gz my-new-image:latest
或
docker import /opt/nginx.tar.gz > my-new-image.tar
# 创建容器
docker create [选项] 镜像 [命令] [参数]

#提交容器为镜像
docker commit 容器名或ID 镜像名:tag
参数选加:
-a, --author: 指定提交的作者,例如 --author="John Doe <john.doe@example.com>"。
-m, --message: 添加提交信息,例如 --message="Added new feature"。
-p, --pause: 提交时暂停容器(默认:true)。可以设置为 false 以避免暂停。
-w /path/to/workdir:指定容器启动时的工作目录。


# 启动容器
docker start [选项] 容器ID 或 容器名称

# 查看所有容器
docker ps -a

# 查看运行中的容器
docker ps

# 查看容器ID,-q参数查看容器ID
docker ps -q    

#启动容器 
docker start [选项] 容器 [容器...]      #后加启动的容器的名称或者 ID。可以同时指定多个容器,以空格分隔。 
-a, --attach:附加到容器的标准输入、输出和错误输出流。
-i, --interactive:保持容器的标准输入开放。  

# 停止容器,返回状态码为0
docker stop 容器ID 或 容器名称

#强制停止运行中的容器,返回状态非0
docker kill

注:
stop和kill的区别:
    docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,
当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。
而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。 

#等待它停止,并获取其退出状态码
docker wait 容器名 或 容器ID

# 重启容器
docker restart 容器ID 或 容器名称

# 删除容器,-f强制删除,包括正在运行的容器
docker rm 容器ID 或 容器名称

#停止所有在运行的容器
docker stop $(docker ps -q)

#删除所有容器
docker rm -f $(docker ps -ag)

# 查看容器日志
docker logs 容器ID 或 容器名称

# 进入容器(交互式模式)
docker exec -it 容器ID 或 容器名称 /bin/bash

# 进入容器但不可操作
docker attachcname    #不常用,退出时使用ctrl+p+q

# 查看容器内部进程
docker top 容器ID 或 容器名称

# 实时显示 Docker 容器的资源使用情况
docker stats
-f 用来实时跟踪容器的日志输出,类似于 tail -f 命令。
--tail:指定要显示的最后几行日志,默认为所有日志。例如 --tail 100 将显示最后的 100 行日志。

# 查看容器详细信息
docker inspect 容器ID 或 容器名称

# 从容器复制文件到本地
docker cp 容器ID:源文件路径 目标路径

# 复制文件到容器
docker cp 源文件路径 容器ID:目标路径

# 重命名容器
docker rename 旧名称 新名称

# 暂停(挂起)容器
docker pause 容器ID 或 容器名称

# 恢复暂停的容器
docker unpause 容器ID 或 容器名称

# 等待一个或多个容器停止运行,然后打印出每个容器的退出代码。
docker wait 容器名

# 显示容器内端口和主机端口之间的映射关系。
docker port 容器名

#跟踪容器内的文件系统变化
docker diff 容器ID 或 容器名称
注:
A (Added):表示添加的新文件或目录。
C (Changed):表示更改的文件或目录。
D (Deleted):表示删除的文件或目录。

#启动容器时设置环境变量
例: 创建运行mysql容器,并设置了 MYSQL_ROOT_PASSWORD 环境变量为 my-secret-pw 并使用-P进行端口映射
docker run -dit --name mysql-server -e MYSQL_ROOT_PASSWORD=my-secret-pw -P mysql:latest

镜像和容器的格式化输出 

docker images --format 参数
docker ps --format 参数

其中参数是你希望显示的镜像信息字段,可以根据需要选择 Docker 提供的预定义字段或者自定义字段。

预定义字段: Docker 提供了一些常用的预定义字段,例如:

镜像相关:

  • .Repository: 镜像的仓库名称。
  • .Tag: 镜像的标签。
  • .ID: 镜像的 ID。
  • .Size: 镜像的大小。
  • .CreatedAt: 镜像创建时间。
  • .VirtualSize: 镜像的虚拟大小。
  • .SharedSize: 与其他镜像共享的大小。

 容器相关:

  • .ID: 容器的唯一标识符。
  • .Image: 容器使用的镜像。
  • .Command: 容器启动时运行的命令。
  • .CreatedAt: 容器的创建时间。
  • .RunningFor: 容器运行时间。
  • .Ports: 容器的端口映射信息。
  • .Names: 容器的名称。
  • .Status: 容器的状态。
  • .Size: 容器的大小。

自定义输出

可以根据需要组合字段和格式化字符串,例如:

docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

这将输出仓库名、标签和大小。

格式化输出: 可以使用任何文本格式和控制字符,比如 \t 表示制表符,\n 表示换行符等,以便更好地组织输出信息的布局。

注意事项

  • --format 参数中使用双大括号 {{}} 来引用字段。
  • 可以使用 tablejson 等关键字来指定输出的格式类型。

补充docker命令

命令描述
docker events实时获取 Docker 守护进程产生的事件。
docker volume管理卷,如创建、删除、列出等。
docker volume create创建一个新的卷。
docker volume ls列出当前 Docker 主机上的所有卷。
docker volume rm删除一个或多个卷。如果卷被容器使用,则需要先强制删除。
docker volume prune删除所有未使用的卷。
docker volume inspect获取卷的详细信息。
docker network管理网络,如创建、删除、列出等。
docker network create创建一个新的网络。
docker network ls列出当前 Docker 主机上的所有网络。
docker network rm删除一个或多个网络。
docker network prune删除所有未使用的网络。
docker network inspect获取网络的详细信息。
docker system prune清理未使用的资源,包括悬空的镜像、停止的容器、未使用的网络和卷。
docker system prune -a清理所有未使用的资源,包括未使用的镜像。
docker system df显示 Docker 占用的空间,包括镜像、容器和卷。
docker info显示 Docker 系统的信息,包括 Docker 守护进程版本、客户端版本、可用资源等。
docker version显示 Docker 客户端和服务器的版本信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值