一. 数据卷
为了部署ssm工程, 需要用到docker cp 的命令将宿主机内的ssm.war文件复制到容器内部. 如果想要修改容器内部的内容, 非常困难.
为了方便维护容器内部的内容, 需要数据卷.
数据卷就是: 将宿主机中的目录映射到容器的一个目录中. 修改宿主机中的内容, 则映射的容器内部的内容也会随之改变
1.创建数据卷
docker volume create 数据卷名称
默认的数据卷存放位置: /var/lib/docker/volumes/数据卷名称/_data
(usr包含一般不需要修改的应用程序,命令程序文件,程序库,手册, 而var存放系统产生的经常变化的文件)
2.查看数据卷的详细信息
docker volume inspect 数据名称
3 查看所有数据卷: docker volume ls
4 删除数据卷: docker volume rm 数据卷名称
5. 应用数据卷: 在创建容器时候, 将数据卷映射到容器内部
当你映射数据卷时,如果数据卷不存在, docker会自动创建一个数据卷, 或者单独设置一个路径
第一种: docker run -v 数据卷名称:容器内部路径 镜像id
第二种:docker run -v 路径:容器内部路径 镜像id
两种生成数据卷的方式: 第二种常用, 区别是第二种在创建数据卷时候不生成与映射容器内部路径下相同的内容(即创建时webapps下的内容不会被同步到数据卷里, 但以后往数据卷中添加时候回同步映射)
二. 自定义镜像
中央仓库上的镜像也是docker用户上传的. 我们也可自定义镜像上传到中央仓库
1.创建一个Dockerfile文件, 并且指定自定义镜像信息
Dockerfile文件中常用的内容 :
(1)from:指定当前自定义镜像依赖的环境
(2)copy将相对路径下的内容复制到自定义镜像中
(3)workdir: 声明镜像的默认工作目录
(4) cmd: 需要执行的命令(在workdir下执行的, cmd可以写多个, 只以最后一个为准
举例: 把ssm工程部署到tomcat之后, 把这个容器制作成镜像.
(1) 编写Dockerfile文件(不带后缀) 的内容 : 表示将ssm.war复制到 daocloud.io/library/tomcat:8.5.14-jre8镜像的 /usr/local/tomcat/webapps路径下
from daocloud.io/library/tomcat:8.5.14-jre8
copy ssm.war /usr/local/tomcat/webapps
(2) 将ssm.war和Dockerfile的内容复制到linux系统中, 并通过docker命令制作镜像
docker build -t 自定义的镜像名称:[版本] .
最后的.表示将当前的Dockerfile制作成
参数t表示tag 是name:tag的格式
注意, 制作镜像是在ssm-tomcat的路径下
运行镜像, 生成容器 :
三. Docker-Compose
(一) 按照 Docker-Compose
1.为了方便的执行命令, 简约化命令的参数, 编写参数到一个文件里
2 可以通过Docker-Compose, 批量的管理容器
只需要通过docker-compose.yml文件去维护即可
操作:
1. 下载docker/compose 地址:https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
2. 将下载好的文件拖拽到linux中,然后剪贴到usr/local/bin下, 并修改文件名为docker-compose,(因为后面要用该执行文件名执行, 否则太长不好操作)
3. 修改docker-compose的执行权限,
chmod +x 表示将权限设为可执行
4.将docker-compose移动到usr/local/bin目录, 配置环境变量方便操作.
修改 /etc/profile 文件,如果你的计算机仅仅作为开发使用时推存使用这种方法,因为所有用户的shell都有权使用这个环境变量,可能会给系统 带来安全性问题。这里是针对所有的用户的,所有的shell
vi /etc/profile
在/etc/profile的最下面添加: export PATH="$PATH:/NEW_PATH"
然后在重新加载 source /etc/profile, 就可以在任意目录下执行该文件了
(二) 使用docker-compose管理容器
yml文件
1,以key: value方式来制定配置信息
2. 换行和缩进区分配置信息
yml例子:
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: A935364758 TZ: Asia/Shanghai #指定时区 volumes: - /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql #映射数据卷 tomcat: restart: always image: daocloud.io/library/tomcat:8.5.14-jre8 container_name: tomcat ports:
- 8080:8080 environment: TZ: Asia/Shanghai #指定时区 volumes: - /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps - /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
1.创建/opt/docker_compose_mysql_tomcat目录并编写docker-compose.yml文件内容. 该文件名不能变, 名字必须是docke-compose.yml
2. 基于docker-compose.yml文件启动管理容器
2.1启动:
docker-compose up -d
注意:该命令一定在docker-compose.yml文件所在的目录下执行, 该命令会自动寻找docker-compose.yml文件
2.2 关闭并删除容器
2.3 开启 | 关闭 | 重启已经存在的容器
docker-compose start | stop | restart
2.4 查看docker-compose管理的容器
docker-compose ps
2.5 查看日志
docker-compose logs -f
注意: tomcat在docker-compose.yml中做了映射,即配置: - /opt/docker_compose_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
直接进入docker-compose, 用cat 文件名命令查 看
(三) docker-compose配合Dockerfile使用
docker-compose.yml和Dockerfile文件在生成自定义镜像的同时, 启动当前镜像, 并由docker-compose管理
3.1准备工作:
(1) yml文件
version: '3.1' services: ssm: #服务名称 restart: always #只要docker启动, 这个容器就启动 build: #构建自定义镜像 context: ../ #指定dockerfile文件所在位置 dockerfile: Dockerfile #指定dockerfile文件的名称 image: ssm:1.0.1 #指定镜像路径 container_name: ssm #指定自定义容器名称,而不是生成的默认名称。 ports: - 8083:8080 #指定端口。 environment: TZ: Asia/Shanghai #指定时区
(2). Dockerfile文件
from daocloud.io/library/tomcat:8.5.14-jre8 copy ssm.war /usr/local/tomcat/webapps
(3)目录docker-ssm
|----docker-compose
|----docker-compose.yml
|----Dockerfile
|----ssm.war
将该目录扔到linux的/opt/下
3.2 启动 docker-compose up -d 注意在docker-compose目录下, 因为要找默认的docker-compose.yml文件
注意: 链接mysql的话, 一定要启动mysql服务, 否则报错链接不到服务