- Docker概述
1.什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。然后发布到任何流行的Linux和Windows操作系统的机器上。也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker可以让开发者打包自己的应用成一个镜像,发布到服务器上,或者发布到开源社区,实现网络上的资源共享。镜像发布到服务器后,以容器的方式运行,也是虚拟化的一个特性,容器之间是充分隔离的,采用沙盒机制,互相之间不会有影响,而且Docker是可移植的,跨平台的。
镜像(Mirroring)是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。可以把许多文件做成一个镜像文件,与GHOST等程序放在一个盘里用GHOST等软件打开后,又恢复成许多文件,常见的镜像文件格式有ISO、BIN、IMG、TAO、DAO、CIF、FCD。
2.什么是沙盒
沙盒(英语:sandbox,又译为沙箱),计算机专业术语,在计算机安全领域中是一种安全机制,为运行中的程序提供隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。
3.Docker容器和虚拟机的区别
相同点:docker容器和虚拟机都采用了虚拟的技术。
不同点:Docker相对于虚拟机而言,少了虚拟机操作系统层,少了一层就少了很多的资源浪费,所以Docker的效率更高。
4.Docker架构
Docker分三大部分:客户端,docker主机 和 镜像仓库。
- 客户端是 人和docker 对话用的,就是执行docker命令,在命令行执行。
- Docker主机是本地处理docker相关操作的,运行在操作系统上的,我们不能直接观察和操作,需要通过客户端。
3.镜像仓库是事先准备好的镜像池,提供了丰富的镜像,供每个docker使用。
客户端和docker主机都是安装在我们的操作系统上,镜像仓库是在公网上或者是我们自己的私有库。
两个关键词:
镜像:images,可以理解成一个系统的镜像文件,例如发给大家的centOS镜像。
容器:containers, 容器是镜像在运行时的一个状态。
镜像images相当于硬盘上的文件,容器containers相当于运行硬盘上的文件,包括其内存状态。
5.核心概念
核心有三个,用来连接主机的clients客户端,安装了docker的主机Hosts,和保存了镜像文件的registries镜像仓库
6.docker的特性及优点
特点:
隔离、文件隔离、系统隔离、资源隔离、网络隔离、日志隔离等。每个容器都完全独立运行在一个沙盒中,所有的数据、资源都是隔离的。比如cpu、内存等等。网络上会为每个容器虚拟一个ip地址。Docker为每个容器都提供自己的日志,互不影响。
优点:
虚拟化机制比虚拟机更优秀一些;更节省资源,可以跨平台,不需要担心操作系统的影响。另外docker的应用也很广泛,各大公司都有应用。
缺点:
Docker对程序是友好的,但是不善于处理文件和数据,一般情况会将文件或数据以路径映射方式挂载到容器外。
2.部署docker环境
Docker安装步骤官网手册:Install Docker Engine on CentOS | Docker Documentation
1.查看一下Linux 内核版本
因为:docker支持Linux 3.10及以上版本,所以一定要先看一下内核版本
用命令:unmae -r
2.卸载老版本docker,避免产生影响
【官网信息:】 $ sudo 不是命令,不需要敲写进去。
【命令窗口输入:】
3.升级yum 和 配置源
【官网信息:】
【命令窗口输入:】
【命令一:升级yum】
【命令二:配置源】
4.在虚拟机中安装docker【不用操作】
- 查看历史版本的docker
【官网信息:】
【命令窗口输入:】
- 安装指定版本的docker
我们统一安装:20.10.8版本
【官网信息:】
把<VERSION_STRING>替换成版本号即可
yum install --setopt=obsoletes=0 docker-ce-20.10.8-3.el7 docker-ce-selinux-20.10.8-3.el7.noarch
===注意:20.10.8-3.el7 是小写字母L,不是数字1.
【命令窗口输入:】
7.安装成功
8.启动服务验证一下
1. 首先,查看一下docker版本,有信息代表安装成功!
使用命令:docker --version
Docker安装成功后,需要启动docker服务才可以用。
- 启动docker服务
命令:
docker images :查看docker镜像
systemctl start docker :启动docker服务
systemctl stop docker :停止docker服务
systemctl enable docker :开机自启docker服务
3.docker的常用操作
1.查看本地【镜像】docker images
使用命令:docker images 查看docker镜像
REPOSITORY :镜像的名字
TAG:镜像的标签
IMAGE ID:镜像的唯一标识
CREATED:创建镜像的时间
SIZE:镜像的大小
2.查找指定【镜像】docker search
【方式一:推荐】到官网去查:https://hub.docker.com/
选这种有认证的镜像:
【方式二:】用命令查
使用命令:docker search 镜像名字
例如:docker search tomcat
3.拉取【镜像】docker pull
使用命令:docker pull 镜像名称
例如:docker pull tomcat
下载后再查看一下本地镜像:docker images
TAG代表镜像标签,Latest是最新的一个镜像。
拉取镜像命令2:docker pull 镜像名称:标签名
-----一般标签名中会包含版本号。
-----我们统一用tomcat8版本。
使用命令:docker pull tomcat:8
【先拉取:】
【再查看:】
4.移除【镜像】docker rmi
使用命令:docker rmi 镜像id
===命令虽然也支持根据镜像名称移除,但是按照镜像名称移除容易出错,所以一般都是按照 镜像唯一标识 进行移除。
【注意】 docker操作镜像时,如果用的是名字,那么会默认为该名字加上标签,对应的标签是latest。
5.查看【容器】docker ps
使用命令:docker ps 查看正在运行的容器
使用命令:docker ps -a 查看所有容器,包括运行的 和 停止的
CONTAINER ID:容器唯一标识
IMAGE:对应的镜像名字
COMMAND:执行的命令
CREATED:创建时间
STATUS:容器的状态
PORTS:容器的端口号,是自定义的
NAMES:容器的名字,是自定义的
6.移除【容器container】docker rm
使用命令:docker rm 容器的名字 或 唯一标识
======当用“唯一标识”移除的时候,可以只输入前几个符号,docker会自动匹配(同时完成移除功能)。要注意是否有类似的,建议复制容器完整的唯一标识值。
7.?启动【容器】docker start?
docker run hello-word ----运行镜像。
docker start 容器id/名字 ----启动容器
8.停止【容器】docker stop
docker stop 容器id/名字 ----停止容器
docker restart 容器id/名字 ----重启容器
9.启动【tomcat镜像】docker run
使用命令:docker run --name tc -p 8080:8080 tomcat:8 或镜像id
例如:docker run --name tc -p 8080:8080 73365378bc27
---不能进行命令操作,因为被启动文件占据着,使用ctrl+c打断。
例如:docker run --name tc1 -p 8080:8080 -d 73365378bc27
---可以继续命令操作,启动文件再后台运行。
【但是此时 出现404 错误!】
-name :给容器取一个名字
注意:容器的名字是唯一,无论容器的状态是什么,名称都不允许重复。
-p:端口映射,将容器的端口映射到服务器上,冒号前的端口是服务器的端口号,后面的是容器的端口号。例如:-p 8081:8080,将容器的8080端口映射到服务器的8081端口,访问时访问8081端口就相当于访问容器的8080端口。
-d:后台运行。像tomcat这种持续运行的程序,需要用后台运行的方式,这样不影响终端做其他操作。
10.进入【容器】docker exec
使用命令:docker exec -it 容器的名字或id /bin/bash
选项,参数介绍:
-it :进入到容器中,是-i -t的缩写;
-i:以交互模式运行虚拟机
-t:为容器分配一个伪终端
/bin/bash:是命令需要的路径参数
【容器内部仍然可以用linux命令】
11.tomcat启动后404问题 cp -r
外部访问tomcat时会出现404错误,是因为webapps目录文件下没有任何文件。
Tomcat自带的页面都在webapps.dist目录下,复制过来即可。
只复制ROOT目录文件就可以了。
使用复制命令:cp -r 路径1 路径2
例如:cp -r webapps.dist/ROOT webapps
-r 循环递归执行复制操作
webapps.dist/ROOT 把该路径下的文件进行复制
Webapps 把复制的文件粘贴到该路径下。
12.退出【容器】& 输出容器日志
从容器里退出来;
- 执行exit
- Ctrl+d 可以从容器中退出,来到Linux服务器里。
输出容器日志:
使用命令:docker logs 容器名称或id -f 输出容器日志,
-f代表持续输出,会保持日志输出的状态,一直打印日志
Ctrl+C退出。
13.mysql数据库安装和配置
0.复习操作_移除mysql8镜像
先移除依赖的容器:docker rm d7ddc397e4c1
再移除mysql8镜像:
1.拉取mysql镜像docker pull
统一下载8版本mysql
使用命令:docker pull mysql:8
2.启动mysql镜像 docker run
使用命令:docker run --name mm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8
-e:配置信息,配置root的密码。
先启动镜像:
再查看容器。
---因为启动后的镜像就是容器了。
【验证是否成功】错误码:2059 其实没问题,不影响docker中mysql的使用。
3.启动同时创建目录映射_【执行步骤3,不执行步骤2】
【注意】提前创建目录musql/logs、conf、data
使用命令:
docker run --name mmy1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql mysql:8
-v:目录映射 ,同-p格式。目录文件(一层目录可以,多层不可以)必须手动创建才能映射。
为啥需要 docker ps -a 才能看见呢?
14.创建docker镜像
1.创建dockerfile文件
创建一个文件名为Dockerfile的文件,这个文件是没有后缀名的
FROM openjdk:8
ADD t-springboot-1.0-SNAPSHOT-exec.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc
/timezone
2.上传spingboot打包文件
上传我们准备好的springboot打好的包,在把Dockerfile上传到相同的目录下,注意,目录里不要有其它的文件。
3.自定义【镜像】docker build
【先:进入Dockerfile所在的目录中。】
再执行命令:docker build -t 镜像名字(自己取的,不能有大写字母):标签(可以省略,省略代表的是latest) 目录(用.,代表当前目录)
例如:docker build -t testspringboot .
-t:是给镜像添加一个标签
【问题:添加镜像失败!】
【解决:修改Dockerfile中镜像名字,==同名于上传的jar名字】
4.启动【自定义镜像】docker run
【先】使用命令:docker run --name tsb -p 8898:8898 -d testspringboot
第一个8898:是要访问的端口
第二个8898:是项目的端口
例如:docker run --name tsb -p 8898:8080 -d testspringboot
【再】访问测试,测试地址:http://172.19.186.149:8898/test
例如:http://192.168.43.65:8898/test