我们写的代码会接触到好几个环境:开发环境、测试环境以及生产环境等等。多种环境去部署同一份代码,由于环境原因往往会出现软件跨环境迁移的问题(也就是“水土”不服)‘
也就是说如果在不同环境下跑相同代码,但JDK或TomCat等不一致,那么就可能出现报错等问题。
针对这种情况 ,我们可以将工程及此工程依赖的所有软件打包到一个容器中统一部署
Docker 是一个开源的应用容器引擎
Docker 可以让开发者打包他们的应用以及依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)
容器是完全使用沙箱机制,相互隔离
就是相当于linux系统中起好多容器,每个容器都是相互隔离的
容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
docker是一种容器技术,解决软件跨环境迁移问题。
Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,
官网:Docker: Accelerated, Containerized Application Development
- # 1、yum 在线安装
- yum install docker -y
- #2、启动docker
- systemctl start docker 启动
- systemctl stop docker 停止
- systemctl restart docker 重启
- #3、查看docker状态
- systemctl status docker
虚拟机要联网下载
镜像:一个独立软件的各种组成文件
容器:执行镜像会产生容器,一个镜像可以生成多个容器
仓库:镜像的来源 docker提供的应用商店
镜像加速: 从docker hub上下载docker镜像太慢,一般都会配置镜像加速
1.配置镜像加速:
默认从 Docker Hub 下载 这里配置中科大镜像 https://docker.mirrors.ustc.edu.cn
在linux中打开:/etc/docker/daemon.json文件,并导入镜像地址
直接 vi /etc/docker/daemon.json
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
- #重启
- systemctl restart docker
- #查看docker信息
- docker info
-
- #启动docker服务:
- systemctl start docker
- #停止docker服务:
- systemctl stop docker
- #重启docker服务:
- systemctl restart docker
- #查看docker服务状态:
- systemctl status docker
- #设置开机启动docker服务:
- systemctl enable docker
- #1 查看镜像: 查看本地所有的镜像
- docker images
-
- #2 搜索镜像:从网络中查找需要的镜像
- docker search 镜像名称
-
- #3 拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号
- 如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
- 地址:https://hub.docker.com/
- docker pull 镜像名称:版本号 / docker pull 镜像名称(默认的版本号是latest)
- docker pull mysql:5.7 / docker pull mysql
-
- #4 删除镜像: 删除本地镜像
- docker rmi 镜像id # 删除指定本地镜像
以上内容是操作docker的流程
- #查看容器
- docker ps # 查看正在运行的容器
- docker ps -a #查看所有容器,包括未运行的容器
-
- #创建并启动容器
- docker run -id --name=自定义容器名称 -p 映射端口:镜像端口 镜像名称
- run:启动
- -id/-di: 创建容器
- --name: 为创建的容器起别名
- -p: 端口映射
-
- #停止容器
- docker stop 容器名称
- #删除容器(容器是停止状态才能删除)
- docker rm 容器名称
-
- #启动容器
- docker start 容器名称
1.什么是数据卷?
数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以挂载多个数据卷。
数据卷的作用:容器数据持久化、容器之间数据交换
2.配置数据卷: 创建启动容器时,使用 –v 参数 设置数据卷
- #先在root目录先创建一个文件夹 ,因为要做数据卷映射
- cd ~
- mkdir data
- #启动容器,挂载数据卷
- docker run -di --name=自定义容器名称 -p 33307:3306 -v /root/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-
- #最终 -加权限
- docker run -id --name=mymysql888 --privileged=true -p 33308:3306 -v /root/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
注意:
1.目录必须是决定路径
2.如果目录不存在,会自动创建
3.可以挂载多个数据卷
查看mysql的日志会发现有权限不足的问题:docker logs my_mysql
--privileged :容器内的root拥有真正的root权限.否则,容器内的root只是外部的一个普通用户权限
docker run -id --name=mymysql888 --privileged=true -p 33308:3306 -v /root/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
服务编排:批量管理所有容器进行统一启动/统一停止且统一删除
微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。
要从Dockerfile build image 或者去dockerhub拉取image
要创建多个container
要管理这些container(启动停止删除)
服务编排:按照一定的业务规则批量管理容器
Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。使用步骤:
利用 Dockerfile 定义运行环境镜像
使用 docker-compose.yml 定义组成应用的各服务
运行 docker-compose up 启动应用
- # Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。(以安装)
- curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- # 查看版本信息
- docker-compose -version
- # 设置文件可执行权限
- chmod +x /usr/local/bin/docker-compose
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
案例:
通过docker compose进行容器批量管理:一次性启动三个容器(nginx,tomcat,redis)
步骤:
(1) 定义一个Docker Compose配置文件
docker-compose.yml
定义需要的容器
每个容器的配置
(2) 进入docker-compose.yml所在的目执行docker-compose up -d 命令批量执行
操作:
创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
定义docker-compose.yml 文件 vi docker-compose.yml 内容如下
- version: '3'
- services:
- nginx:
- container_name: my_nginx
- image: nginx
- ports:
- - 80:80
-
- tomcat:
- container_name: my_tomcat
- image: tomcat:8.5
- ports:
- - 8080:8080
-
- redis:
- container_name: my_redis
- image: redis
- ports:
- - 6379:6379
启动容器
执行此命令的时候,需要和配置文件再同一个目录下
docker-compose up -d
关闭容器并且删除
docker-compose down