镜像和容器
当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
镜像仓库: 存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub。
这是用docker安装MySQL的命令
- docker run: 创建并运行一个容器,-d 是让容器在后台运行
- --name mysql:给容器起个名字,必须唯一
- -p 3306:3306:设置端口映射(冒号前是本机端口,后是容器端口)
- -e KEY=VALUE:是设置环境变量
- mysql:指定运行的镜像的名字
镜像命名规范
- 镜像名称一般分两部分组成:[repository]:[tag]。
- 其中repository就是镜像名
- taq是镜像的版本在没有指定tag时,默认是latest,代表最新版本的镜像
常见命令
Docker最常见的命令就是操作镜像、容器的命令,详见官方文档: https://docs.docker.com/
- docker pull nginx 拉取镜像(不指定版本默认为latest即最新版)
- docker images 查看本地镜像
- docker save [-o 镜像保存地址] nginx:latest 保存镜像到指定地址
- docker rmi nginx:latest 删除镜像
- docker load -i nginx.tar [-q] 读取镜像,-i后跟文件地址,-q 加上后不输出东西
- docker run -d --name nginx -p 80:80 nginx 创建并运行镜像容器(选项解释上边有)
- docker ps -a 查看镜像容器状态(默认为展示启动的容器,加上-a展示所有)
- docker stop nginx 停止容器
- docker stsrt nginx 启动容器
- docker logs [-f] nginx 查看容器日志(加上 -f 持续跟踪日志)
- docker exec -it nginx [bash] 进入容器内部,-it 提供一个终端,容器名称后要填进入容器后用什么命令交互,bash 指用命令行交互
- docker rm nginx [-f] 删除容器,加 -f 指强制删除,不加的话不能直接删除运行中容器
小 技 巧:设置命令别名
在 root/.bashrc 里面进行添加
执行下面命令使别名生效
source /root/.bashrc
数据卷挂载
容器内只支持一些基础的需要的命令,如果要对容器内文件进行操作是非常不方便的(如对nginx内文件进行修改,但nginx容器不支持编辑器命令),这时就要用到数据卷了。
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
创建数据卷并与容器内某个目录进行挂载后,会在本机 /var/lib/docker/volumes 下面创建对应目录
- 在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载
- 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
本地目录挂载
- 在执行docker run命令时,使用 -v 本地目录:容器内目录 可以完成本地目录挂载
- 本地目录必须以“/”或"./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录
- -v mysql:/var/lib/mysql 会被识别为一个数据卷叫mysql
- -v ./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录
网络
使用Linux部署spring boot项目的流程:
- 对spring boot项目进行打包并找到 jar 包
- 书写 Dockerfire 文件
- 把项目 jar 包和 Dockerfire 文件一起传入虚拟机里,然后执行 Dockerfire 文件生成镜像
- 为镜像创建容器(可以与其他需要的镜像加入网络,如项目和MySQL加入同一个网络下,使其能相互访问)
- 查看容器日志判断是否成功,之后就能跟踪项目进程了
Dockercompose
Docker Compose 通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
之前的部署方式太 low 了,也不方便,后端、MySQL、前端每个都要单独部署,还有网络也得创建、加入,实操时很容易漏掉东西,这时候就可以用到 Dockercompose 了。