目录
6.3.5.2 Docker-Compose管理MySQL和Tomcat容器
6.3.1 Docker概述
6.3.1.1 什么是Docker
Docker是一个开源的应用容器引擎,Docker会将应用和依赖打包为镜像.
Docker可以将应用程序打包到容器中,容器包含了应用程序的代码、运行环境、依赖库、配置文件等资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下
Docker与面向对象
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
镜像类似类,跑起来的镜像才是一个容器
6.3.1.2 Docker组成
- 集装箱:会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了。
- 标准化:
- 运输的标准化:Docker有一个码头,所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,就直接指派大海去搬运这个集装箱就可以了。
- 命令的标准化:Docker提供了一些列的命令,帮助我们去获取集装箱等等操作。
- 提供了REST的API:衍生出了很多的图形化界面,Rancher。
- 隔离性:Docker在运行集装箱内的内容时,会在Linux的内核中,单独的开辟一片空间,这片空间不会影响到其他程序。
- 中央仓库|注册中心:超级码头,上面放的就是集装箱
- 镜像:就是集装箱 类
- 容器:运行起来的镜像 对象
6.3.2 Docker的安装
6.3.2.1 下载Docker依赖的环境
由于Docker底层是
先将依赖的环境全部下载
[root@localhost local]# yum -y install yum-utils device-mapper-persistent-data lvm2
如果安装过,执行删除
[root@localhost ~]# yum -y remove docker-ce
6.3.2.2 指定Docker镜像源
下载地设置为阿里云镜像源,速度更快
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.3.2.3 安装Docker
yum的方式安装
[root@localhost ~]# yum makecache fast
[root@localhost ~]# yum -y install docker-ce
6.3.2.4 启动Docker并测试
# 关闭防火墙
[root@192 ~]# systemctl stop friewalld
# 启动Docker服务
[root@localhost ~]# systemctl start docker
# 测试 hello-world 执行后需要等待一会
[root@localhost ~]# docker run hello-world
6.3.3 Docker的中央仓库
Docker官方的中央仓库:这个仓库是镜像最全的,但是下载速度较慢。
【Docker】
国内的镜像网站:网易蜂巢,daoCloud等,下载速度快,但是镜像相对不全。
【登录】
【Hub · DaoCloud 】(推荐使用)
在公司内部会采用私服的方式拉取镜像,需要添加配置,如下……
【阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台】
6.3.4 Docker操作
6.3.4.1 镜像操作
从中央仓库拉取镜像到本地
docker pull 镜像名称[:tag]
[root@localhost ~]# docker pull daocloud.io/library/tomcat:8.5.15-jre8
查看本地已经安装过的镜像信息,包含标识,名称,版本,更新时间,大小
[root@localhost ~]# docker images
镜像会占用磁盘空间,可以直接手动删除,表示通过查看获取
docker rmi 镜像的标识(需要先删除该镜像创建的容器)
[root@localhost ~]# docker rmi b8
如果因为网络原因可以通过硬盘的方式传输镜像,虽然不规范,但是有效,但是这种方式导出的镜像名称和版本都是null,需要手动修改
# 将本地的镜像导出
docker save -o 导出的路径 镜像id
# 导出到当前路径,镜像命名为:mytomcat
[root@localhost ~]# docker save -o ./mytomcat b8dfe9ade316
# 加载本地的镜像文件
docker load -i 镜像文件
[root@localhost ~]# docker load -i mytomcat
# 修改镜像名称
docker tag 镜像id 新镜像名称:版本
[root@localhost ~]# docker tag b8dfe9ade316 tomcat:8.5
6.3.4.2 容器操作
运行容器需要制定具体镜像,如果镜像不存在,会直接下载
# 简单操作
docker run 镜像的标识|镜像名称[:tag]
# 常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[:tag]
# -d:代表后台运行容器
# -p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口
# --name 容器名称:指定容器的名称(自定义)
[root@localhost ~]# docker run -d -p 8888:8080 --name mytomcat8.5 b8dfe9ade316
# 测试:浏览器访问 虚拟机ip:8888
查看全部正在运行的容器信息
docker ps [-qa]
# -a:查看全部的容器,包括没有运行
# -q:只查看容器的标识
[root@localhost ~]# docker ps
查看容器日志,以查看容器运行的信息
docker logs -f 容器id
# -f:可以滚动查看日志的最后几行
[root@localhost ~]# docker logs -f 4411f56f1fbb
可以进入容器内部进行操作
docker exec -it 容器id bash
[root@localhost ~]# docker exec -it 4411f56f1fbb bash
# 退出当前容器 exit
root@4411f56f1fbb:/usr/local/tomcat# exit
将宿主机的文件复制到容器内部的指定目录
docker cp 文件名称 容器id:容器内部路径
# 把主机root目录下的a.txt文件拷贝到容器的temp目录下(由于tomcat默认路径在/usr/local/tomcat)
[root@localhost ~]# docker cp /root/a.txt 441:/usr/local/tomcat/webapps
# 把容器的temp目录下的a.txt拷贝到主机root目录下
[root@localhost ~]# docker cp 441:/usr/local/tomcat/temp/a.txt /root
容器的启动,停止,删除等操作
# 重新启动容器
[root@localhost ~]# docker restart 容器id
# 启动停止运行的容器
[root@localhost ~]# docker start 容器id
# 停止指定的容器(删除容器前,需要先停止容器)
[root@localhost ~]# docker stop 容器id
# 停止全部容器
[root@localhost ~]# docker stop $(docker ps -qa)
# 删除指定容器
[root@localhost ~]# docker rm 容器id
# 删除全部容器
[root@localhost ~]# docker rm $(docker ps -qa)
6.3.4.3 Docker的应用
6.3.4.3.1 Docker安装Tomcat
# 运行Tomcat容器
[root@localhost ~]# docker run -d -p 8080:8080 --name mytomcat b8dfe9ade316
6.3.4.3.2 Docker安装MySQL
# 拉取MySql镜像
[root@localhost ~]# docker pull daocloud.io/library/mysql:5.7.4
# 运行MySql容器
[root@localhost ~]# docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4
6.3.5 Docker-Compose
Docker-Compose可以帮助我们批量的管理容器。这些信息只需要通过一个docker-compose.yml文件去维护即可。
6.3.5.1 下载并安装Docker-Compose
下载路径:https://github.com/docker/compose/releases/tag/1.24.1
将docker-compose-Linux-x86_64文件拷贝到/usr/local 目录下
但是docker-compose-Linux-x86_64无法运行,所以要设置文件的权限
给文件赋所有的权限
[root@192 local]# chmod 777 docker-compose-Linux-x86_64
方便后期操作,配置一个环境变量
[root@192 local]# vim /etc/profile
添加内容到最后一行:export PATH=/usr/local:$PATH
执行命令使文件生效
[root@192 local]# source /etc/profile
[root@192 local]# docker-compose-Linux-x86_64
至此,Docker安装成功
6.3.5.2 Docker-Compose管理MySQL和Tomcat容器
之前都是单独手动安装MySQL和Tomcat,十分麻烦,现在可以使用Docker-Compose
docker-compose.yml
version: '3.1'
services: # services中有很多应用,如mysql和tomcat
mysql: # 服务的名称
restart: always # 代表只要docker启动,那么这个容器就跟着一起启动
image: docker.io/library/mysql:5.7.40 # 指定镜像路径,去这里下载,之后安装
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
image: docker.io/library/tomcat:8.5.83-jdk8-corretto-al2
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
在使用docker-compose的命令时 ,默认会在当前目录下找docker-compose.yml文件,由于docker-compose.yml文件的volumes指定的地址是 /opt/docker_mysql_tomcat,所以我们首先需要在opt目录下创建docker_mysql_tomcat目录,然后进入该目录创建docker-compose.yml文件,并粘贴以上写好的内容
[root@iz8vbdmrir2n6xqzrbd93hz ~]# cd /opt
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd carl
# 创建一个文件夹
[root@iz8vbdmrir2n6xqzrbd93hz opt]# mkdir docker_mysql_tomcat
[root@iz8vbdmrir2n6xqzrbd93hz opt]# ls
containerd docker_mysql_tomcat carl
[root@iz8vbdmrir2n6xqzrbd93hz opt]# cd docker_mysql_tomcat/
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# vim docker-compose.yml
# 将上面的内容粘贴进来
# 如果想要停止并删除之前的容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker stop 对应的CONTAINER ID
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker rm 对应的CONTAINER ID
# 如果想要停止并删除之前的所有容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker stop $(docker ps -qa)
0274ca45914b
f70074ae1455
2db5a3fe0a92
425b6e8e1806
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker rm $(docker ps -qa)
0274ca45914b
f70074ae1455
2db5a3fe0a92
425b6e8e1806
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 使用docker-compose命令
# docker-compose.yml启动管理的容器 由于需要docker-compose.yml,所以路径必选在docker-compose.yml所在的路径执行该命令
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 up -d
# 查看由docker-compose管理的容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 ps
Name Command State Ports
------------------------------------------------------------------------
mysql /entrypoint.sh mysqld --da ... Up 0.0.0.0:3306->3306/tcp
tomcat catalina.sh run Up 0.0.0.0:8080->8080/tcp
# 查看日志
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 logs -f
# 关闭并删除容器
[root@iz8vbdmrir2n6xqzrbd93hz docker_mysql_tomcat]# docker-compose-Linux-x86_64 down
Stopping tomcat ... done
Stopping mysql ... done
Removing tomcat ... done
Removing mysql ... done
Removing network docker_mysql_tomcat_default
# 开启|关闭|重启已经存在的由docker-compose维护的容器
docker-compose-Linux-x86_64 start|stop|restart