docker 命令

发布于:2025-06-28 ⋅ 阅读:(11) ⋅ 点赞:(0)

镜像

# 1. 查看镜像
# 列出所有本地镜像:
docker images
# 列出详细信息:
docker images --digests
# 查看特定镜像的详细信息:
docker inspect <image-id或image-name:tag>

# 2. 拉取镜像
# 从 Docker Hub 或其他注册中心拉取镜像:
# docker pull <image-name>:<tag>

# 3. 构建镜像
# 从 Dockerfile 构建镜像:
docker build -t <image-name>:<tag> .

# 4. 删除镜像
# 删除特定镜像:
docker rmi <image-id或image-name:tag>
# 强制删除镜像(如果有依赖的容器) :
docker rmi -f <image-id或image-name:tag>
# 批量删除未被任何容器使用的镜像:
docker rmi $(docker images -f "dangling=true" -q)

# 5. 标记镜像
# 给镜像打标签:
docker tag <source-image>:<tag> <target-image>:<tag>

# 6. 导出和导入镜像
# 导出镜像为 tar 文件:
docker save -o <filename>.tar <image-name>:<tag>

# 从 tar 文件导入镜像:
docker load -i <filename>.tar

# 7. 推送镜像
# 将镜像推送到 Docker Registry(如 Docker Hub):
docker push <image-name>:<tag>

# 8. 镜像清理
# 清理未使用的镜像:
docker image prune
# 清理所有未使用的镜像、容器和网络:
docker system prune

容器

# 1. 创建容器(后文会详细介绍)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 2. 查看容器
# 查看正在运行的容器:
docker ps
# 查看所有容器(包括停止的)
docker ps -a
# 列出已经停止的容器
docker ps -a -f status=exited

# 3. 容器启停
# 停止容器:
docker stop <container-name-or-id>
# 启动已停止的容器:
docker start <container-name-or-id>
# 重启容器:
docker restart <container-name-or-id>

# 4.删除容器
# 删除容器:
docker rm <container-name-or-id>
# 强制删除运行中的容器:
docker rm -f <container-id或container-name>
# 批量删除已经停止的容器
docker rm $(docker ps -aq -f status=exited)

# 5.查看日志
# 查看容器日志:
docker logs <container-name-or-id>
# 查看容器详情
docker inspect <container-name-or-id>

# 6. 执行命令
# 进入容器的命令行(如果需要)
docker exec -it <container-name-or-id> /bin/bash
# 非交互式在容器内执行命令(这将在容器中执行 ps aux 命令,列出正在运行的进程。)
docker exec -it <container-name-or-id> ps aux

创建容器

docker run 是用来创建并运行一个新的 Docker 容器的基本命令。通过 docker run 命令,您可以启动容器、指定要执行的命令、选择网络设置、设置环境变量等。
基本语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

# 1.基础选项
-d 或 --detach: 在后台运行容器,并返回容器的 ID。
--rm: 在容器停止后自动删除该容器。
-it: 以交互模式运行容器,并分配一个伪终端(tty)。通常用于交互式应用程序。

# 2.容器名称
--name <container-name>: 指定容器的名称,便于后续引用。

# 3.端口映射
-p <host_port>:<container_port>: 将主机的端口映射到容器的端口,允许外部访问容器服务。
-P: 自动映射所有暴露的端口到主机的随机可用端口。

# 4. 环境变量
-e <key>=<value>: 设置环境变量,可以在容器内使用。
--env-file <file>: 从文件中读取环境变量配置信息。

# 5.挂载卷
-v <host_path>:<container_path>: 将主机目录或文件挂载到容器内,允许数据在主机和容器之间共享。
--mount: 更复杂的方式来挂载卷或绑定挂载。
# 6.指定网络
--network <network-name>: 指定容器连接的网络。
# 7.其他选项
--restart <condition>: 容器退出时自动重启的条件。
--privileged: 给容器提供额外的特权。

创建容器示例

容器化部署Redis:

docker run -p 16379:6379 --name redis -v /home/redis/data:/data -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -d mirrors.test.com/redis:latest redis-server /etc/redis/redis.conf --appendonly yes

docker run : 创建并运行一个新容器。
-p 16379:6379 : 将主机的 16379 端口映射到容器的 6379 端口(Redis 的默认端口)。
--name redis : 指定容器的名称为 redis。这样做可以更方便地管理容器。
-v /home/redis/data:/data : 将主机的 /home/redis/data 目录挂载到容器内的 /data 目录,用于存储 Redis 数据。
-v /home/redis/conf/redis.conf:/etc/redis/redis.conf : 将主机的 redis.conf 配置文件挂载到容器内的指定位置,以自定义 Redis 的配置。
-d : 以后台模式运行容器。
mirrors.test.com/redis:latest : 指定要使用的 Docker 镜像,带有完整的镜像地址和标签。
redis-server /etc/redis/redis.conf --appendonly yes : 容器启动时执行的命令,启动 Redis 服务器并使用指定的配置文件,同时启用 AOF(Append Only File)持久化。
容器化部署MySql

docker run --restart always --name mysql -p 3306:3306 --privileged=true -e MYSQL_ROOT_PASSWORD=Zxc@123 -d mirrors.test.com/mysql:latest

docker run : 创建并运行一个新的 Docker 容器。
--restart always : 该选项设置容器在停止后总是重启。这对于确保 MySQL 服务持续运行非常重要,尤其是在系统重启或容器崩溃时。
--name mysql : 指定容器的名称为 "mysql",便于管理和引用。
-p 3306:3306 : 将主机的 3306 端口映射到容器的 3306 端口,这样可以通过主机的端口访问 MySQL 服务。
--privileged=true : 以特权模式运行容器,这通常授予容器更多的权限。对于 MySQL 大多数情况而言,通常不需要此选项,除非有特殊需求。
-e MYSQL_ROOT_PASSWORD=Zxc@123 : 设置环境变量 MYSQL_ROOT_PASSWORD,用于定义 MySQL 的 root 用户密码。在这里,密码被设置为 Zxc@123。
-d : 以后台模式运行容器。
mirrors.test.com/mysql:latest : 指定要使用的 Docker 镜像,包括完整的镜像地址和标签。
创建自定义容器

docker run -d -v /home/GoBox:/GoBox -w /GoBox --name xxx docker.test.com/cicd_2336/py2_and_py3:cover_tools tail -f /dev/null

docker run : 创建并运行一个新容器。
-d : 以后台模式运行容器。
-v /home/GoBox:/GoBox : 将主机的 /home/GoBox 目录挂载到容器的 /GoBox 目录。这使得主机和容器之间共享该目录的文件。
-w /GoBox : 设置容器内的工作目录为 /GoBox。接下来的命令将在这个目录中执行。
--name xxx : 将容器的名称设置为 xxx。
docker.test.com/cicd_2336/py2_and_py3:cover_tools : 指定要运行的 Docker镜像和标签。
tail -f /dev/null : 这是容器启动后要执行的命令。它使容器保持运行状态,因为 tail -f /dev/null 会持续等待,但不会产生任何输出。
容器部署自定义服务

docker run -d -v /home/GoBox:/GoBox -w /GoBox --name GoBox docker.test.com/cicd_2336/py2_and_py3:cover_tools sh main.sh
如果希望在脚本执行完成后容器保持运行,可以尝试如下方式:
docker run -d -v /home/GoBox:/GoBox -w /GoBox --name GoBox docker.test.com/cicd_2336/py2_and_py3:cover_tools sh main.sh && tail -f /dev/null

docker run : 用于创建并运行一个新的 Docker 容器。
-d : 表示以后台模式运行容器。
-v /home/GoBox:/GoBox : 将主机的 /home/GoBox 目录挂载到容器的 /GoBox 目录。这使得主机和容器之间可以共享该目录中的文件。
-w /GoBox : 设置容器内的工作目录为 /GoBox,后续的命令将在此目录下执行。
--name GoBox : 指定容器的名称为 GoBox,便于后续管理和引用。
docker.test.com/cicd_2336/py2_and_py3:cover_tools : 指定要运行的 Docker 镜像,包含仓库地址和标签。
sh main.sh : 这是在容器中要执行的命令。看起来像是想要执行 main.sh 脚本
容器调试(–rm:退出自动清理)

docker run -it --rm docker.test.com/cicd_2336/py2_and_py3:cover_tools /bin/bash

docker run : 用于创建并运行一个新的 Docker 容器。
-it :
-i(interactive):保持标准输入打开,使您能够与容器进行交互。
-t(tty):分配一个伪终端,使得容器的输出可以像在终端中那样显示出来。
--rm : 当容器停止时自动删除该容器。这对于临时容器非常有用,可以避免堆积未使用的容器。
docker.test.com/cicd_2336/py2_and_py3:cover_tools : 指定要运行的 Docker 镜像,包括完整的镜像地址和标签。
/bin/bash : 在容器中执行的命令,启动一个 Bash shell,使您可以在容器中交互式地输入命令。
使用示例

进入容器

# 非交互式在容器内部执行
docker exec <container-name> pip install -r requirements.txt

# 容器内缺少访问权限,以 root 用户身份运行, 可以解决问题
docker exec -u root -it <container-name> bash

# 进入正在运行的容器的交互式 shell:
docker exec -it <container-name-or-id> /bin/bash
docker exec -it <container-name-or-id> bash