目录
使用阿里源下载安装
# 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/https://hub.docker.com/
网易云镜像仓库:
登录https://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-driver
和log-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
参数中使用双大括号{{}}
来引用字段。 - 可以使用
table
、json
等关键字来指定输出的格式类型。
补充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 客户端和服务器的版本信息。 |