Docker
1. 简介
2. 核心概念
3. 安装Docker
4. Docker常用命令&操作
1. 简介

Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。
Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何
流行的Linux机器上,也可以实现虚拟化。
容器是完全使用莎箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker支持将软件编译成一个镜像,然后在镜像中做好软件的各种配置,将镜像发布出去,其他使
用者可以直接使用这个镜像。
运行中的这个镜像称为容器,容器启动是非常快的。类似windows里面的ghost操作系统,安装好
后什么都有了。

2. 核心概念
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作的软件;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker镜像(Images):软件打包好的文件;放在docker仓库中;
Docker 镜像是用于创建Docker 容器的模板。
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

3. 安装虚拟机和docker
VMware虚拟机太重量级了,我们这次用VirtualBox
1. 导入虚拟机文件

2. 双击打开

3. 更改网络设置

4. 登录
5. 设置虚拟机网络:和主机在同一网段
桥接网路-->选好网卡-->接入网线--->重启虚拟机service network restart



6. 查看ip地址:保证在同一网段即可。

```
虚拟机ip地址:192.168.137.24
本机虚拟地址:192.168.92.1
```
4. 安装Docker


启动docker和查看版本,将docker服务设为开启启动
[root@localhost docker]# systemctl start docker
[root@localhost docker]# docker -v
[root@localhost docker]# systemctl enable docker
停止docker
[root@localhost docker]# systemctl stop docker
4 docker的常用操作
1. docker search mysql
搜索docker镜像
2. docker pull mysql
下载镜像
3. 下载很慢 配置一下Aliyun镜像加速。

4. 容器操作
软件镜像(QQ.exe)---运行镜像---产生一个容器(正在运行的软件,运行的QQ)
1. 搜索镜像
docker search tomcat
2. 拉取镜像:标签默认最新版
docker pull tomcat
3. 根据镜像启动容器。
docker run --name mytomcat -d tomcat:latest
出现一串字码时,说明运行成功了。
bf06fdd451d3006794ba22e8233c325ea7ecea82888f706986ecb1b236880149
4. 看看运行中的容器
docker ps

5. 删除运行中的Docker容器
docker rm b2cfd6b8fce5
下载的镜像还没删,相当于关掉了一个容器程序。
5. 尝试访问一下tomcat主页
http://192.168.92.130:8080/
访问不到。
6. 先停止运行中的容器:参数容器id
docker stop bf06fdd451d3
7. 查看所有容器:包括停止了的
docker ps -a
8. 启动容器
docker start bf06fdd451d3
4.1 启动一个做了端口映射的tomcat
docker run -d -p 8888:8080 tomcat
-d: 后台运行
-p: 做端口映射
8888:8080 把主机的8888端口映射到容器tomcat中的8080
tomcat: 指明是tomcat

可以在主机 通过8888端口访问到docker容器的8080端口。
Docker启动tomcat404异常解决
1.访问ip地址+映射端口号出现404异常
2.分析原因
3.整个实现过程代码
1.访问ip地址+映射端口号出现404异常
2.分析原因
1. docker ps 查看当前容器运行对象ID

2.docker exec -it ID /bin/bash 进入tomcat容器

3.ls 查看当前文件目录

4.进入webapps 查看里面的内容(发现里面的内容为0),那么问题已经找到了,我们在通过IP地址+映射端口访问的时候就是访问的这个目录,但是目录下没有东西,所以访问的时候出现了404

5.进入webapps.dist文件查看(发现这个目录下的内容是tomcat容器中内容),所以我们可以把webapps目录删除,将webapps.dist改成webapps即可

6.删除webapps目录,将webapps.dist改成webapps

7.再次访问就可以成功了
8.整个实现过程代码
[root@localhost ~]# docker run -d -p 8889:8080 --name mTM02 tomcat
39be3bec9aaf2823e9e56db46f94c374543ebc6d86efa575810329cc776fea39
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39be3bec9aaf tomcat "catalina.sh run" 4 seconds ago Up 2 seconds 0.0.0.0:8889->8080/tcp mTM02
6141eafdada8 tomcat "catalina.sh run" 11 minutes ago Up 11 minutes 0.0.0.0:8888->8080/tcp mTM01
[root@localhost ~]# docker exec -it 39be3bec9aaf /bin/bash
root@39be3bec9aaf:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
//进入webapps
root@39be3bec9aaf:/usr/local/tomcat# cd webapps
root@39be3bec9aaf:/usr/local/tomcat/webapps# ls -l
total 0
//退出webapps
root@39be3bec9aaf:/usr/local/tomcat/webapps# cd ..
//进入webapps.dist
root@39be3bec9aaf:/usr/local/tomcat# cd webapps.dist
root@39be3bec9aaf:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@39be3bec9aaf:/usr/local/tomcat/webapps.dist# cd ../
//删除webapps
root@39be3bec9aaf:/usr/local/tomcat# rm -rf webapps
//修改webapps.dist 为webapps
root@39be3bec9aaf:/usr/local/tomcat# mv webapps.dist webapps
5. 安装软件
5.1 Mysql
可以在虚拟机中连接数据库:
docker exec -it ID /bin/bash 进入tomcat容器
mysql -uroot -proot

要指定一个Mysql Root用户密码
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d be0dbf01a0f3
做端口映射
docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d be0dbf01a0f3
连接不上:换成5.5版本
注意:虚拟机重启后,要再次启动docker。外部的电脑才能用SQLyog连接

5.2 开启两个Mysql
注意我下载了两个tomcat镜像,一个最新版,一个5.5。
mysql8.0的加密方法变了。mysql8.0默认采用caching_sha2_password的加密方式。sqlyog不支持这种加密方式。
所以注意打开5.5版本的mysql
docker run --name mysql02 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.5
再创建一个mysql容器:指定了编码格式
`docker run -p 3307:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=root -d mysql --character-set-server=utf8mb4 --collation -server=utf8mb4_unicode_ci
5.2 几个其他的高级操作
docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
把主机(相对于镜像容器说的,所以是虚拟机)的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
指定mysql的一些配置参数