docker详解

目录

1.docker介绍

2.安装docker(本机默认使用的centos)

2.1卸载docker

2.2配置Docker的yum库

1)安装yum工具

2)配置Docker的yum源(更新为阿里云源)

2.3安装Docker

2.4配置docker镜像加速

2.5.安装mysql(其实验证镜像能否成功拉取)

3.Docker命令解读

[1)查看镜像docker images](#1)查看镜像docker images)

[2)拉取镜像 docker pull](#2)拉取镜像 docker pull)

[3)镜像删除docker rmi](#3)镜像删除docker rmi)

3.2容器

[1)运行容器docker run](#1)运行容器docker run)

[2)停止容器docker stop](#2)停止容器docker stop)

[3)强停容器docker kill](#3)强停容器docker kill)

[4)查看运行容器docker ps](#4)查看运行容器docker ps)

[5)删除容器docker rm](#5)删除容器docker rm)

[6)启动容器docker start](#6)启动容器docker start)

[7)重启容器docker restart](#7)重启容器docker restart)

[8)查看容器状态docker stats](#8)查看容器状态docker stats)

[9)查看容器日志docker logs](#9)查看容器日志docker logs)

[10)查看容器进程信息docker top](#10)查看容器进程信息docker top)

[11)进入容器docker exec/attach](#11)进入容器docker exec/attach)

12)起别名

3.3保存镜像

[1)镜像保存docker save](#1)镜像保存docker save)

[2)镜像加载docker load](#2)镜像加载docker load)

[4 Docker存储](#4 Docker存储)

1)数据卷挂载

2)本地目录挂载

3).Dockerfile​编辑​编辑

5.docker网络


1.docker介绍

我们利用docker安装应用时,docker会自动搜索并下载应用镜像 (image).镜像不仅包含应用本身,还包含应用运行所需要的环境,配置,系统函数库。docker会在运行镜像时创建一个隔离环境,称为容器

1).容器(Container)

  • 容器是镜像创建的运行实例, 它是一个轻量级的、可执行的独立软件包,包含了运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
  • 容器化技术使得软件可以在几乎任何地方以相同的方式运行,解决了"在我的机器上可以运行"的问题。

2).镜像(Image):

  • 镜像是构建容器的模板 ,它是一个只读的模板,用于创建Docker容器。
  • 镜像通常是通过一个Dockerfile 定义的,Dockerfile包含了构建镜像所需的指令

3).仓库(Registry)

  • Docker仓库用于存储和分发Docker镜像
  • 公共的Docker Hub是最大的Docker镜像仓库,用户可以在那里找到、分享和运行高质量的Docker镜像。

主要特点:

  • 可移植性:Docker容器可以在任何支持Docker的操作系统上运行,应用部署和迁移变得非常简单。
  • 隔离性容器之间是相互隔离的,一个容器的崩溃不会影响其他容器。
  • 轻量级:容器不需要像虚拟机那样启动一个完整的操作系统,因此它们可以快速启动,并且占用更少的系统资源。
  • 安全性:容器运行在自己的隔离环境中,并且可以限制对系统资源的访问,从而提供了额外的安全层。

工作流程:

  1. 编写Dockerfile:定义应用的依赖、环境变量、配置等。
  2. 构建镜像:通过Dockerfile构建应用镜像。
  3. 运行容器:从镜像启动一个或多个容器实例。
  4. 管理容器:启动、停止、监控和删除容器。
  5. 共享镜像 :将构建好的镜像推送到Docker仓库,以便在其他机器上使用
  1. 编写 Dockerfile

    • 做什么 :创建一个名为 Dockerfile 的文本文件。它包含了一系列指令,告诉 Docker 如何一步步地构建你的应用镜像。

    • 示例指令

      • FROM python:3.9-slim:指定基础镜像。

      • COPY . /app:将本地代码复制到镜像内的 /app 目录。

      • RUN pip install -r requirements.txt:在镜像内执行命令安装依赖。

      • CMD ["python", "app.py"]:指定容器启动时默认运行的命令。

  2. 构建镜像

    • 做什么 :执行 docker build -t my-app . 命令。

    • 过程 :Docker 守护进程会读取 Dockerfile,逐步执行其中的指令,并为每一步创建一个新的镜像层,最终生成一个可命名的镜像(如 my-app:latest)。

  3. (可选) 推送至镜像仓库

    • 做什么 :执行 docker push my-registry.com/my-app:latest 命令。

    • 目的:将本地构建好的镜像上传到像 Docker Hub、Google Container Registry 或私有仓库这样的镜像仓库中,以便在其他地方拉取和使用。

  4. 拉取镜像

    • 做什么 :在需要运行该应用的其他机器上,执行 docker pull my-registry.com/my-app:latest 命令。

    • 目的:从镜像仓库下载指定的镜像到本地。

  5. 运行容器

    • 做什么 :执行 docker run -d -p 8080:80 --name my-running-app my-app 命令。

    • 过程:Docker 守护进程根据指定的镜像创建一个可写的容器层,并按照配置(如端口映射、环境变量等)启动容器内的进程。

2.安装docker(本机默认使用的centos)

2.1卸载docker

复制代码
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-selinux

2.2配置Docker的yum库

Docker的yum源是一个软件仓库 ,它允许用户通过yum包管理器在基于Red Hat的Linux发行版(如CentOS、Fedora)上轻松地安装、更新和卸载Docker及其相关组件。Yum(Yellowdog Updater, Modified)是一个用于RPM-based Linux系统的自动化更新和软件包安装的工具。

1)安装yum工具
复制代码
yum install -y yum-utils

如果报错显示 Cannot find a valid baseurl for repo: base/7/x86_64

1)备份原有的repo文件(可选,有备无患)

复制代码
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2)下载阿里云的repo配置文件

复制代码
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

复制代码
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3)刷新YUM元数据缓存

更新完repo文件后,需要清空并重建YUM的元数据缓存,以便让它认识新的仓库配置:

复制代码
sudo yum clean all
sudo yum makecache

4)使用阿里云源安装yum-utils

复制代码
sudo yum --disablerepo=\* --enablerepo=aliyun install -y yum-utils
2)配置Docker的yum源(更新为阿里云源)
复制代码
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

更新yum,建立缓存

复制代码
sudo yum makecache fast

2.3安装Docker

安装命令

复制代码
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

一些启动和校验命令

复制代码
#查看Docker版本
docker -v

# 启动Docker
systemctl start docker

#列出运行在本地Docker主机上的所有镜像
docker images

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

当未启动时,查看镜像(docker images)结果为:

启动Docker后的查看镜像结果:

2.4配置docker镜像加速

之前安装Docker时,配置的阿里加速镜像现在停用失效,导致网络无法访问
PS:听网友说是阿里加速镜像已停用

如果镜像有问题的话,会报错:

docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).

解决方式:

复制代码
# 创建目录
mkdir -p /etc/docker

# 复制内容
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://mirrors.tuna.tsinghua.edu.cn",
        "http://mirrors.sohu.com",
        "https://ustc-edu-cn.mirror.aliyuncs.com",
        "https://ccr.ccs.tencentyun.com",
        "https://docker.m.daocloud.io",
        "https://docker.awsl9527.cn"
    ]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

2.5.安装mysql(其实验证镜像能否成功拉取)

复制代码
docker run -d  \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql

Docker会按以下顺序执行:

  1. 在本地查找 mysql:latest 镜像。

  2. 如果没找到,自动从Docker Hub拉取

  3. 创建一个名为mysql的容器。

  4. 在后台启动这个容器。

3.Docker命令解读

补充:

默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:

复制代码
# Docker开机自启
systemctl enable docker

# Docker容器开机自启
docker update --restart=always [容器名/容器id]

image是镜像的名字,tag是镜像版本,container是容器

复制代码
# 第1步,去DockerHub查看nginx镜像仓库及相关信息

# 第2步,拉取Nginx镜像
docker pull nginx

# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB

# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx

# 第5步,查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 第6步,访问网页,地址:http://虚拟机地址

# 第7步,停止容器
docker stop nginx

# 第8步,查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 第9步,再次启动nginx容器
docker start nginx

# 第10步,再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 第11步,查看容器详细信息
docker inspect nginx

# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p

# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx

3.1镜像

1)查看镜像docker images
  • 语法: docker images [option]

option说明:

复制代码
-a,all:    展示所有镜像
-q,quite:  只展示镜像ID
2)拉取镜像 docker pull
  • 语法: docker pull image[:tag]

    #拉取镜像
    docker pull nginx

    #拉取指定版本镜像
    docker pull nginx:1.26.0

3)镜像删除docker rmi
  • 语法: docker rmi [option] image:tag

    #注意要是完整标签:
    docker rmi nginx:latest

    #推荐使用其唯一镜像ID 删除:
    docker rmi 3f8a4339aadd

    #option说明,-f:全部删除
    #(docker images -aq) 即取得所有镜像ID集合 docker rmi -f (docker images -aq)

3.2容器

1)运行容器docker run
  • 语法:docker run [option] image[:tag] [command] [arg...]

    复制代码
    --name: 为容器指定一个名称;
    -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
        非后台运行会阻塞控制台
        常见坑:当后台运行容器时,若容器没有提供服务,则会自动停止
    -i,-t,-it:以交互模式运行容器;为容器重新分配一个伪输入终端;二者通常同时使用;
               交互方式运行,进入容器内部查看内容
               exit:停止容器并从退回主机
               ctrl + p + q:不停止容器退出
    
    
    -p: 端口映射,-p标志用于指定端口映射,它允许你将容器内的端口映射到镜像端口,即
        运行Docker的机器上的端口。这是为了让外部网络能够访问在Docker容器内运行的服务
        端口映射可以提高安全性,因为可以只公开必要的端口,而非公开容器内的所有端口。
        映射有以下格式
          -p ip:主机端口:容器端口 
          -p 主机端口:容器端口(常用)
          -p 容器端口
          容器端口
          
    -e:环境变量
          
    -P: 随机端口映射;
    -w: 指定命令执行时,所在的路径
    
    例如:
    docker run -d --name nignx -p 80:80 nginx
    后台运行最新版本nginx ,容器名字定义为nginx,镜像,容器端口都是80

    这里这个端口映射,因为docker是封闭性的,所以我们是没办法直接访问到docker中的镜像端口的,这时候我们就需要访问主机的端口3306,会自动映射到镜像的3306上

  • 不写tag默认最新版本,command和arg为默认配置一般不写
  • ctrl + c 终止运行
2)停止容器docker stop
  • 语法: docker stop [option] container [container]

option说明

复制代码
-t, --time int:这个选项指定在发送 SIGTERM 信号后等待容器停止的秒数。
容器中的应用程序可以捕获SIGTERM信号并执行清理操作,如保存状态、关闭连接、释放资源等再退出
如果在指定的时间内容器没有停止,那么 Docker 将发送 SIGKILL 信号来强制停止容器。
默认情况下,docker stop 会等待 10 秒。

#container自己停止或20秒后强制停止,不使用-t默认10秒
docker stop -t 20 container

[container]
同时操作多个容器
3)强停容器docker kill
  • 语法: docker stop [option] container
  • 直接发送SIGKILL信号到容器的主进程,这会立即终止容器,不给容器中的进程任何清理和退出的机会。适用于容器无响应或者需要快速停止容器。
4)查看运行容器docker ps
  • 语法:docker ps [option] container
  • 容器id 镜像名 容器默认命令 创建时间 启动状态(up即成功) 占用端口 应用容器名(随机)
  • 容器的操作(container)只能是容器名或容器ID **(非镜像名),**若可以唯一识别,可以只使用ID前几位数字

option说明

复制代码
-d:  查看正在运行容器
-a:  查看所有容器(包括已经停止的)
-n=?:展示最近运行的?个容器
-q:  只显示id
5)删除容器docker rm
  • 语法:docker rm [option] container [container]
  • 不能删除运行中的容器,除非option选用**-f**
  • 同理,删除所有镜像: docker rmi -f $(docker ps -aq)
6)启动容器docker start
  • 语法: docker restart container [container]
  • 启动停止的容器,若已经启动或者已经删除则无效
7)重启容器docker restart
  • 语法: docker restart container [container]
  • 关闭的则启动,启动的则重启
8)查看容器状态docker stats
  • 语法: docker stats container
  • 展示容器占用的cpu内存情况
  • ctrl + c 退出
9)查看容器日志docker logs
  • 语法:docker logs [option] container

option 说明

复制代码
-tf:展示日志
--tail number:以字符串的形式展示日志,number展示日志条数
-f  一直跟踪这个日志(调试一般会用)
10)查看容器进程信息docker top
  • 语法:docker top container
11)进入容器docker exec/attach
  • 语法:docker exec -it container bashShell

    #命令以与控制台(/bin/bash)交互(-it)的形式进入容器nginx(已经取容器名为nginx)
    docker exec -it nginx /bin/bash
    或者
    docker exec -it nginx bash

    #exec进入容器并开启新终端并操作,更常用

进入容器后也可以进去mysql

12)起别名

vi ~/.bashrc

source ~/.bashrc

3.3保存镜像

1)镜像保存docker save
  • 语法:docker save [option] image[:tag]

    -o:将镜像保存为tar包(名字随便取)
    docker save -o mynginx.tar mynginx:vers1.0

2)镜像加载docker load
  • 语法:docker load [option]

    -i:指定压缩包路径,自动读取,根据压缩包产生镜像
    docker load -i mynginx.tar

这相当于是打包好的镜像

4 Docker存储

挂载类型 语法示例 来源/说明
匿名挂载 -v /容器内路径 只写容器内路径
具名挂载 -v 数据卷名:/容器内路径 给数据卷起名,便于管理
指定路径挂载 -v /本地目录:/容器内路径 指定宿主机具体目录
  • 匿名挂载 :你只指定了容器内的路径 ,没有给数据卷起名,Docker会自动在宿主机/var/lib/docker/volumes/下生成一个随机字符串的目录来关联。因为匿名挂载卷的名字是随机字符串,不便于后续管理和维护。

  • 具名挂载 :你为数据卷指定了一个名字 (如 juming-nginx),Docker会以这个名字在/var/lib/docker/volumes/下创建目录。通过名字管理卷,推荐使用这种方式

  • 指定路径挂载 :你明确指定了宿主机上的一个具体目录路径 (如 /home/user/app)和容器内的路径进行关联。

1)数据卷挂载

语法: docker -v 数据卷名:容器目录

  • 不指定本地目录,默认放在/var/lib/docker/volums/xxxx/_data
  • 容器内路径: ro rw 改变读写权限,看到ro说明只能通过本地主机修改文件而非容器内修改
复制代码
#查看帮助信息
docker volum --help
#创建数据卷
docker volume create
#查看所有数据卷
docker volume ls
#删除指定数据卷
docker volume rm
#查看某个数据卷的详情
docker volume inspect
#清除数据卷
docker volume prune

2)本地目录挂载

语法: docker -v 本地目录:容器目录

docker inspect:查询容器详情

我们先看一下nginx的详细信息(刚挂载过)

我们在看以下mysql的挂载

像数据库就有匿名挂载,因为data数据存储是需要的,那就直接创建数据卷然后随机给一个很长的名字

  • 宿主机目录 :就像你的 "家庭住址"(例如:北京市海淀区XX街道XX小区1号楼101)。

    • 问题:如果你搬家了(环境变了),你的家庭住址就彻底变了。所有寄往你老地址的信件和包裹都会丢失。
  • 数据卷 :就像你在邮局租的一个 "邮政信箱"(例如:邮箱号 12345)。

    • 好处:无论你搬到哪里(从北京搬到上海),你只需要去邮局更新一下你的"邮政信箱"对应的"投递地址"即可。所有寄往"邮箱号 12345"的邮件,最终都会被送到你的新家。你的朋友(容器)永远只需要记住"邮箱号 12345"这个逻辑名称,不需要关心你到底住在哪里。

在这个比喻中:

  • 容器 = 你的朋友(他只关心信箱号)

  • 数据卷 = 邮政信箱(一个逻辑名称,如 my-app-data

  • 宿主机目录 = 你的家庭住址(物理位置,如 /var/lib/docker/volumes/my-app-data/_data

场景1:直接指向宿主机目录(强耦合)

bash

复制代码
# 创建一个容器,直接将它的数据目录映射到宿主机的 /home/user/app/data
docker run -d -v /home/user/app/data:/var/lib/mysql --name mysql-container mysql

分析:

  1. 命令含义 :容器内的 /var/lib/mysql 目录直接就是宿主机上的 /home/user/app/data 目录。

  2. 强耦合体现在哪?

    • 环境依赖性 :这个命令假设宿主机上必须存在 /home/user/app/data 这个路径。如果换到另一台机器(比如测试服务器),这个路径可能不存在,或者被其他程序占用了。

    • 不可移植性 :你的 Docker 命令、Docker Compose 文件都和这个具体路径绑定死了。你想把应用部署到任何新环境,都必须手动确保这个路径存在且正确。

    • 管理混乱:作为运维,你很难一眼看出哪些目录是正在被 Docker 容器使用的。它们散落在文件系统的各个角落。

结论 :这种方式将应用配置(容器)基础设施细节(宿主机路径) 紧紧地绑在了一起,违背了容器化追求的"一次构建,到处运行"的可移植性理念。


场景2:通过数据卷(解耦)

bash

复制代码
# 1. 创建一个名为 `mysql-data` 的逻辑数据卷(无需指定具体路径)
docker volume create mysql-data

# 2. 启动容器,使用这个数据卷
docker run -d -v mysql-data:/var/lib/mysql --name mysql-container mysql

分析:

  1. 命令含义 :容器内的 /var/lib/mysql 目录现在挂载到了一个名为 mysql-data 的逻辑卷上。

  2. 解耦体现在哪?

    • 可移植性 :你的 Docker 命令或 docker-compose.yml 文件里只写了一个逻辑名称 mysql-data。无论在哪个环境(开发、测试、生产)执行这条命令,Docker 引擎都会负责找到或创建这个名为 mysql-data 的卷,并把它映射到该环境下的一个合适且统一 的宿主机路径(通常是 /var/lib/docker/volumes/...)。

    • 你问的"改变映射关系"是什么意思?

      这通常不是在容器运行时去改,而是在 "环境配置" 层面解决的。

      • 对于开发人员 :你根本不用关心 mysql-data 在宿主机哪里。Docker 帮你管理。

      • 对于高级运维 :如果生产环境有特殊需求,比如需要把数据放在一块特定的、容量更大的硬盘上,我不需要 去修改容器的配置。我只需要在创建数据卷 时,使用特定的卷驱动(Volume Driver)存储驱动(Storage Driver) ,或者直接配置 Docker 引擎的存储路径。之后,所有名为 mysql-data 的卷都会自动使用这个新的、优化过的存储配置。

      举个例子

      在环境A,mysql-data 可能默认指向 /var/lib/docker/volumes/mysql-data/_data

      在环境B,我通过配置,可以让 mysql-data 指向一个网络存储(NFS)/nfs/docker_volumes/mysql-data
      而你的容器启动命令完全不需要变!

3).Dockerfile

指令 指定基础镜像 示例
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./jrel1.tar.gz /tmp
RUN 执行Linux的shell命令,一般是安装过程的命令 RUN tar-zxvf/tmp/jrell.tar.gz&& EXPORTS path=/tmp/jrell:$path
EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080
ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar

5.docker网络

ip地址是docker网桥分配的,如果关掉就没了,这是别的容器在启动,就把这个占用了,这时候就可以自定义网络

| 命令 | 语法示例 | |
| docker network create | 创建一个网络 | |
| docker network ls | 查看所有网络 | |
| docker network rm | 删除指定网络 | |
| docker network prune | 清除未使用的网络 | |
| docker network connect | 使指定容器连接加入某网络 | |
| docker network disconnect | 使指定容器连接离开某网络 | |

docker network inspect 查看网络详细信息

6.DockerCompose

Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与docker run参数非常相似。

对比如下:

docker run 参数 docker compose 指令 说明
--name container_name 容器名称
-p ports 端口映射
-e environment 环境变量
-v volumes 数据卷配置
--network networks 网络

实例:黑马商城部署文件:

复制代码
version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall
复制代码

语法 :docker compose [OPTIONS] [COMMAND]

类型 参数或指令 说明
Options -f 指定compose文件的路径和名称
Options -p 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念
Commands up 创建并启动所有service容器
Commands down 停止并移除所有容器、网络
Commands ps 列出所有启动的容器
Commands logs 查看指定容器的日志
Commands stop 停止容器
Commands start 启动容器
Commands restart 重启容器
Commands top 查看运行的进程
Commands exec 在指定的运行中容器中执行命令

实例演示:

复制代码
# 1.进入root目录
cd /root

# 2.删除旧容器
docker rm -f $(docker ps -qa)

# 3.删除hmall镜像
docker rmi hmall

# 4.清空MySQL数据
rm -rf mysql/data

# 5.启动所有, -d 参数是后台启动
docker compose up -d(因为yml文件就在该目录下,所以不用指定文件)
# 结果:
[+] Building 15.5s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                    0.0s
 => => transferring dockerfile: 358B                                                    0.0s
 => [internal] load .dockerignore                                                       0.0s
 => => transferring context: 2B                                                         0.0s
 => [internal] load metadata for docker.io/library/openjdk:11.0-jre-buster             15.4s
 => [1/3] FROM docker.io/library/openjdk:11.0-jre-buster@sha256:3546a17e6fb4ff4fa681c3  0.0s
 => [internal] load build context                                                       0.0s
 => => transferring context: 98B                                                        0.0s
 => CACHED [2/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo   0.0s
 => CACHED [3/3] COPY hm-service.jar /app.jar                                           0.0s
 => exporting to image                                                                  0.0s
 => => exporting layers                                                                 0.0s
 => => writing image sha256:32eebee16acde22550232f2eb80c69d2ce813ed099640e4cfed2193f71  0.0s
 => => naming to docker.io/library/root-hmall                                           0.0s
[+] Running 4/4
 ✔ Network hmall    Created                                                             0.2s
 ✔ Container mysql  Started                                                             0.5s
 ✔ Container hmall  Started                                                             0.9s
 ✔ Container nginx  Started                                                             1.5s

# 6.查看镜像
docker compose images
# 结果
CONTAINER           REPOSITORY          TAG                 IMAGE ID            SIZE
hmall               root-hmall          latest              32eebee16acd        362MB
mysql               mysql               latest              3218b38490ce        516MB
nginx               nginx               latest              605c77e624dd        141MB

# 7.查看容器
docker compose ps
# 结果
NAME                IMAGE               COMMAND                  SERVICE             CREATED             STATUS              PORTS
hmall               root-hmall          "java -jar /app.jar"     hmall               54 seconds ago      Up 52 seconds       0.0.0.0:8080->8080/tcp, :::8080->8080/tcp
mysql               mysql               "docker-entrypoint.s..."   mysql               54 seconds ago      Up 53 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
nginx               nginx               "/docker-entrypoint...."   nginx               54 seconds ago      Up 52 seconds       80/tcp, 0.0.0.0:18080-18081->18080-18081/tcp, :::18080-18081->18080-18081/tcp
相关推荐
Leinwin5 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382505 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇5 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7595 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣6 小时前
智能体选型实战指南
运维·人工智能
yy55276 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ7 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔8 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密8 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20158 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑