# Docker

# 什么是 Doker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app), 更重要的是容器性能开销极低

# Docker 安装

# 设置仓库

  1. 更新 apt 包索引并安装软件包

    sudo apt-get update
    sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
  2. 添加 Docker 的官方 GPG 密钥:

    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  3. 使用以下命令设置存储库:

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker 引擎

  1. 更新包索引,并安装最新版本的 Docker 引擎、容器和 Docker Compose,或转到下一步以安装特定版本:

    sudo apt-get update
     sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  2. 要安装特定版本的 Docker 引擎,需要在存储库中列出可用版本,然后选择并安装:

    一个。列出存储库中可用的版本:

apt-cache madison docker-ce
docker-ce | 5:20.10.16~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.15~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.14~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
docker-ce | 5:20.10.13~3-0~ubuntu-jammy | https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

b. 使用第二列中的版本字符串安装特定版本,例如 。 5:20.10.16~3-0~ubuntu-jammy

sudo apt-get install docker-ce=<版本号> docker-ce-cli=<版本号> containerd.io docker-compose-plugin
  1. 运行 Docker
sudo service docker start
  1. 通过运行映像来验证 Docker 引擎是否已正确安装。 hello-world
sudo docker run hello-world

输出结果会出现 hello world。

# 卸载 Docker 引擎

  1. 卸载 Docker 引擎、CLI、Containerd 和 Docker Compose 包:

    sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
  2. 主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有映像、容器和卷:

    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd

必须手动删除任何已编辑的配置文件。

# 使用镜像加速器

不使用镜像加速器可能会有点慢,我用的是阿里云的镜像加速器。

  1. 找到容器镜像服务

aliyun

  1. 镜像加速器就有我们需要的加速器地址了,直接复制里面操作文档的代码就行了。jiasuqi

官方镜像加速 (aliyun.com)


上面介绍 Docker 的安装,下面是 Docker 的操作。

# Docker 常用命令

# 帮助启动类命令

  • 启动 docker: systemctl start docker
  • 停止 docker: systemctl stop docker
  • 重启 docker: systemctl restart docker
  • 查看 docker 状态: systemctl status docker
  • 开机启动: systemctl enable docker
  • 查看 docker 概要信息: docker info
  • 查看 docker 总体帮助文档: docker --help
  • 查看 docker 命令帮助文档: docker xxx某某命令 --help

其实就是 linux 服务的命令。


# 镜像命令

列出本机上的镜像

docker images
参数说明:
1. -a:列出本地所有的镜像(包含历史映像层)
2. -q:只显示镜像ID

images

选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签版本号
  • IMAGE ID:镜像 ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

需注意:同一仓库源可以有多个 TAG 版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果我们不指定一个镜像的版本标签,docker 默认使用最新版本镜像

搜索镜像

docker search 镜像名
参数说明:
1. --limit:只列出N个镜像,默认列出25个镜像
如:docker search --limit 5 mysql

下载镜像

docker pull 镜像名[:TAG]

TAG 就是标签,可以不加,这样默认下载最新版本镜像TAG 可以指定版本下载镜像。

查看镜像 / 容器 / 数据卷所占空间

docker system df

删除镜像

docker rmi 镜像名/镜像ID
参数说明:
1. -f:强制删除

批量删除:

docker rmi 镜像名1:TAG 镜像名2:TAG

删除全部:

docker rmi -f $(docker images -qa)

docker images -qa 获取所有镜像 ID。

** 虚悬镜像:** 仓库名、标签都是 <none> 的镜像,称作虚悬镜像 dangling image。


# 容器命令

有镜像才能创建容器。

新建 + 启动容器

需要运行镜像才能创建容器

docker run [OPTIONS] IMAGE

OPTIONS 参数说明(常用):

  • --name="容器新名字":为容器指定一个名称。
  • -d:后台运行容器并返回容器 ID。
  • -i:以交互模式运行容器,通常与 -t 一起使用。interactive。
  • -t:为容器重新分配是一个为输入终端,通常与 -i 同时使用。terminal。
  • -P:随机端口映射,注意这是大写 P
  • -p:指定一个端口映射,注意这是小写 P。-p 8080:80,第一个物理机端口,第二个容器端口。

例如:

docker run -it --name=myubuntu01 ubuntu /bin/bash
-it  交互终端
--name  起别名
/bin/bash  shell交互命令

ubuntu

此时我们进入到 docker 的 ubuntu 中了。 exit 退出。此时输入的命令是在 docker 的 ubuntu 中执行。

查看正在运行的容器

docker ps
参数:
-a      查看正在运行的容器和历史运行过的容器
-q      静默模式,只显示容器编号

退出容器

exit
run 进去容器,exit 退出,容器停止

ctrl+p+q (快捷键)run 进去容器,ctrl+p+q 退出,容器不停止。

启动 | 重启 | 停止容器

docker start 容器名或id    -------开启容器
docker restart 容器名或id  -------重启容器
docker stop 容器名或id     -------正常停止容器
docker kill 容器名或id     -------立即停止容器

删除容器

如果容器没有停止,则不能删除,除非使用强制删除。

docker rm 容器名或id
参数:
-f            强制删除正在运行的容器

进入容器

docker exec -it 容器名或id bash
exit            退出容器(不会导致容器停止)
docker attach 容器名或id
exit            退出容器(会导致容器停止)

查看容器内服务日志

docker logs 容器ID
参数:
-f              实时输出日志
-t              加入时间戳
--tail n        显示日志最后n行

查看容器内的进程

docker top 容器名或ID

查看容器内部细节

docker inspect 容器ID

主机与容器进行文件传输

docker cp 主机文件 容器名(或id):容器路径  -------将主机文件复制到容器内部
docker cp 容器名(或id):容器文件 主机路径  -------将容器文件复制到主机内部

导出 | 导入容器

docker export 容器ID > 文件名.tar
例:
docker export 8053b126ca55 > redis.tar
cat 文件名.tar | docker import-镜像用户/镜像名:镜像版本号
例:
cat redis.tar | docker import - xun/redis:1.0
root@VM-4-12-ubuntu:/# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
xun/redis     1.0       a4dd13439b9c   5 seconds ago   113MB

将容器打包成镜像

docker commit -m "描述信息" -a "作者" 容器名或id 镜像名:标签

将镜像保存成一个.tar 文件

docker save 镜像名称:标签 -o 文件名

前台交互式启动:

docker run -it redis

Ubuntu 这些就需要前台交互式启动。

后台守护式启动:

像 Redis、MySQL 这些我们只需要让它们在后台运行就行了。

docker run -d redis

后台守护启动查看日志:

docker logs 容器ID

# 数据卷

数据卷:将 docker 容器内的数据保存进宿主机的磁盘中,将数据持久化保存, 也实现数据共享。

特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接实时生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷中的生命周期一直持续到没有容器使用为止

# 数据卷命令

创建数据卷

docker volume create 卷名

查看所有数据卷

docker volume ls

查看某个数据卷的细节

docker volume inspect 卷名

删除数据卷

docker volume prune    ------自动删除所有未使用的数据卷
docker volume rm 卷名   ------删除指定数据卷

把数据卷挂载到容器中

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
例:
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
将主机的/tmp/host_data映射到容器的/tmp/docker_data
此时如果在docker_data里新增文件,则主机host_data下也会新增文件,同理在主机下新增,容器内文件也会新增

可以使用 docker inspect 查看该容器挂载到哪些目录

guazai

以上默认该文件可读可写。

我们可能有时候需要设置可读:

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
:ro表示只读
例:
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data:ro --name=u1 ubuntu

这里的可读是指:主机可以写入数据到容器,而容器不能写入到主机,容器不能影响主机。通常用于同步数据

# 卷的继承和共享

docker run -it --privileged=true --volimes-from u1 --name u2 ubuntu
u2继承自u1的数据卷

需注意的是,此时如果 u1 容器停止不会影响到 u2 容器。但是如果 u1 容器再次启动,此时 u2 更改的数据卷会共享给 u1 容器。

# 常用服务的安装

服务安装总体步骤:

  1. 搜索镜像
  2. 拉取镜像
  3. 查看镜像
  4. 启动镜像 ===》服务端口映射
  5. 停止容器
  6. 移除容器

# MySQL

docker pull mysql
docker run -d -p 3307:3306 --privileged=true 
-v $PWD/conf:/etc/mysql/conf.d 
-v $PWD/logs:/logs 
-v $PWD/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456
--name mysql
mysql:latest
 
 
#参数说明
-d: 后台运行容器,并返回容器ID
-p 3307:3306:将容器的 3306 端口映射到主机的 3307 端口(第一个物理机端口,第二个容器端口)
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
注意:我这里这样写是为了看得清楚这段命令。

进入容器:

docker exec -it mysql bash

登录 MySQL:

mysql -u root -p
输入密码123456

MySQL 好像 8 版本之后都会默认允许外网访问。user 表中的 root 用户有两个, 一个是支持 localhost 访问,一个是 % 的数据,表示外部所有 IP 都可访问。

# Redis

docker 安装的 redis 默认没有配置文件,需要我们自己准备,我是去下载 redis 官网的压缩包自己复制了一份。

mkdir conf
cd conf
vim redis.conf
 
# 开放外网访问
protected-mode no
# 设置密码之后验证才能 zheng'z
requirepass sast_forever
sast forever
docker pull redis
 
docker run -p 6379:6379 --name test-redis -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v $PWD/data:/redis/data -d redis redis-server /etc/redis/redis.conf
 
#参数说明
-p 6379:6379:将容器的 6379 端口映射到主机的 6379 端口(第一个物理机端口,第二个容器端口)
-v $PWD/conf/redis.conf:/etc/redis/redis.conf:映射配置文件。
-v $PWD/data:/redis/data:映射数据文件。
-d: 后台运行容器,并返回容器ID
redis-server /etc/redis/redis.conf:使用指定的配置文件启动redis

# 搭建 Redis 集群

这个是我搭的例子:

开了六个 Redis 容器:

sudo docker run -d --name redis-node-1 --net host -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v $PWD/data/share/redis-node-1:/redis/data redis --cluster-enabled yes --appendonly yes --port 6381
sudo docker run -d --name redis-node-2 --net host -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v $PWD/data/share/redis-node-2:/redis/data redis --cluster-enabled yes --appendonly yes --port 6382
sudo docker run -d --name redis-node-3 --net host -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v $PWD/data/share/redis-node-3:/redis/data redis --cluster-enabled yes --appendonly yes --port 6383
sudo docker run -d --name redis-node-4 --net host -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v $PWD/data/share/redis-node-4:/redis/data redis --cluster-enabled yes --appendonly yes --port 6384
sudo docker run -d --name redis-node-5 --net host -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v $PWD/data/share/redis-node-5:/redis/data redis --cluster-enabled yes --appendonly yes --port 6385
sudo docker run -d --name redis-node-6 --net host -v $PWD/conf/redis.conf:/etc/redis/redis.conf -v $PWD/data/share/redis-node-6:/redis/data redis --cluster-enabled yes --appendonly yes --port 6386

搭建的redis集群命令

进入其中一个容器输入以下命令:

redis-cli --cluster create 你的真实ip:端口号 你的真实ip:端口号  你的真实ip:端口号 你的真实ip:端口号 你的真实ip:端口号 你的真实ip:端口号 --cluster-replicas 1

真实 ip 可在虚拟机输入 ifconfig 查看。

进入 redis

redis-cli -p 6385 -c
# 参数
-c         				防止路由失效
--cluster check      	 查看集群信息 例:redis-cli --cluster check 你的真实ip:端口号

查看集群节点信息,从这里可以知道节点的主从关系。

cluster nodes

# Dockerfile

Dockerfile 是用来构建 Docker 镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

Dockerfile 执行大致流程

Dockerfile

保留字作用
FROM当前镜像是基于哪个镜像 第一个指令必须事 FROM
MAINTAINER(deprecated)镜像维护者的姓名和邮箱地址
RUN构建镜像时需要运行的指令
EXPOSE当前容器对外暴露出的端口号
WORKDIR指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV用来在构建镜像的过程中设置环境变量
ADD将主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 包
COPY类似于 ADD,拷贝文件和目录到镜像中 将从结构上下文目录中 <原路径> 的文件 / 目录复制到新的一层的镜像的 < 目标路径 > 位置
VOLUME容器数据卷,用于数据保存和持久化工作
CMD指定一个容器启动时要运行的命令 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 命令行参数中指定的程序替换
ENTRYPOINT指定一个容器启动时要运行的命令 ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及其参数

# FROM

  • 当前镜像基于哪个镜像,指定一个已经存在的镜像作为模板
  • 第一条必须是 FROM
FROM <image>
  FROM <image>[:<tag>]

# MAINTAINER

  • 镜像维护者的姓名和邮箱地址

# RUN

  • 容器构建时需要运行的命令
  • 在 docker build 时运行
# shell 命令
  RUN <命令行命令>
  # exec 命令
  RUN ["可执行文件","参数1","参数2",...]
  例:
  RUN ["./test.php", "dev", "offline"] ===> RUN 。/test.php dev offline

# EXPOSE

  • 用来指定构建的镜像在运行为容器时对外暴露的端口
EXPOSE <port>[/tcp|/udp]
  EXPOSE 80/tcp    如果没有显示指定,则默认为tcp
  EXPOSE 80/udp

# WORKDIR

  • 指定在创建容器后,终端默认登录的工作目录,落脚点
WORKDIR <dir>
  WORKDIR /data       绝对路径/data
  WORKDIR aa          相对路径,/data下的aa,即/data/aa

# USER

  • 指定该镜像以什么样的用户去执行
  • 默认 root

# ENV

  • 用来在构建镜像过程中设置环境变量
  • 该环境变量可以在后续的任何 RUN 指令中使用
ENV <key> <value>
例:
ENV MY_PATH /usr/mytest
这个环境变量可以在后续中的任何RUN指令中使用,就像指定了环境变量前缀
WORKDIR $MY_PATH
也就是说,在我们 RUN 这个镜像的时候会跳转到 MY_PATH 这个目录

# VOLUME

  • 容器数据卷,用于数据保存和持久化工作
VOLUME /data

# ADD

  • 将宿主机目录下的文件拷贝进镜像且会自动处理 URL 和解压 tar 压缩包
ADD <src> <dir>
  ADD url /dir
  ADD test.tar /dir

# COPY

  • 类似 ADD, 拷贝文件和目录到镜像中
  • 路径不存在将会自动创建
COPY <src> <dir>
  COPY hom* /mydir/        通配符
  COPY hom?.text /mydir/     通配符添加多个文件
  COPY home.text relativeDir/   可以指定相对路径
  COPY home.text /absoluteDir/  可以指定绝对路径

# CMD

  • 在 docker run 时运行
  • 指定容器启动后需要干的事情
  • 语法与 RUN 相似,也是两种格式
  • Dockerfile 可以有多条 CMD 指令,但是只有最后一条生效(是最后一条命令覆盖前面的命令)
  • CMD 指令会被 docker run 之后的参数替换
# shell
 CMD <命令行命令>
 # exec
 CMD ["可执行文件","参数1","参数2",...]
 # 参数格式列表
 CMD ["参数1","参数2",...] 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数;

举个栗子说明覆盖操作:

这是 tomcat 的 dockerfile 的 CMD指令
CMD ["catalina.sh", "run"]
如果在启动 tomcat 时用以下命令
docker run -it -p 8080:8080 tomcat容器ID /bin/bash
那么dockerfile里的 CMD 指令将会被覆盖
CMD ["/bin/bash", "run"]

# ENTRYPOINT

  • 与 CMD 类似
  • 在 docker run 时运行
  • 不会被 docker run 的命令行参数指定的指令覆盖,这些命令行参数会被当做参数送给 ENTRYPOINT 指令指定的程序。叠加命令。
  • 可以和 CMD 一起用,一般是变参才会使用 CMD ,相当于给 ENTRYPOINT 传参
ENTRYPOINT <命令行命令>
  ENTRYPOINT ["可执行文件","参数1","参数2",...]

# Docker build 命令

# 语法

docker build [OPTIONS] PATH | URL | -

OPTIONS 说明:

  • --build-arg=[] : 设置镜像创建时的变量;
  • --cpu-shares : 设置 cpu 使用权重;
  • --cpu-period : 限制 CPU CFS 周期;
  • --cpu-quota : 限制 CPU CFS 配额;
  • --cpuset-cpus : 指定使用的 CPU id;
  • --cpuset-mems : 指定使用的内存 id;
  • --disable-content-trust : 忽略校验,默认开启;
  • -f : 指定要使用的 Dockerfile 路径;
  • --force-rm : 设置镜像过程中删除中间容器;
  • --isolation : 使用容器隔离技术;
  • --label=[] : 设置镜像使用的元数据;
  • -m : 设置内存最大值;
  • --memory-swap : 设置 Swap 的最大值为内存 + swap,"-1" 表示不限 swap;
  • --no-cache : 创建镜像的过程不使用缓存;
  • --pull : 尝试去更新镜像的新版本;
  • --quiet, -q : 安静模式,成功后只输出镜像 ID;
  • --rm : 设置镜像成功后删除中间容器;
  • --shm-size : 设置 /dev/shm 的大小,默认值是 64M;
  • --ulimit : Ulimit 配置。
  • --squash : 将 Dockerfile 中所有的操作压缩为一层。
  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • --network: 默认 default。在构建期间设置 RUN 指令的网络模式

# 举个栗子

编写 Dockerfile

# 基础镜像使用 Java
FROM openjdk:11
# 作者
MAINTAINER xun
# VOLUME 指定临时文件目录为 /tmp,在主机 /var/lib/docker 目录下创建了一个临时文件并链接到容器的 /tmp
VOLUME /tmp
# 将 jar 包添加到容器中并更名为 kakaBot_docker.jar
ADD kakaBot-1.0.0-RELEASE.jar kakabot_docker.jar
# 运行 jar 包
RUN bash -c 'touch /kakabot_docker.jar'
# 相当于 java -jar /kakabot_docker.jar
ENTRYPOINT ["java","-jar","/kakabot_docker.jar"]
# 暴露端口,看你项目暴露的端口是什么,springboot 默认是 8081 的嘛
EXPOSE 8888

使用 docker build 创建镜像

# 注意 -t 等价于 --tag,并且可以看见后面有个小数点
docker build -t kakabot_docker:1.0.0 .

使用 docker images 查看镜像

运行容器

docker run -d -p 8888:8888 镜像id

使用 docker ps 查看容器是否运行成功。

# Compose

# Compose 安装

sudo apt-get update
sudo apt-get install docker-compose-plugin
# 可以自己选版本
sudo apt-get install docker-compose-plugin=<VERSION_STRING>

测试是否安装成功

docker compose version

# Compose 常用命令

# 1、docker-compose up

示例:

#启动所有服务
docker-compose up
#在后台所有启动服务
docker-compose up -d
#-f 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d

# 2、docker-compose ps

示例:
#列出项目中目前的所有容器
docker-compose ps

# 3、docker-compose -h

#查看帮助
docker-compose -h

# 4、docker-compose down

#停止和删除容器、网络、卷、镜像。
docker-compose down [options]
选项包括:
–rmi type 删除镜像,类型必须是:all,删除 compose 文件中定义的所有镜像;local,
删除镜像名为空的镜像
-v, –volumes 删除已经在 compose 文件中定义的和匿名的附在容器上的数据卷
–remove-orphans 删除服务中没有在 compose 中定义的容器
示例:
#停用移除所有容器以及网络相关
docker-compose down

# 5、docker-compose pull

#拉取服务依赖的镜像
docker-compose pull [options] [SERVICE...]
选项包括:
–ignore-pull-failures 忽略拉取镜像过程中的错误
–parallel 多个镜像同时拉取
–quiet 拉取镜像过程中不打印进度信息

# 6、docker-compose start

#启动已经存在的服务容器
docker-compose start

# 7、docker-compose restart

#重启项目中的服务
docker-compose restart [options] [SERVICE...]
选项包括:
-t, –timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)
11、docker-compose rm
#删除所有(停止状态的)服务容器,推荐先执行 docker-compose stop 命令来停止容器
docker-compose rm [options] [SERVICE...]

选项包括:
–f, –force,强制直接删除,包括非停止状态的容器
- v,删除容器所挂载的数据卷

# 8、docker-compose stop

选项包括:
-t, –timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)
示例

#停止正在运行的容器,可以通过 docker-compose start 再次启动
docker-compose stop

# 9、docker-compose scale

#设置指定服务运行的容器个数,通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2

# 10、dokcer-compose config

#验证并查看 compose 文件配置
docker-compose config [options]

选项包括:
–resolve-image-digests 将镜像标签标记为摘要
- q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,
输出错误信息
–services 打印服务名,一行一个
–volumes 打印数据卷名,一行一个

# docker-compose.yaml 配置解释

version: "3.7"
services:
 
  example:                     #服务名称
    image: tomcat:8.0-jre8     #使用的镜像
    container_name: example_container_name    #容器启动时的名字
    ports:                     #容器端口映射,前面的是宿主机端口,后面是容器内端口
      - "8080:8080"
    volumes:                   #容器中的哪个路径和宿主中的路径进行数据卷映射
      - /root/apps:/usr/local/tomcat/webapps     #手动映射
      - tomcatwebapps:/usr/local/tomcat/webapps  #自动创建数据卷映射,需要在后面声明数据卷
    networks:                  #指定容器启动使用的网桥
      - aa
    command: xxxxx             #用于覆盖容器默认启动指令
    envoriment:                #指定容器启动时的环境参数
      - xxxxx=xxxx
      
    #env_file:                 使用环境变量文件,书写格式和环境参数相同
    #  - ./xxx.env
    
    depends_on:                #设置这个服务依赖的服务名称(即启动优先级)
      #可以关联其他的服务
      - xxxxx
      
    #sysctls:                  #修改容器内部参数
    #  - xxxx=xxxx
    
volumes:
   tomcatwebapps:
   #external:       默认卷名会带上项目名 (yml 文件所在文件夹名),
   #  true          可以声明使用外部以存在的卷
   
networks:
   aa:                #创建逻辑同 volume,将不同服务关联到一个网桥
更新于 阅读次数