一. 容器化技术介绍
1. 虚拟机
- 创建新的虚拟机,关联镜像(4.xG)使用,创建Linux操作系统...
- 镜像占用的空间非常大
- 给当前虚拟机分配计算机配置
- 磁盘空间
- 内存空间
- 网卡
- ...
- 在当前的虚拟机中,创建环境进行使用
- 安装Tomcat
- 依赖JDK环境
- 安装JDK
- 配置环境变量
- 安装Mysql
- 安装配置过于复杂
- 而且有的时候,不一定能够安装成功
- 而且卸载起来也比较麻烦
- 安装Redis
- 解压缩/编译/编译并安装...
- 安装Tomcat
2. Docker
- 容器化技术,通过镜像(只读文件组成),很多的镜像
- Mysql镜像
- Redis镜像
- Tomcat镜像
- 只需要根据镜像去创建容器,我们不需要关注安装过程,即可使用
- 占用的是最少的内存和磁盘空间
- 每个容器的环境是相互隔离的,安全
二、Docker官网
三、Docker仓库
四、Docker 安装&测试
1、如果有安装,请卸载旧版本 [如果没有安装,请跳过此步骤]
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装软件所需要的环境(软件包)
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3、设置镜像源地址
使用以下命令来设置稳定的仓库
使用官方源地址(比较慢)
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
可以选择国内的一些源地址:[阿里云或清华大学二选一即可]
阿里云
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清华大学源
yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
异常案例:
4、安装Docker引擎
推荐使用方式一!!!
方式一:默认安装最新版
yum install docker-ce docker-ce-cli containerd.io
方式二:指定版本
①列出并排序您存储库中可用的版本
yum list docker-ce --showduplicates | sort -r
②通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-20.10.9
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
5、启动 Docker
systemctl start docker
6、测试docker,通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。
docker run hello-world
其它:查看docker版本号:
docker version
五、卸载 docker,只做了解
删除安装包:
yum remove docker-ce
删除镜像、容器、配置文件等内容:
rm -rf /var/lib/docker
六、Docker命令
1. 镜像命令
1.1 查看所有本地镜像
docker images
1.2 搜索镜像
- 根据命令,搜索docker仓库中的镜像
docker search 关键字
1.3 下载镜像
# 默认下载的是最新版本的镜像
docker pull 镜像名称
# 指定下载的版本的镜像
docker pull 镜像名称:版本号
注:版本号通过docker仓库搜索
下载对应版本的hello-world,这里下载的是Linux版,命令:docker pull hello-world:linux
再次查看本地镜像,docker images
1.4 删除镜像
# 删除最新版本的本地镜像
docker rmi 镜像名称
# 删除指定镜像的版本
docker rmi 镜像名称:版本号
- 注意:删除镜像时,需要将其运行的容器,也一并删除掉,才可以删除镜像
2. 容器命令
2.1 查看正在运行的容器
docker ps
2.2 查看所有容器 [运行或停止]
docker ps -a
2.3 创建并运行容器
① 交互式运行容器:进入黑窗口
# 交互式运行容器,会进入容器内部,终端
# 进入容器内部,容器是指Linux操作系统
# 当退出容器时,执行exit,也会停止容器运行
# 语法 : docker run -it --name 容器名称 镜像名称:镜像版本
docker run -it --name myCentOS centos:centos7
② 守护式运行容器
# 守护式运行容器,不会进入容器内部,会停留在宿主机上(Linux虚拟机/Windows/MacOS)
# 不会进入容器内部,容器是指Linux操作系统
# 语法 : docker run -id --name 容器名称 镜像名称:镜像版本
docker run -id --name myCentOS7 centos:centos7
- 参数介绍
docker run
创建并运行容器-i
: 交互式操作-t
: 终端操作-d
: 守护式操作-it
: 相当于-i
-t
- 创建容器并进入容器内部,使用它的终端操作(命令行)
-id
: 相当于-i
-d
- 创建容器并运行容器,停留在宿主机上,不进入容器内部
--name
: 容器名称-p
: 指定宿主机和容器的端口映射- 具体参考tomcat案例
-P
: 宿主机随机端口映射容器端口- 具体参考tomcat案例
-v
: 宿主机和容器的目录映射关系建立- 具体参考mysql案例
2.4 启动容器
- 启动已经创建完成的容器
docker start 容器ID或者容器名称
2.5 停止容器
docker stop 容器ID或者容器名称
停止多个容器:
docker stop 容器ID或者容器名称 容器ID或者容器名称
2.6 重新启动容器(无论容器是否正在运行或已经停止了,都可以)
docker restart 容器ID或者容器名称
2.7 删除容器
- 删除容器之前,需要先停止容器运行
docker rm 容器ID或者容器名称
2.8 进入容器内部
- 当前停留在宿主机,想要进入容器的内部执行操作
- 进入的容器必须是运行的状态
# 语法 : docker exec -i -t 容器ID或容器名称 /bin/bash
# 语法 : docker exec -it 容器ID或容器名称 /bin/bash
# /bin/bash 代表进入容器内部执行终端操作
docker exec -i -t 容器ID或容器名称 /bin/bash
2.9 从容器中退出到宿主机
# 如果是交互式运行(进入容器),退出时,会自动关闭容器
# 如果是守护式运行(停留宿主机),退出时,不会关闭容器
exit
2.10 容器复制文件
-
将容器和宿主机之间进行文件传输和通信
-
将文件从宿主机复制到容器中
docker cp 文件路径或文件名称 容器ID:容器的路径
- 将文件从容器中复制到宿主机中
docker cp 容器ID:容器的路径 文件路径或文件名称
- 以 tomcat中的 tom猫的资源为例,进行操作
- 将tom猫的资源(事先准备的)从宿主机上复制到容器中
2.11 查看容器日志信息
docker logs 容器ID
2.12 查看容器配置信息
# 通过这个命令, 可以查看容器里面的详细的配置信息,IP地址,映射的目录等内容
docker inspect 容器ID
七. Docker的使用组件
1. Tomcat
- 拉取镜像
# 查找镜像
docker search tomcat
# 拉取镜像到本地,默认拉取最新的版本
# 拉取官方的tomcat,是没有tom猫的环境资源的
# 拉取的tomcat默认是自带jdk环境的(不需像直接装在虚拟机一样先安装配置jdk环境)
docker pull tomcat:8.5.82
先在docker-hub仓库找到想下载的版本
- 创建tomcat容器(注意:小写p和大写P有区别)
# 将宿主机的端口号和容器的端口号进行映射的关联
# 连接宿主机的指定的端口号就相当于连接tomcat服务器
# docker run -id -p 宿主机端口号:容器端口号 --name 容器名称 镜像名称:版本号
docker run -id -p 8888:8080 --name myTomcat tomcat:8.5.75
# 随机指定宿主机的端口映射到虚拟机的8080端口,随机映射了宿主机某个端口
docker run -id -P --name myTomcat1 tomcat:8.5.75
- 将ROOT目录复制到容器中目录中
/usr/local/tomcat/webapps
docker cp ROOT 容器ID:/usr/local/tomcat/webapps/
由于关联了宿主机和容器的端口映射,就可以在宿主机的浏览器中进行访问,查看tomcat猫的资源信息
删除tomcat容器后,重新修改了端口号,终于能够访问了
2. Redis
- 拉取镜像
# 搜索redis相关镜像
docker search redis
# 拉取最新的版本的redis镜像,默认latest
docker pull redis
- 创建并运行容器
# 关联宿主机和容器的端口号(6379)
docker run -id -p 6666:6379 --name dockerRedis redis:latest
# 二选一操作即可
# 宿主机随机端口关联容器默认端口
docker run -id -P --name dockerRedis redis:latest
注意:上面演示的是交互式运行容器
交互式运行容器(前台启动)
docker run -it -p 6366:6379 --name dockerRedis redis:latest
交互式运行容器(后台启动)
docker run -it -p 6366:6379 --name dockerRedis redis:latest &
守护式运行容器(不进入容器终端)
docker run -id -p 6366:6379 --name dockerRedis redis:latest
- 通过redis的客户端远程连接Redis容器
3. Mysql
- 拉取镜像
docker pull mysql:5.7.39
- 创建容器
# 创建并运行docker容器
# 按照之前的命令创建,会创建失败
# docker -id --name dockerMysql -p 3333:3306 mysql:5.7.39
# 通过查看日志信息,看到需要指定一个参数MYSQL_ROOT_PASSWORD,指定root用户的密码
docker -id --name dockerMysql -p 3333:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7.39
# 如果容器一旦创建,比如有端口没有关联或关联错误,那么就需要删掉这个容器重新创建
- mysql容器中的数据库存储路径位置
- 容器中 :
/var/lib/mysql
- 容器中 :
数据库存储路径探索过程:
①进入容器内部
②搜索默认库,找到数据库存放位置
- 创建容器,并关联数据库的目录映射,进行数据库的数据备份
- 以后再也不担心数据库异常导致数据可能丢失,或者数据只能存在docker容器中没有安全感
docker run -id --name dockerMysql -p 3333:3306 -e MYSQL_ROOT_PASSWORD=root -v 宿主机目录:/var/lib/mysql mysql:5.7.39
- 创建并关联了宿主机的数据目录,即使docker容器出现问题或异常,直接删掉容器,重新创建一个,指定到相同的宿主机目录,即可加载到之前的mysql的数据
退出容器,把容器删了,模仿出现故障
这时,我们保存在宿主机中的数据依然存在
我们只需重新创建一个mysql容器,关联到宿主机存放数据的路径即可
4. Nginx
-
拉取Nginx镜像
docker pull nginx
-
创建Nginx容器
docker run -id --name dockerNginx -p 8888:80 nginx:latest
-
/usr/sbin/nginx
nginx的启动命令,启动脚本 -
/etc/nginx/nginx.conf
启动时加载的配置文件-
在该配置文件的虚拟主机位置,引入了另一个配置文件的目录
-
/etc/nginx/conf.d/default.conf
-
主要的配置信息都在此处进行配置的
-
-
upstream tomcats {
server 172.17.0.3:8080;
server 172.17.0.4:8080;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://tomcats;
}
}
-
/usr/share/nginx/html
加载静态资源的目录