2020:0702--10--SpringBoot与Docker

598 阅读6分钟

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的一些配置参数