目录
6.3.1 Docker概述
6.3.1.1 什么是Docker
6.3.1.2 Docker组成
6.3.2 Docker的安装
6.3.2.1 下载Docker依赖的环境
6.3.2.2 指定Docker镜像源
6.3.2.3 安装Docker
6.3.2.4 启动Docker并测试
6.3.3 Docker的中央仓库
6.3.4 Docker操作
6.3.4.1 镜像操作
6.3.4.2 容器操作
6.3.4.3 Docker的应用
6.3.4.3.1 Docker安装Tomcat
6.3.4.3.2 Docker安装MySQL
6.3.5 Docker-Compose
6.3.5.1 下载并安装Docker-Compose
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