Docker
一、Docker的思想
集装箱:会将所有需要的内容放到不同的集装箱中,然后再放到一个公共的中央仓库中,谁需要这些环境就直接拿到这个集装箱就可以了
-
标准化:
<1> 运输的标准化:Docker有一个中央仓库,所有上传的集装箱都放在了这一个中央仓库里,当谁的需要某一个环 境,就直接指派运输员去搬运这个集装箱就可以了
<2> 命令的标准化:Docker提供了一系列的命令,帮助我们去获取集装箱等操作
<3> 提供了REST的API:衍生出了很多图形化界面,比如Rancher
隔离性:Docker在运行集装箱内的内容时,会在Linux的内核中单独开辟一片空间,这片空间不会影响到其他程序
注册中心(中央仓库)
镜像(集装箱)
容器(运行起来的镜像)
二、Docker的基本操作
2.1 安装Docker
Step1:下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-da ta 1vm2
Step2:设置下载Docker的镜像源
## 设置为阿里云的
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Step3:安装Docker
yum make cache fast
yum -y install docker-ce
Step4:启动Docker,并设置为开机自启动,测试是否启动成功
systemctl start docker # 启动
systemctl enable docker # 开机自启动
docker run hello-world # 测试
2.2 Docker的注册中心
- Docker官方的注册中心:镜像最全,但是下载速度慢
- 国内的镜像网站:网易蜂巢、阿里云、daocloud
2.3 镜像操作
- 镜像拉取到本地
docker pull 镜像路径 # 镜像路径从镜像网站copy
- 查看全部本地的镜像
docker images
- 删除本地镜像
docker rmi 镜像唯一标识 # 可以通过docker image查看IMAGE ID
- 镜像的导入导出
docker save -o 导出的路径 镜像id # 导出镜像文件
docker load -i 镜像文件 # 加载本地的镜像文件
docker tag 镜像id 新镜像名称:版本 # 加载本地的镜像默认没有名称和TAG, 需要手动修改
2.4 容器的操作
- 运行容器
docker run -d -p 宿主机端口:容器内端口 --name 容器名称 镜像id或镜像名称:TAG版本
# -d: 代表后台运行容器
# -p 宿主机端口:容器内端口: 为了映射当前Linux端口和容器内的端口, 外部访问时只需要访问 Linux ip:Linux端口
- 查看容器
docker ps [-qa]
# -q: 只查看容器的id
# -a: 查看全部容器, 不加-a就只查看正在运行的容器
- 查看容器日志
docker logs -f 容器id
# -f: 可以滚动查看容器日志的最后几行
- 停止容器
docker stop 容器id
docker stop $(docker ps -qa) # 停止全部容器
- 删除容器
## 注意: 删除容器之前需要先停止容器
docker rm 容器id
docker rm $(docker ps -qa) # 删除全部容器
- 进入容器内部
docker exet -it 容器id bash # bash不成功时可以用sh
三、使用Docker部署SSM项目
3.1 准备MySQL容器
docker pull 镜像路径 # 拉取mysql镜像
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root 镜像id # 运行mysql镜像
# MYSQL_ROOT_PASSWORD=root 是在指定mysql root用户的密码
3.2 准备Tomcat容器
docker pull 镜像路径 # 拉取tomcat镜像
docker run -d -p 8080:8080 --name tomcat 镜像id # 运行tomcat镜像
3.3 把SSM项目部署到Tomcat容器
docker cp ssm项目war包文件名 tomcat容器id:容器内的路径
3.4 数据卷
将宿主机的目录和容器内的一个目录进行映射,这样就可以在宿主机中操作文件,容器内部映射的文件也会跟着一起改变。(可以不用复制ssm.war到容器内了,直接复制到映射的目录即可)
数据卷的操作:
- 创建数据卷
docker volume create 数据卷名称
# 创建的数据卷默认存放在 /var/lib/docker/volumes/ 目录下
# 这个目录下的 数据卷名称/_data/ 目录内存放映射的内容
- 查看数据卷的详细信息
docker volume inspect 数据卷名称
3.查看全部数据卷
docker volume ls
- 删除数据卷
docker volume rm 数据卷名称
- 应用数据卷
## 运行容器, 并映射容器内的路径到数据卷
docker run -d -p 端口:端口 -v 数据卷名称:容器内部路径 镜像id
## 也可以在运行容器时直接指定一个路径作为数据卷与容器内部进行映射(常用)
docker run -d -p 端口:端口 -v 路径:容器内部的路径 镜像id
四、Dockerfile
以Docker自定义镜像的方式部署项目
Step1:准备一个空文件夹创建一个名为Dockerfile的文本文件(注意:没有后缀)
Dockerfile文件中常用的内容:
- from:指定当前自定义镜像的下载路径
- copy:在容器运行后将某文件复制到容器内的路径
- workdir:声明镜像的默认工作目录(不写就默认Dockerfile所在的目录)
- cmd:需要执行的命令(不写也会默认开启Tomcat)
Dockerfile文件例:
from daocloud.io/library/tomcat:8.5.15-jre8
# copy的第一个参数不写全路径是因为已经把ssm.war复制到准备要创建Dockerfile文件的文件夹中
# 第二个参数是运行后容器内部的路径
copy ssm.war /usr/local/tomcat/webapps
Step2:将Dockerfile文件所在的目录制作成自定义镜像
docker build -t 自定义一个镜像名称:版本 .
# . 表示当前目录
docker images # 查看自定义的镜像id
Step3:运行自定义镜像
docker run -d -p 端口:端口 镜像id
五、Docker-compose
可以通过docker-compose.yml文件编写运行容器所需的参数,一个docker-compose.yml文件可以指定运行多个容器,也可以同时管理多个容器,达到批量管理容器的目的
5.1下载Docker-compose
Step1:在github中下载,并放到Linux中
Step2:把Docker-compose文件的权限修改为可执行
Step3:把Docker-compose文件所在的路径添加到环境变量
5.2 使用Docker-compose管理容器
docker-compose.yml文件编写示例:
version: '3.1'
service:
# 这里是服务的名称
mysql:
# 表示只要docker启动, 这个容器就跟着一起启动
restart: always
# 指定这个容器所用的镜像路径
image: daocloud.io/library/mysql:5.7
# 指定容器的名称
# 即可以通过docker ps查看到的容器名
container_name: mysql
# 映射宿主机端口和容器内部端口
ports:
- 3306:3306
enviroment:
# 指定MySQL root用户的登录密码
MYSQL_ROOT_PASSWORD: root
# 指定时区
TimeZone: Asia/Shanghai
# 做数据卷映射
volumes:
- /mydata/mysql:/var/lib/mysql
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name: tomcat
ports:
- 8080:8080
volumes:
- /mydata/tomcat/webapps:/var/lib/tomcat/webapps
5.3 使用docker-compose命令管理容器
注意:在使用docker-compose命令时会默认在当前目录下找docker-compose.yml文件
docker-compose up -d # 启动当前docker-compose.yml文件管理的全部容器
docker-compose down # 关闭并删除容器
docker-compose stop # 关闭单不删除容器
docker-compose ps # 查看当前docker-compose.yml文件管理的全部容器
docker-compse -f # 查看日志
5.4 docker-compose配合Dockerfile使用
使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动该自定义镜像,并且交由docker-compose管理自定义镜像的生成的容器
Step1:编写Dockerfile文件:
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
Step2:编写docker-compose.yml文件:
version: '3.1'
service:
ssm:
restart: always
# 构建自定义镜像
build:
# 指定Dockerfile文件所在的路径
context: /mydata/ssm
# 指定Dockerfile文件名称
dockerfile: Dockerfile
# 指定自定义镜像名称和版本
image: ssm:1.0
container_name: ssm
ports:
- 8081:8080
enviroment:
TimeZone: Asia/Shanghai
Step3:使用docker-compose运行容器,如果自定义镜像不存在则会自动构建自定义镜像并运行,如果自定义镜像存在则直接可以运行
docker-compose up -d