一、Docker安装
1.1 配置docker镜像仓库
- 安装yum-utils软件包
[root@localhost ~]# yum install -y yum-utils
- 设置镜像仓库地址
[root@localhost ~]yum-config-manager \ #管理yum配置文件的命令,主要用于启用,禁用或添加存储库
> --add-repo \ #通过指定URL来添加新存储库
> http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
这里使用阿里云的镜像仓库
1.2 安装docker相关的引擎
更新yum软件包引索
[root@localhost ~]# yum makecache fase
安装docker软件包
[root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io
1.3 启动docker
[root@localhost ~]# systemctl start docker
查看dockers是否启动
[root@localhost ~]# docker version
1.4 测试docker
[root@localhost ~]# docker run hello-world
此命令用于测试Docker是否正确安装,Docker会从Docker Hub下载一个小型的测试镜像,并运行一个简单的程序
查看本机的docker镜像
[root@localhost ~]# docker images
1.5 设置阿里云镜像加速服务
在浏览器搜索阿里云官网,登录阿里云账号,找到容器服务
[root@localhost ~]# vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://tgnjz4cz.mirror.aliyuncs.com"]
}
配置完成后,重新加载文件并重启docker服务
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
查看镜像加速器是否配置成功
[root@localhost ~]# docker info
显示Docker守护进程和客户端详细信息
看到如图字样,表示镜像加速器配置成功
二、Docker命令
2.1 镜像管理
2.1.1 获取镜像docker pull
格式: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
[root@localhost ~]# docker pull ubuntu:18.04
2.1.2 运行容器 docker run
格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
常用选项
-d:以 detached 模式运行容器,即后台运行。
–name:为容器指定一个名称。
-p:映射容器的端口到宿主机。
-e:设置环境变量。
-v:挂载卷,用于数据持久化或共享数据。
–network:指定容器的网络连接。
–rm:容器退出时自动清理容器文件系统。
以交互方式运行容器
要运行 Ubuntu 容器并访问 shell,按exit退出这个容器
[root@localhost ~]# docker run -it ubuntu bash
在 detached 中运行容器
[root@localhost ~]# docker run -d nginx
将容器的内部端口映射到机器的端口(对于 Web 服务器等服务很有用)
[root@localhost ~]# docker run -d -p 8080:80 nginx
2.1.3 列出镜像 docker images
格式:docker images [选项]
命令选项:
-a 或 --all:显示所有镜像(默认情况下,只显示未标记为中间状态的镜像)。
–no-trunc:显示完整的镜像 ID 和仓库名称,而不进行截断。
-q 或 --quiet:仅列出镜像 ID。
列出所有图像,包括中间图像
docker image ls -a
按特定条件(例如,按存储库或大小)筛选图像:
docker image ls --filter "before=nginx:latest"
仅显示图像 ID(用于编写脚本或清理):
docker image ls -q
设置输出格式(例如,仅显示图像名称和大小):
docker image ls --format "{{.Repository}}: {{.Size
2.1.4 显示镜像体积 docker system df
格式:docker system df [选项]
命令选项
-v 或 --verbose:显示详细的信息,包括每个项目的大小。
–format:格式化输出信息,使用 Go 的模板语法。
显示 Docker 系统的数据使用情况:
docker system df
显示详细的数据使用情况:
docker system df -v
2.1.5 悬挂镜像
在 Docker 中,悬挂镜像是未标记或未与任何存储库名称关联的镜像。这些映像通常是在构建过程中创建的不再需要的剩余中间层,但它们仍然占用磁盘空间
列出悬垂图像
docker images -f "dangling=true"
2.1.6 中间层镜像
中间层镜像(Intermediate Images)是 Docker 构建过程中生成的临时镜像层。这些镜像层是 Docker 构建过程中的产物,用于支持镜像的层次结构,但通常不直接用于最终的镜像。
docker image ls -a
中间层镜像通常显示为none,因为它们没有分配具体的标签或仓库名
2.1.6 删除镜像docker image rm
格式:docker image rm [选项] <镜像1> [<镜像2> …]
命令选项
–force 或 -f:强制删除镜像,即使它们被容器引用。
–no-prune:不要自动清理悬空的父镜像
删除指定的镜像: 如果你想删除名为 myimage:latest 的镜像,可以使用以下命令:
docker image rm myimage:latest
如果镜像正在被一个或多个容器使用,需要添加 --force 选项
使用镜像 ID 删除: 如果你知道要删除的镜像的 ID,也可以使用 ID 来删除:
docker image rm 镜像ID
强制删除: 如果镜像被容器或其他进程引用,你需要使用 --force 选项来强制删除:
2.1.7 使用 Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
在一个空白目录中,建立一个文本文件,并命名为 Dockerfile:
[root@localhost ~] mkdir mynginx
[root@localhost ~] cd mynginx
[root@localhost ~] touch Dockerfile
[root@localhost ~] vi Dockerfile
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
在 Dockerfile 文件所在目录执行
[root@localhost mynginx]# docker build -t nginx:v3 .
从命令的输出结果中,我们可以清晰的看到镜像的构建过程。在 Step 2 中,如同我们之前所说的那样,RUN 指令启动了一个容器 9cdc27646c7b,执行了所要求的命令,并最后提交了这一层 44aa4490ce2c,随后删除了所用到的这个容器 9cdc27646c7b。
这里我们使用了 docker build 命令进行镜像构建。其格式为:
docker build [选项] <上下文路径/URL/->
在这里我们指定了最终镜像的名称 -t nginx:v3,构建成功后,我们可以像之前运行 nginx:v2 那样来运行这个镜像,其结果会和 nginx:v2 一样。
2.2 容器操作
2.2.1 启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(exited)的容器重新启动。
语法:docker run [选项] 镜像名称
常用选项
-d:以 detached 模式运行容器,即后台运行。
–name:为容器指定一个名称。
-p:映射容器的端口到宿主机。
-e:设置环境变量。
-v:挂载卷,用于数据持久化或共享数据。
–network:指定容器的网络连接。
–rm:容器退出时自动清理容器文件系统。
-it:分配一个伪终端并保持 STDIN 打开,通常用于交互式运行。
新建并启动
下面的命令输出一个 “Hello World”,之后终止容器。
[root@localhost ~] docker run ubuntu:18.04 /bin/echo 'Hello world'
这跟在本地直接执行 /bin/echo ‘hello world’ 几乎感觉不出任何区别。
启动一个 bash 终端,允许用户进行交互。
[root@localhost ~] docker run -t -i ubuntu:18.04 /bin/bash
在交互模式下,用户可以通过所创建的终端来输入命令,例如
2.2.2 启动已终止容器
格式:docker container start [选项] 镜像名称
选项:
-a 或 --attach:在容器启动后,附加到容器的标准输出和标准错误流。
–detach-keys:定义用于从容器中分离的键的字符串
[root@localhost ~]# docker container start 037bf59d3e1e
2.2.3 重新启动容器
格式:docker container restart [选项] 镜像名称或ID
常用选项:
-t, --timeout:指定容器停止后重启前的等待时间(秒)。默认情况下,Docker 会等待 10 秒。
重启容器
[root@localhost ~]# docker container restart 037bf59d3e1e
2.2.4 后台运行
后台运行容器其实就是docker run命令,更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。
如果不使用 -d 参数运行容器
[root@localhost ~]# docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
容器会把输出的结果 (STDOUT) 打印到宿主机上面
如果使用了 -d 参数运行容器
[root@localhost ~]# docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。
2.2.5 终止容器
终止状态的容器可以用 docker container ls -a 命令看到
[root@localhost ~]# docker container ls -a
处于终止状态的容器,可以通过 docker container start 命令来重新启动。
[root@localhost ~]# docker container start 037bf59d3e1e
2.2.6 进入容器
某些时候需要进入容器进行操作
attach 命令
格式:docker attach [选项] 镜像名称
选项:
–no-stdin:不分配一个 STDIN,容器的标准输入不会与用户的终端关联。
–sig-proxy:默认情况下,当用户按下 Ctrl-C 时,Docker 会向容器发送 SIGINT 信号。如果设置了 --no-sig-proxy,则不会发送信号。
先查看镜像,然后使用attach命令进入后台
[root@localhost ~]# docker container ls
[root@localhost ~]# docker attach dc0
2.2.7 导入和导出容器
导出容器docker export
格式:docker export 容器名称或ID
导出本地某个容器
[root@localhost ~]# docker container ls -a
[root@localhost ~]# docker export f61b806dee9d > ubuntu.tar
导入容器快照docker import
格式:docker import [选项] 路径 [新镜像仓库的名称和标签]]
选项:
-c, --change:在导入过程中应用 Dockerfile 指令
[root@localhost ~]# cat ubuntu.tar | docker import - test/ubuntu:v1.0
[root@localhost ~]# docker image ls
2.2. 8 删除容器
格式:docker container rm [选项] 一个或多个容器的名称或ID
常用选项:
-f, --force:强制删除一个正在运行的容器。需要谨慎使用,因为它不会等待容器正常关闭。
-v, --volumes:在删除容器的同时删除其关联的所有卷。
使用 docker container rm 来删除一个处于终止状态的容器
2.3 数据管理
数据卷
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
数据卷 可以在容器之间共享和重用
对 数据卷 的修改会立马生效
对 数据卷 的更新,不会影响镜像
数据卷 默认会一直存在,即使容器被删除
2.3.1 Docker 卷的基本命令
docker volume create:创建一个新的卷。
docker volume ls:列出所有卷。
docker volume inspect:查看卷的详细信息。
docker volume rm:删除一个或多个卷。
docker volume prune:清理未使用的卷。
2.3.1 创建数据卷
[root@localhost ~]# docker volume create my-vol
[root@localhost ~]# docker volume ls
在主机里使用以下命令可以查看指定 数据卷 的信息
[root@localhost ~]# docker volume inspect my-vol
2.3.2 启动一个挂载数据卷的容器
创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /usr/share/nginx/html 目录
[root@localhost ~]# docker run -d -P --name web --mount source=my-vol,target=/usr/share/nginx/html ubuntu:18.04
2.3.3 查看数据卷的具体信息
ocker inspect 命令用于获取一个或多个容器或镜像的详细信息,包括配置、网络设置、挂载点等
格式:docker inspect [选项] 镜像或容器ID
常用选项:
-f, --format:格式化输出信息,使用 Go 的模板语法。
[root@localhost ~]# docker inspect web
2.3.4 删除数据卷
格式:docker volume rm [选项] 卷名 [卷名…]
常用选项:
-f, --force:强制删除一个正在被容器使用的卷。
[root@localhost ~]# docker volume rm my-vol