1.Docker介绍
1.1引言
1.我本地运行没有问题啊。
环境不一致
2.那个哥们又写死循环了,这么这么卡。
在多用户操作系统下,会相互影响。
3.淘宝在双11的时候,用户爆增
运维成本过高的问题。
4.学习一门技术,学习安装成本过高
安装软件成本过高。
1.2 Docker的由来
一帮年轻人创业,创办了一家公司,2010年的专门做PAAS平台
到了2013年的时候,像亚马逊,微软,Goodle都开始做PAAS平台。
2013年,将公司内的核心技术对外开源,核心技术就是Docker。
到了2014年的时候,得到了C轮融资,$4000W.
到了2015年的时候,得到了C轮融资,$9500W.
全神惯注的维护Docker。
索罗门主要作者之一
Docker的作者已经离开了维护Docker的团队。
1.3Docker的思想
1.集装箱:
会将所有需要的内容放到不同的集装箱中,谁需要这环境就直接那到这个集装箱就可以了。
2.标准化
1. 运输的标准化:Docker又一个码头,所有上传的集装箱都放在了这个码头上,当谁需要某一个环境,
就直接指派大海豚去搬运这个集装箱就可以了
2. 命令的标准化: Docker提供了一些列的命令,帮助我们去获取集装箱等等操作
3. 提供了REST的API:衍生出了很多图形化界面,Rancher。
3.隔离性
Docker在运行集装箱内的内容时,会在Linux的内核中,单独开辟一片空间,这片空间不会影响到其他程序.
- 注册中心。(超级码头,上面放的就时集装箱)
- 镜像。(集装箱)
- 容器。(运行起来的镜像)
2Docker的基本操作
1.安装Docker
1.下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2
2. 设置一下下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装Docker
yum makacache fast
yum -y install docker-ce
4.启动,并设置开机自动启动,测试
启动Docker服务
# systemctl start docker
设置开机自动启动
# systemctl enable docker
测试
# docker rum hello-world
2.2Docker 的中央仓库
1. Docker官方的中央仓库时镜像最全的,但是下载最慢。
hub.docker点com
3. 国内的镜像网站:网易蜂巢,daoCloud ...
https://c.163yun.com/hub#/home
https://www.daocloud.io/ (推荐使用)
4. 在公司内部会采用私服的方式拉取镜像 (添加配置)
需要在/etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["ip:poert"]
}
重启两个服务
systemctl daemon-reload
systemctl restart docker
2.3镜像的操作
1.拉取镜像到本地
# docker pull 镜像名称[:tag]
举个例子
# docker pull daocloud.io/library/tomcat:8.5.20-jre8-alpine
2.查看全部本地的镜像
# docker images
3.删除本地镜像
# docker rmi 镜像的标识
4.镜像的导入导出(不规范)
将本地的镜像导出
# docker save -o 导出路径 镜像 id
加载本地的镜像文件
# docker load -i 镜像文件
修改镜像名称
dokcer tag 镜像id 新镜像名称:版本
2.4容器的操作
1.运行容器
简单操作
# docker run 镜像标识|镜像名称[:tag]
常用的参数
# docker run -d -p 宿主机端口: 容器端口: --name 容器名称 镜像的标识 | 镜像名称[:tag]
-d 代表后台运行容器
-p 宿主机端口: 容器端口: 为了映射当前Linux的端口和容器的端口
--name 容器名称: 指定容器的名称
2.查看正在运行的容器
# docker ps [-qa]
-a: 查看全部的容器,包括没有运行
-q: 只查看容器的标识
3.查看容器的日志
# docker logs -f 容器id
-f: 可以滚动查看日志的最后几行
4. 进入到容器内容
# docker exec -it 容器 id bash
5.删除容器 (删除容器前,需要先停止容器)
停止指定容器
# docker stop 容器id
停止全部容器
# docker stop $(docker ps -qa)
删除指定容器
# docker rm 容器id
删除全部容器
docker rm $(docker ps -qa)
6. 启动容器
docker start 容器id
3.Docker应用
3.1 准备SSM工程
MySQL数据库的连接用户名和密码改变了,修改db.properties
3.2准备MySQL容器
运行MySQL容器
# docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4
3.3准备Tomcat容器
运行Tomcat容器,前面已经搞定,只需要将SSM项目的war包部署到Tomcat容器内部即可
可以通过命令将宿主机的内容复制到容器内部
# docker cp 文件名称 容器id:容器内部路径
举个例子
# docker cp ssm.war 1f /usr/local/tomcat/webapps/
*一定要注意容器id是否正确
静态文件没有放行。
3.4 数据卷
为了部署SSM的工程,需要使用到cp的命令将宿主机的ssm.war文件复制到容器内部
数据卷:将宿主机的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内容映射的文件,也会跟着一起改变。
1.创建数据卷
docker volume create 数据卷名称
创建数据卷之后,默认会存放在一个目录下 /var/lib/docker/volume/数据卷名称/_data
2.查看数据卷的详细信息
docker volume inspect 数据卷名称
3.查看全部数据卷
docker volume ls
4.删除数据卷
docker volume rm 数据卷名称
5.应用数据卷
当你映射数据卷,如果数据卷不存在,Docker会帮你自动创建,会将容器自带的文件,存储在默认的存放路径中
docker run -v 数据卷名称:容器内部路径 镜像id
直接指定一个路径作为数据卷的存放位置。这个路径下是空的。
docker run -v 路径:容器内部的路径 镜像id
4.Docker自定义镜像
中央仓库上的镜像,也是Docker的用户自己上传过去的。
1.创建一个Dockerfile文件,并且指定自定义镜像信息。
Dockerfile文件常用的内容
from: 指定当前自定义镜像依赖的环境
copy:相对路径下的内容复制到自定义镜像中
workdir:声明镜像的默认工作目录
cmd:需要执行的命令(在workdir 下执行的,cmd可以写多的,只以最后一个为准)
举个例子,自定义一个tomcat镜像,并且将ssm.war部署到tomcat中
from daocloud.io/library/tomcat:8.5.14-jre8
copy ssm.war /usr/local/tomcat/webapps
2将准备好的Dockerfile和响应的文件拖拽到Linux操作系统中,通过Docker的命令制作镜像
docker build -t 镜像名称:[tag] .
6.Docker-Compose使用
6.1下载Docker-Compose
6.2Docker-Compose管理MySQL和Tomcat
在这里插入代码片
version: '3.1'
services:
mysql: # 服务器名称
restart: always # 代表只要docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:5.7.4 # 指定镜像路径
container_name: mysql # 指定容器名称
ports:
- 3306:3306 # 指定端口号的映射
environment:
MYSQL_ROOT_PASSWORD: root # 指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai # 指定时区
volumes:
- /opt/docker_mysql_tomcat/mysql_data:/var/lib/mysql # 映射数据卷
tomcat:
restart: always
image: daocloud.io/library/tomcat:8.5.15-jre8
container_name: tomcat
ports:
- 8080:8080
environment:
TZ: Asia/Shanghai
volumes:
- /opt/docker_mysql_tomcat/tomcat_webapps:/usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs:/usr/local/tomcat/logs
6.3使用docker-compose命令管理容器
在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件
查看日志
6.4 docker-compose配置Dockerfile使用
docker-compose.yml
version: '3.1'
services:
ssm:
restart: always
build: # 构建自定义镜像
context: ../ # 指定dockerfile文件的所在路径
dockerfile: Dockerfile # 指定Dockerfile文件名称
image: ssm:1.0.1
container_name: ssm
ports:
8081:8080
environment:
TZ: Asiz/Shanghai
Dockerfile文件
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
7.Docker CI,CD