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
8sudo 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] |