一、Docker介绍
1.1引言
1.本地运行没有问题呀。
环境不一致问题
2.哪个哥们写死循环了,怎么这么卡。
在多用户的操作系统下,会相互影响
3.淘宝双十一的时候,用户量爆增
运维成本过高问题
4.学习一门技术,学习安装成本过高。
关于安装软件成本过高
5.观看教学的视频链接:[教学视频](https://www.bilibili.com/video/BV1sK4y1s7Cj?p=15&spm_id_from=pageDriver&vd_source=c292c13c56b3f59cc3377816767ac5f3)
1.2 Docker由来
一帮年轻人创业,创办了一家公司,2010年专门做paas平台。
到2013年的时候,像亚马逊,微软,谷歌都开始做paas平台。
2013年,将公司内的核心技术对外开源。核心技术就是docker
2014年,得到C轮的融资
到2015年,得到D轮的融资
全神贯注维护docker
1.3 Docker的思想
1.集装箱
会将所有需要的内容放到不同的集装箱中,谁需要这些环境就直接拿到这个集装箱就可以了。
2.标准化
1.运输的标准:docker有一个码头,所有的集装箱都放在这个码头上,当谁需要某一个环境,就直接大海取搬运集装箱就可以了
2.命令的标准:docker提高了一系列的命令,获取集装箱的操作
3.提供了restAPI:衍生了很多的图形化界面,Ranch
3.隔离性
docker在运行集装箱内的内容时,会在linux内耗中,单独开辟一个空间,这片空间不会影响到其他的服务
组成:
注册中心:超级码头,上面放着集装箱
镜像:集装箱
容器:运行起来的镜像
二、Docker的基本操作
2.1 安装Docker
1.下载Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-datalvm2
2.设置下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装Docker
yum makecache fast 这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
yum -y install docker-ce
2.2 启动、并设置为开机自动启动、测试
1.启动docker: systemctl start docker
2.设置开机自动启动:systemctl enable docker
3.测试是否成功:docker run hello-world
2.3 Docker的中央仓库
1.Docker的官方仓库:这个仓库镜像最全,但是下载速度慢 不推荐使用
https://hub.docker.com/
2.国内的仓库:网易蜂巢 推荐使用
https://c.163yun.com/hub#/home
3. 在公司内部则采用私服的方式拉取镜像 需要添加配置
1.找到etc/docker/daemon.json文件并修改
如果在/etc/docker下找不到daemon.json文件,可以自己新建,cd切换到/etc/docker目录下,使用touch命令创建)
{
"registry-mirrors": ["https://registry.docker-cn.com"]
"insecure-registries":["公司ip地址:ip地址的端口号"]
}
2.重启服务
systemctl daemon-reload
systemctl restart docker
2.4镜像操作
1.拉去镜像到本地(默认在中央仓库拉取)
docker pull 镜像名称[:tag]
2.到指定的仓库拉取
docker pull daocloud,io/Library/tomcat:8.5.15-jre8
3.查看全部镜像
docker image
4.删除本地镜像
docker rmi 镜像imageID
举类:docker rmi fc(imageID)
5.镜像的导入、导出
1.将本地 的镜像导出:
docker save -o 导出的路径 镜像id
2.加载本地的镜像文件
docker load -i 镜像名称
3.修改镜像名称:
docker tag 镜像id 镜像名称:镜像版本
2.5容器操作
1.运行容器:
docker run 镜像id 或者镜像名称
2.常用的参数:
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像ID或者镜像名称
-d:代表后台运行容器
-p: 宿主机端口:容器端口
--name:容器的名称
3.查看正在运行的容器
docker ps [qa]
-a:查看所有的容器信息
-p:只查看容器的id
-qa:查看所有的容器id
4.查看容器的日志
docker logs -f 容器id
-f: 代表可以滚动查看日志的最后几行
5.进入容器的内部
docker exec -it 容器id bash
6.停止容器运行
docker stop 停止单个容器id
docker stop $(docker ps -qa) 停止所有的容器
7.删除容器
docker rm 容器id 删除单个容器
docker rm $(docker ps -qa) 删除全部容器
8.启动容器
docker start 容器id
2.6Docker的应用
1.Mysql的容器
1.运行Mysql的容器
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4
2.Tomcat容器
1.运行Tomcat容器 前面已经搞定
2.可以通过命令将宿主机的内容复制到容器中
docker cp 文件名称 容器id:容器内部路径
三、数据卷
1.数据卷:将宿主机的一个目录映射到容器的一个目录中。可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。
2.创建数据卷
docker volume create 数据卷名称
默认存放在 /var/lib/docker/volume/数据卷名称/_data
3.查看数据卷的详细信息
docker volume inspect 数据卷名称
4.查看全部数据卷
docker volume ls
5.删除数据卷
docker volume rm 数据卷名称
6.应用数据卷
1.当你映射数据卷时,如果数据不存在,docker会帮你自动创建(将容器内部文件存储在默认的路径中)
docker run -v 数据卷名称:容器内部的路径 镜像id
2.直接指定一个路径作为数据卷的存放位置 (需要手动添加内容)
docker run -v 路径:容器内部的路径 镜像id
3.
四、自定义镜像
1.中央仓库上的镜像,也是Docker用户自己上传上去的
2.创建Dockerfile文件,并且指定自定义镜像信息
from:指定当前自定义镜像依赖的环境
copy:将相对路径下的内容复制到自定义镜像中
workdir:声明镜像的默认工作目录
cmd:需要执行的目录
举个例子:
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
3.将准备好的Dockerfile和相应的文件拖拽到Linux系统中,通过docker的命令制作镜像
docker build -t 镜像名称:版本号 .
五、Docker-Compose
1.说明
1.运行一个镜像,需要添加大量的参数
2.可以通过Docker-Compose编写这些参数
3.Docker-Compose可以批量管理我们的容器
4.只需要通过一个docker-compose.yml文件去维护即可
2.下载Docker-Compose
1.去github搜索下载Docker-Compose
2.将下载好的文件,放在Linux系统中
3.授权文件变成可执行的文件 chmod 777 文件名
4.方便后期操作,配置环境变量,编辑后需要重启环境变量
1.将Docker-compose文件移动到/usr/local/bin,然后修改profile文件,添加编辑变量
export PATH =
2.source /etc/profile
5.测试一下
在任意目录下输入docker-compose
3.Docker-Compose管理Mysql和tomcat容器
1.yml文件以key:value方式来指定配置信息
多个配置文件以 换行 +缩进来区分
配置:
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用户的登陆密码
TZ: Asia/shanghai #时区
volumes:
- /opt/docker_mysql/data: /var/lib/mysql #映射数据卷
tomcat:
restart: always #只有docker启动,容器则启动
image: daocloud.io/library/tomcat:8.5.15.jre8
container_name: tomcat
ports:
- 8080:8080
environment:
TZ: Asia/shanghai #时区
volumes:
- /opt/docker_mysql_tomcat/data: /usr/local/tomcat/webapps
- /opt/docker_mysql_tomcat/tomcat_logs: /usr/local/tomcat/logs
2.运行Docker-compose命令
1.在使用docker-compose命令时,会默认在当前目录下找docker-compose.yml文件
2.运行命令
docker-compose up -d
3.关闭并删除容器
docker-compose down
4.开启或者关闭或者重启已经存在的由docker-compose维护的容器
docker-compose start|stop|restart
5.查看由docker-compose管理的容器
docker-compose ps
6.查看日志
docker-compose log -f
3. Doctor——compose配置Dockerfile使用
1.使用docker-compose.yml文件以及dokcerfile文件在生成自定义镜像的同时启动当前镜像,并且由docker-compose去管理镜像
2.yml文件
version: "3.1"
services:
ssm:
restart: always
build: #构建自定义镜像
context: ../ 指定dockerfile文件的所在路径
dockerfile: Dockerfile #指定Dockerfile文件名称
image: ssm:1.0.0
container_name: ssm
ports:
- 8081:8080
environment:
TZ: Asia/Shanghai
3.Dockerfile文件
from daocloud.io/library/tomcat:8.5.15-jre8
copy ssm.war /usr/local/tomcat/webapps
4.可以直接启动基于docker-compose.yaml以及Dockerfile文件构建的自定义镜像
docker-compose up -d
如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义已经存在,会直接运行这个自定义镜像
重新构建自定义镜像
docker-compose build
运行前,重新构建
docker-compose up -d --build