应为Docker这个还是很长的一个东西,我怕以后忘了就习惯性写成了笔记

他的官方https://www.docker.com/
官方手册地址很详细的https://docs.docker.com/
官方文档非常详细https://docs.docker.com/engine
看的视频https://www.bilibili.com/video/BV1sK4y1s7Cj
看的视频https://www.bilibili.com/video/BV1og4y1q7M4
参考的文章https://www.jianshu.com/p/d3006b8a22ee
参考的文章https://www.runoob.com/docker/docker-tutorial.html
参考的文章https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html

什么是Docker

Docker 是一个开源的应用容器引擎

他可以解决环境不一致,叫整个环境打包成一个集装箱,然后别人下载下来运行就不会出错了

容器是完全使用沙箱机制,就是隔离型,他运行的时候会在Linux内核里面开辟一个空间,这个空间不会影响其他的东西

虚拟机会站很大的空间,虚拟机会创建一个内核,

Docker与虚拟机的区别

docker有着比虚拟机更少的抽象层
Docker用的是物理机的内核
vm是自己创建一个内核环境会变的很慢

Docker的安装

他有Docker-ce版本的介绍社区版本的和Docker-ee企业版本

kali安装运行下面这个命令就可以直接安装

1
apt install docker.io

如果是其他的linux可以用下面这个命令安装

1
curl -s https://get.docker.com/ | sh

Docker的卸载

卸载依赖

1
sudo yum remove docker-ce docker-ce-cli containerd.io

卸载资源

1
sudo rm -rf /var/lib/docker

启动Docker

命令

1
systemctl start docker

查看是否启动成功
命令

1
docker version  

可以运行一下helloworld
命令

1
docker run hello-world 

Docker 镜像加速

地址有

1
2
3
4
5
6
https://hub.docker.com/     //官方
https://reg-mirror.qiniu.com //七牛云
https://hub-mirror.c.163.com //网易云
https://registry.docker-cn.com //Docker中国区官方镜
https://cr.console.aliyun.com/ //阿里云
​http://hub.daocloud.io(推荐使用) //daoCloud

/etc/docker/daemon.json在这个文件里面添加下面的代码,如果没有文件创建一个文件

1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
---

查看有没有配置好
重启docker

1
systemctl restart docker

重启完运行下面这个命令

1
docker info

出现下面出现这个就成功了

docker镜像基础命令

他的官方命令说明https://docs.docker.com/reference/

参数 作用
images 查看已经下载的镜像
search 进行搜索镜像
pull 下载镜像
rmi 卸载镜像
save -o参数导出镜像
load -i进行导入镜像
tag 修改镜像信息

查看他的命令可以用

1
man docker

1
docker --help

如果命令的参数不会用可以用

1
docker 参数命令 --help

1
docker images --help

pull下载镜像

命令
如果不指定他默认会去你配置的进行库去下载

1
docker pull 要下载镜像的名

指定版本下载
下面下载的是php的7.1版本

1
docker pull php:7.1

指定目录进行下载,
下载命令

1
docker pull 下载的拉取命令

事例
比如下面这个地址http://hub.daocloud.io
下面是php

拉取命令是daocloud.io/library/php:7.4-alpine
进行下载
命令

1
docker pull  daocloud.io/library/php:7.4-alpine

可以看见已经下载好了

rmi卸载镜像

查看镜像ID
命令

1
docker images

结果

rmi卸载镜像
命令

1
docker rmi -f 要删除镜像的ID


命令

1
docker rmi -f bf756fb1ae65

可以看见删除成功

images查看已经下载的镜像

1
docker images

他的表示的意思

1
2
3
4
5
REPOSITORY   镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小

他的可选参数
常用的

1
2
-a, --all  列出所以镜像
-q, --quiet 只显示镜像ID

下面咧

1
docker images -q  

search进行搜索镜像

命令

1
docker search  要搜索的景象名

测试
命令

1
docker  search mysql

可选参数
查看可选参数
命令

1
docker  search  --help 


进行过滤

镜像的导入导出

比如有的镜像下载不下来,我们就可以用别人导出的镜像进行安装

镜像的导出、

格式

1
docker save -o   要导出的路径   镜像的ID

实咧
查看现在我的都是有什么镜像文件命令docker images

我就叫那个php给导出出来
命令

1
docker save -o  /root/php.image e7ddddb9c714

查看一下文件可以看见已经导出成功了

镜像的导入

格式

1
docker load -i  镜像的文件

实咧
我叫那个php给删除命令docker rmi -f 要删除的ID
我导入上面那个已经导入出来的php
命令

1
docker load -i /root/php.image

可以看见导入成功

修改镜像信息

可以看见我们导入的他没有名字和版本

格式
下面一个:就代表下一个信息

1
docker tag 进行的ID 要修改的名字:版本号:...:....:....

事例
命令

1
docker tag e7ddddb9c714  php:7.1

可以看见修改成功

docker容器的命令

参数 作用
run 运行镜像
ps 查看正在运行的容器
attach 启动后进入容器
exit 退出容器,这个退出之后容器也会停止
Ctrl+P+Q 这样退出容器不会停止运行
start 启动容器
stop 停止容器
restart 重启容器
kill 强制关闭容器
rm 删除容器
logs 查看日志
run的可选参数 作用
--name 指定容器的名称
-it 交互方法运行 主机可以进入
-d 代表后台运行容器,-d和-it有冲突
-p 为了映射当前Linux端口和容器端口
-P 他会随机指定端口
ps的可选参数 作用
-a 查看全部的容器,包括没有运行
-p 只查看容器的ID
logs的可选参数 作用
-f 可以滚动查看日志的最后几行
-t 显示时间

简单运行

在web是没有办法访问的
命令
下面这个运行如果没有他会下载在运行

1
docker run 镜像的标识/镜像名称:版本号

运行常用的参数

命令

1
docker run --name 容器名称  -it  -p 宿主机端口:容器端口   镜像的ID/镜像名称:版本号  /bin/bash

--name 容器名称:指定容器的名称
-it 交互方法运行 主机可以进入
-d 代表后台运行容器,上面我没有加应-d-it有冲突
-p 宿主机端口:容器端口:为了映射当前Linux端口和容器端口 ,他还有个-P他会随机指定端口
/bin/bash 是运行控制台 载入容器后运行 ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash

他的坑
命令
下面这个命令是在后台启动,但是发现他没有启动而是关闭了
应为他没有前端启动所以启动后就关闭了

1
docker run -d 镜像的ID/镜像名称:版本号

查看正在运行的容器

ps参数
命令
如果ps没有添加任何参数他会显示正在运行的容器

1
docker ps  

可以看见下面启动了kali 容器

CONTAINER ID 表示容器ID
IMAGE 镜像ID
COMMAND 执行的命令
CREATED 已经建立的时间
STATUS 状态
PORTS 用的端口
NAMES 容器名字
ps还有可选参数

-a参数
-a:查看全部的容器,包括没有运行
命令

1
docker ps -a

-p参数
-q:只查看容器的ID
命令

1
docker ps -q 

命令

进入容器

启动的时候直接进入容器
启动的时候直接进入容器添加-it和/bin/bash就可以直接进入容器
命令

1
docker run  -it a1765e8e381e   /bin/bash

-it 交互方法运行 主机可以进入
a1765e8e381e 是镜像ID
/bin/bash 是运行控制台 载入容器后运行 ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash

启动后进入容器

或者启动后用attach参数进入容器

1
docker attach 容器ID

还有一个exec参数进入容器

1
docker exec 容器ID   /bin/bash

attach和exec他两个区别
exec 命令会开启新的终端
attach 这个会进入正在运行的终端

退出容器

在容器里面输入exit退出容器,这个退出之后容器也会停止

如果不行停止可以用Ctrl+P+Q,这样退出容器不会停止运行
可以看见他他还在运行

启动和关闭容器

如果我们关闭容器了
我们可以启动他里面的东西是不会变的

重启容器

1
docker restart  容器ID

关闭容器

1
docker stop  容器ID

强制关闭容器

1
docker kill  容器ID

启动容器

1
docker start  容器ID

然后我们这进入容器看看

1
docker attach  容器ID

可以看见已经进入了

删除容器

然后删除这个容器里面的东西就没有了和删除虚拟机一样

停止指定的容器
命令

1
docker stop 容器id

停止全部容器
命令

1
docker stop $(docker pa -qa)

删除指定的容器
命令

1
docker rm 容器id

删除全部容器

1
docker rm $(docker pa -qa)

查看日志

命令

1
docker logs -f -t  容器ID

-f 可以滚动查看日志的最后几行
-t 显示时间

实咧下载和运行加进入容器

下面我先下载一个kali Linux容器
命令

1
docker pull kalilinux/kali-linux-docker

可以docker images命令查看下载好的镜像

启动和进入容器

1
docker run --name kali -it -p 5555:22  a1765e8e381e /bin/bash

--name 容器名称:指定容器的名称
-it 交互方法运行 主机可以进入
-p 宿主机端口:容器端口:为了映射当前Linux端口和容器端口 ,他还有个-P他会随机指定端口
/bin/bash 是运行控制台 载入容器后运行 ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash

可以看见已经进入了

常用命令

参数 作用
top 查看容器里的进程
cp 叫物理机文件复制容器里面
inspect 查看容器的信息
history 查看镜像是怎么做的

查看容器里的进程

命令

1
docker  top 容器ID

容器和物理机传输文件

叫物理机文件复制容器里面
命令

1
docker cp 文件名称 容器id:容器内部路径

实咧
命令

1
docker cp /root/get-pip.py 702e50cf2295:/root/get-pip.py 

可以看见已经叫get-pip.py复制到容器的里面

叫容器里面文件复制物理机
命令

1
docker cp   容器id:容器内部路径  路径文件名称

查看容器的信息

命令

1
docker inspect  容器ID

查看镜像是怎么做的

命令

1
docker history  镜像ID

Portaine可视化面板安装

下载Portaine

命令

1
docker pull portainer/portainer

创建Portainer容器

1
docker run -d -p 8080:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer  portainer/portainer

命令的意思
-d 代表后台运行容器
-p 为了映射当前Linux端口和容器端口,开启的是物理机的8080访问的是容器的9000 端口
启动的是portainer/portainer镜像

端口已经打开了

访问Portainer容器进行web管理

上面那个启动的物理机的8080我们就可以访问物理机的8080端口
命令

1
http://物理机IP:8080

然后我们就可以设置密码了


下面这个我进行了谷歌翻译

镜像原理之联合文件系统

复制与https://blog.csdn.net/Saker__/article/details/107629736#_384

UnionFS(联合文件系统)

  • UnionFs(联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下( unite several directories into a single virtual filesystem)。Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
  • 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

  • docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
  • bootfs(boot ilesystem)主要包含bootloader和kerne,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由botfs转交给内核,此时系统也会卸载bootfs。[个人理解:bootfs用于开机,rootfs用于命令。]
  • rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/de,/proc,/bin,/etc等标准目录和文件。roots就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

为什么虚拟机很大,Docker很小?
对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版, bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
虚拟机是分钟级别,容器是秒级!

分层原理

所有的Docker┌镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。
举一个简单的例子,假如基于UbuntuLinux16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
该镜像当前已经包含3个镜像层,如下图所示(这只是一个用于演示的很简单的例子)。

在添加额外的镜像层的同时,镜像始终保持是当前所有镜像的组合,理解这一点非常重要。下图中举了一个简单的例子,每个镜像层包含3个文件,而镜像包含了来自两个镜像层的6个文件。

上图中的镜像层跟之前图中的略有区别,主要目的是便于展示文件。
下图中展示了一个稍微复杂的三层镜像,在外部看来整个镜像只有6个文件,这是因为最上层中的文件7是文件5的一个更新版本

这种情况下,上层镜像层中的文件覆盖了底层镜像层中的文件。这样就使得文件的更新版本作为一个新镜像层添加到镜像当中。
Docker通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。
Linux上可用的存储引擎有AUFS、Overlay2、Device Mapper、Btrfs以及ZFS。顾名思义,每种存储引擎都基于Linux中对应的文件系统或者块设备技术,并且每种存储引擎都有其独有的性能特点。
Docker在Windows上仅支持windowsfiter一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和CoW【1】.
下图展示了与系统显示相同的三层镜像。所有镜像层堆叠并合并,对外提供统一的视图。

容器数据卷

什么是数据卷

数据卷:将宿主机的一个目录映射到容器的一个目录中
我们想叫容器有的数据同步在本地上,容器和本地之间可以共享数据,这个就是数据卷
简单理解就是比如vm虚拟机下载的文件下载到本地共享文件夹里面,我们删除虚拟机本地共享文件夹里面的下载文件还在

容器目录映射-v参数

上面有一个-p 5555:22是叫本地端口映射到容器的22端口上
我们就可以用-v进行文件映射-v 主机目录:容器目录
列如下面这个
就会吧主机目录映射到容器目录里面

1
docker run   -v 主机目录:容器目录    镜像的ID/镜像名称:版本号  /bin/bash

还可以设置权限
ro意思是只读意思

1
docker run   -v 主机目录:容器目录:ro    镜像的ID/镜像名称:版本号  /bin/bash

容器和物理机目录映射

在物理机里面创建一个a文件夹

命令

1
cker run --name kali2  -it   -v  /root/a:/root/b  a1765e8e381e   /bin/bash 

--name 容器名称:指定容器的名称
-v 知道映射主机目录和容器目录
启动下面这个命令他会在容器kali里面创建一个b文件夹
-it 交互方法运行 主机可以进入
/bin/bash 是运行控制台 载入容器后运行 ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash
可以看见容器里面有一个b文件

查看他有没有映射成功

容器的信息里面有他的映射信息
命令

1
docker inspect  容器ID

可以看见映射成功

测试看看文件同步不

在物理机里面创建一个a.txt文件

可以看见容器kali里面已经有了a.txt文件

如果我们关闭容器然后在物理机创建一个文件
那在容器启动后也会有那个文件

其他的挂载

具名挂载
创建数据卷
创建数据卷之后,默认会存放在一个目录下 /war/lib/docker/volumes/数据卷名称/_data

1
docker volume create 数据卷名称

查看数据卷的详细信息

1
docker volume inspect 数据卷名称

查看全部数据卷

1
docker volume ls

删除数据卷

1
docker volume rm 数据卷名称

应用数据卷

当你映射数据卷时,如果数据卷不存在,Docker会自动帮你创建,会将容器内部自带的文件,存储在默认的存放路径中

1
docker run -v 数据卷名称:容器内部的路径 镜像id

实咧多个容器同步挂载

多个容器挂载会用到--volumes-from
格式

1
docker run --name kali3  -it  --volumes-from  已经挂载的容器名     镜像的ID/镜像名称:版本号  /bin/bash

实咧
容器和物理机目录映射
在物理机里面创建一个a文件夹

命令

1
cker run --name kali2  -it   -v  /root/a:/root/b  a1765e8e381e   /bin/bash 

--name 容器名称:指定容器的名称
-v 知道映射主机目录和容器目录
启动下面这个命令他会在容器kali里面创建一个b文件夹
-it 交互方法运行 主机可以进入
/bin/bash 是运行控制台 载入容器后运行 ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash
可以看见容器里面有一个b文件

测试看看文件同步不
在物理机里面创建一个a.txt文件

可以看见容器kali里面已经有了a.txt文件

我在创建一个kali3的容器然后在叫这新个容器用--volumes-from挂载在哪个已经挂载挂数据卷物理机的kali2上面
这样就实现多个容器同步了

命令

1
docker run --name kali3  -it  --volumes-from  kali2   a1765e8e381e   /bin/bash

可以看见在kali3也是同步了

如果kali2容器删除了,那kali3也会正常同步的

commit参数容器变成镜像

我的这个kali已经添加和下载了很到东西,我叫我的这个kali的容器进行生成镜像,就和vm快照差不多
比如我们的用的镜像好用我们就可以叫容器打包成镜像
命令

1
docker commit -m="提交的描述信息" -a="作者" 容器id  制作出来的镜像名:他的版本号

实咧

查看一下kali容器号
命令

1
docker ps

容器号是702e50cf2295

命令

1
docker commit -m="kali" -a="abc" 702e50cf2295  kalilinux2:1.0 

成功

我们查看一下进行,出来了一个kalinux2的镜像大小比原来的多0.3g
这个镜像我们直接就可以用了,

定义自己的镜像

Dockerfile的命令

他的命令记住必须大写

命令 作用
FROM 基础镜像信息,一切从这里开始
MAINTAINER 作者的信息 ,姓名+邮箱
RUN 镜像运行的时候需要运行的命令
ADD 一个复制命令,把文件复制到镜像中
WORKDIR 镜像的工作目录
VOLUME 挂载的目录,可以将文件夹或者其他容器种得文件夹挂在到这个容器种
EXPOSE 功能为暴漏容器运行时的监听端口给外部,和-P差不多
CMD 功能为容器启动时要运行的命令
ENTRYPOINT 功能是启动时的默认命令
ONBUILD 触发命令,构建一个被继承Dockerfile,会触发ONBUILD的命令
COPY 类似ADD,文件拷贝到镜像中
ENV 功能为设置环境变量,就和a=10,这个a就是10一样

实战测试

我们安装kali linux的里面什么都没有连ifconfig命令都没有还得需要自己下载
我想叫基本命令和ssh给添加上去

编写Dockerfile文件

我就创建一个名字是own-Kali-Linux

文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM  kalilinux/kali-linux-docker     

MAINTAINER zhaobia<2737977997@qq.com>

ENV MuLu /use/local

WORKDIR $MuLu

RUN echo "deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib" > /etc/apt/sources.list
RUN apt update
RUN apt -y install net-tools
RUN apt -y install vim
RUN apt -y install ssh

RUN /etc/init.d/ssh start
EXPOSE 22

CMD echo "------下载成功---------"
CMD /bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FROM  kalilinux/kali-linux-docker     #基础镜像信息,一切从这里开始

MAINTAINER zhaobia<2737977997@qq.com> #作者的信息 ,姓名+邮箱

ENV MuLu /use/local #这个就是叫Mulu就是个变量,他就是/use/local

WORKDIR $MuLu #镜像的工作目录就是我们进入镜像就进入指定的目录 $MuLu就是上面的变量

#下面都是在kalilinux/kali-linux-docker镜像里面运行的命令
#这个是更换一下源
RUN echo "deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib" > /etc/apt/sources.list
#下面都是下载一些东西,如果不加y他就报错了
RUN apt update
RUN apt -y install net-tools
RUN apt -y install vim
RUN apt -y install ssh
RUN /etc/init.d/ssh start

#映射容器内的22端口
EXPOSE 22

#CMD功能为容器启动时要运行的命令
CMD echo "------下载成功---------"
CMD /bin/bash

通过文件构建镜像

构建镜像用build参数进行构建
格式
后面有一个.

1
docker build -f 编写的Dockerfile文件名 -t  镜像名字:版本 . 

用上面的own-Kali-Linux文件构建成镜像
命令

1
docker build -f own-Kali-Linux -t  kalilinux:1.0 .  

可以这样就可以进行执行自己写的命令了

用命令docker images查看一下镜像可以看见有一个名kalilinux版本1.0的kali

测试自己定义的镜像

用自己定义的镜像启动容器

命令

1
docker run  -it 77319bf090e7  /bin/bash

我们看一下我在own-Kali-Linux里面指定的命令已经被直接了
安装了net-tools,vim,ssh
可以看见已经被安装了

查看镜像是怎么做的

命令

1
docker history  镜像ID

CMD和ENTRYPOINT的区别

CMD执行的命令

制作一个镜像文件

1
2
FROM  centos
CMD ['ls','-a']

可以看见直接到时候就运行了ls -a命令

如果启动的时候启动添加命令他就会报错

ENTRYPOINT执行的命令

1
2
FROM  centos
ENTRYPOINT ['ls','-a']

可以看见直接到时候就运行了ls -a命令

如果启动的时候启动添加命令他就没有报错

他两个的区别

CMD如果启动的时候启动添加命令他就会报错

ENTRYPOINT如果启动的时候启动添加命令他就没有报错

上发镜像中央仓库上

地址https://hub.docker.com/

登录仓库上

命令
回车之后就叫你输入密码了

1
docker login  -u 用户 回车

提交镜像

1
docker push  镜像名或者镜像ID:版本号

Docker-Compose

什么是Docker-Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

下载Docker-Compose

在kali下载命令是

1
apt install  docker-compose

其他linux系统如果没有可以在github上下载地址https://github.com/docker/compose/releases

出现下面这个就下载成功了

Docker-Compose编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version:'3.1'
services:
mysql: # 服务的名称
restart: always # 代表只要Docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:5.7.4 # 指定镜像路径
container_name: mysql # 指定容器名称
ports:
- 3306:3306 # 指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql-tomcat/mysql_data:/var/lib/mysql # 映射数据卷
tomcat:
restart: always # 代表只要Docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/tomcat:8.5.15-jre8 # 指定镜像路径
container_name: tomcat # 指定容器名称
ports:
- 8080:8080 # 指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql-tomcat/tomcat_webapps:/usr/local/tomcat/webapps # 映射数据卷
- /opt/docker_mysql-tomcat/tomcat_logs:/usr/local/tomcat/logs # 映射数据卷

可以看这个地址https://www.runoob.com/docker/docker-compose.html

命令

基于docker-compose.yml启动管理的容器

1
docker-compose up -d


关闭并删除容器