docker
Docker
快速构建、运行、管理应用的工具
环境安装
Linux环境安装
- 利用VMWare搭建CentOS7虚拟机
- 修改网络配置,使用固定IP地址
- 利用VMWare镜像和克隆,创建多个虚拟机
- windows系统使用- xshell工具进行远程连接虚拟机
- windows系统使用- WinScp工具与虚拟机进行文件传输
虚拟机搭建和网络配置修改参考之前所写的博客:Linux安装与网络配置
安装docker
虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行 环境,容器之间互相隔离

卸载系统旧版本的docker
| 1 | sudo yum remove docker \ | 
设置仓库
Before you install Docker Engine for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.
| 1 | sudo yum install -y yum-utils | 
安装docker
| 1 | sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | 
启动docker
| 1 | sudo systemctl start docker | 
验证docker是否安装成功
| 1 | sudo docker run hello-world | 
设置docker开机自启动
| 1 | sudo systemctl enable docker | 
配置docker镜像加速
阿里云,容器镜像加速服务
- 登录阿里云,进入控制台  
- 进入产品与服务列表  
- 选择容器镜像服务  
- 选择镜像加速器  
- 选择 - centos,可以查看对应的加速配置命令 
- 配置命令 - 修改daemon配置文件/etc/docker/daemon.json来使用加速器 - 1 
 2
 3
 4
 5
 6
 7
 8- sudo mkdir -p /etc/docker 
 sudo tee /etc/docker/daemon.json <<-'EOF'
 {
 "registry-mirrors": ["https://bfswxim9.mirror.aliyuncs.com"]
 }
 EOF
 sudo systemctl daemon-reload
 sudo systemctl restart docker
docker安装mysql
安装mysql 5.7
下载mysql镜像
sudo docker pull mysql:版本号
比如下载mysql 5.7版本
sudo docker pull mysql:5.7
查看docker内部所有镜像
sudo docker images

创建实例并启动
| 1 | docker run -p 3306:3306 --name mysql \ | 
镜像命名规范
- 镜像名称一般分两部分组成:[repository]:[tag] - 其中repository就是镜像名
- tag是镜像的版本
 
- 在没有指定tag时,默认是latest,代表最新版本的镜像 

docker ps查看运行的容器实例信息

补充:docker容器文件挂载与端口映射

- docker run会启动一个对应的容器,每个容器都是一个完整的运行环境(对应一个完整的Linux环境)
- docker exec -it 容器名 对应文件或者命令:进入对应容器,与对应容器进行交互
如下图所示:mysql:5.7 的 /bin/bash下的目录结构可以看出其相当于是一个完整的Linux环境

- exit可以直接退出对应容器
- 文件挂载- 类似与快捷方式,讲Linux系统中的文件与容器中的文件关联起来,这样可以直接在Linux系统上可以看到mysql的配置文件、数据文件和日志文件
 
 
- 类似与快捷方式,讲
修改mysql配置文件
vi /mydata/mysql/conf/my.cnf
写入如下内容
| 1 | [client] | 
写入之后保存,重启mysql容器
docker restart 容器名:重启对应容器
连接mysql
方法一:通过容器命令行连接
docker exec -it mysql mysql -uroot -proot

方法二:远程访问
如果失败,需要先设置远程用户访问权限
| 1 | grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; | 
windows远程访问
mysql -h ip地址 -P 端口号 -u 用户名 -p 密码

方法三:利用可视化工具Navicat连接测试


docker安装redis
安装redis 6.2.13
新版本redis默认自动持久化
下载redis镜像
docker pull redis:6.2.13
创建实例并启动
| 1 | mkdir -p /mydata/redis/conf | 
连接redis
方式一:通过容器命令行连接
docker exec -it redis redis-cli

方式二:通过其他主机远程访问
redis-cli -h ip地址

补充—Redis Desktop Manager(Redis可视化工具安装)
连接示例
 可以查看数据据库内容
可以查看数据据库内容

Docker快速入门
容器和镜像
当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub。

Docker基础
常见命令
Docker最常见的命令就是操作镜像、容器的命令,详见官方文档
Docker常见命令概览

Doker常见命令列表
| 命令 | 说明 | 文档地址 | 
|---|---|---|
| docker pull | 拉取镜像 | docker pull | 
| docker push | 推送镜像到DockerRegistry | docker push | 
| docker images | 查看本地镜像 | docker images | 
| docker rmi | 删除本地镜像 | docker rmi | 
| docker run | 创建并运行容器(不能重复创建) | docker run | 
| docker stop | 停止指定容器 | docker stop | 
| docker start | 启动指定容器 | docker start | 
| docker restart | 重新启动容器 | docker restart | 
| docker rm | 删除指定容器 | docker rm | 
| docker ps | 查看容器 | docker ps | 
| docker logs | 查看容器运行日志 | docker logs | 
| docker exec | 进入容器 | docker exec | 
| docker save | 保存镜像到本地压缩文件 | docker save | 
| docker load | 加载本地压缩文件到镜像 | docker load | 
| docker inspect | 查看容器详细信息 | docker inspect | 
命令别名
可以给常用的Docker命令起别名,便于我们访问
| 1 | 修改/root/.bashrc文件 | 
然后,执行命令使别名生效
| 1 | source /root/.bashrc | 
数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
一定程度上类似于快捷方式,将容器内的文件挂载在宿主机上,这样可以通过对宿主机上对应文件修改达到改变容器内文件的目的

数据卷的相关命令
这些命令一般不会使用,容器文件挂载操作一般在容器创建时就已经完成
| 命令 | 说明 | 文档地址 | 
|---|---|---|
| docker volume create | 创建数据卷 | docker volume create | 
| docker volume ls | 查看所有数据卷 | docker volume ls | 
| docker volume rm | 删除指定数据卷 | docker volume rm | 
| docker volume inspect | 查看某个数据卷的详情 | docker volume inspect | 
| docker volume prune | 清除数据卷 | docker volume prune | 

实例:利用Nginx容器部署静态资源
需求:
- 创建Nginx容器,修改nginx容器内的html目录下的index.html文件内容 
- 将静态资源部署到nginx的html目录 
操作
- 在执行docker run命令时,使用 - -v 数据卷:容器内目录可以完成数据卷挂载
- 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷 
创建容器并挂载
docker run -d --name nginx -v html:/usr/share/nginx/html -p 80:80 nginx

查看数据卷及其位置
| 1 | docker volume ls #查看所有数据卷 | 


修改html目录下文件,即可实现nginx静态部署
直接访问ip地址/即可访问静态资源
查看某个容器是否被挂载,以及挂载的数据卷信息
docker inspect 容器名

实例:本地目录的挂载
- 在执行docker run命令时,使用 -v 本地目录 : 容器内目录 可以完成本地目录挂载
- 本地目录必须以“/”或 “./“ 开头,如果直接以名称开头,会被识别为数据卷而非本地目录- -v mysql : /var/lib/mysql会被识别为一个数据卷叫mysql
- -v ./mysql : /var/lib/mysql会被识别为当前目录下的mysql目录
 
自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。


DockerFile
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像
DockerFile常用指令
| 指令 | 说明 | 示例 | 
|---|---|---|
| FROM | 指定基础镜像 | FROM centos:6 | 
| ENV | 设置环境变量,可在后面指令使用 | ENV key value | 
| COPY | 拷贝本地文件到镜像的指定目录 | COPY ./xx.jar /tmp/app.jar | 
| RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN yum install gcc | 
| EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 | 
| ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar | 
详细信息,可以参考官方文档
制作Jar包的运行镜像
我们可以基于Ubuntu基础镜像,利用Dockerfile描述镜像结构,也可以直接基于JDK为基础镜像,省略前面的步骤

当编写好了Dockerfile,可以利用下面命令来构建镜像
docker build -t myImage:1.0 .
- -t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
- .:是指定Dockerfile所在目录,如果就在当前目录,则指定为”.”
构建自定义镜像


启动并运行镜像

查看容器运行日志

浏览器访问ip地址:8080
网络
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上

虽然各个容器之间网络联通,可以相互通信, 但是容器一旦重启,网络地址是动态分配的
所以需要自定义网络才可以通过容器名互相访问
Docker常见的网络操作命令如下
| 命令 | 说明 | 文档地址 | 
|---|---|---|
| docker network create | 创建一个网络 | docker network create | 
| docker network ls | 查看所有网络 | docker network ls | 
| docker network rm | 删除指定网络 | docker network rm | 
| docker network prune | 清除未使用的网络 | docker network prune | 
| docker network connect | 使指定容器连接加入某网络 | docker network connect | 
| docker network disconnect | 使指定容器连接离开某网络 | docker network disconnect | 
| docker network inspect | 查看网络详细信息 | docker network inspect | 
更多详细信息,查看官方文档
run 命令中可以通过--network 网络名让创建的容器加入对应的网络
项目部署
部署Java后端应用
编写对应的Dockerfile文件
| 1 | # 基础镜像 | 
项目打包
maven package


上传服务器

构建镜像

创建并启动容器

查看容器日志
docker logs -f 容器名:持续更新显示容器日志

访问项目
192.168.80.130:8080/search/list

注意网络的配置
- 自己创建一个网络
- 将mysql容器加入该网络
- 创建启动后端项目时,将后端项目加入mysql同一网络
部署前端
前端项目上传服务器


容器的创建和启动
- nginx配置文件的挂载
- nginx静态资源文件的挂载
- nginx端口的映射
文件挂载参考docker hub官方文档
创建启动命令
| 1 | docker run -d --name nginx \ | 

访问项目
192.168.80.130:18080和192.168.80.130:18081
注意点
前端、后端和mysql所在容器必须要处于同一网络中,才能进行通信
DockerCompose
Docker Compose通过一个单独的docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。


docker compose命令格式
| 1 | docker compose [OPTIONS] [COMMAND] | 






