Docker(Full-2)

2018-12-05  本文已影响0人  嫩牛_软件测试_笔记
    *   保存对容器的修改(commit)
                    *   当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。
                        *   jet@ubuntu:~$ sudo docker commit 8a4c centos_mysql # 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message  # 8a4c 为 CONTAINER ID
                            *   sha256:429de6ea8eb312cdb3eaff36c4ecc6473c8d2d5de9ba79dab0cf1e874cd1138f
                                *   Note:  image相当于类,container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。
                                    *   docker commit 7ef5 newImageID
                                    *   docker run -ti imageName:imageVersion # 进入刚做的更改的容器内,可以运行tree命令检查是否安装tree成功
                        *   保存容器的步骤(方法一)(容器内、外操作):
                            *   1、(容器外) docker run -ti centos 进入centos容器
                            *   2、(容器内): yum -y install tree
                            *   3、(容器外) 查询新安装tree的容器ID: docker ps -l
                            *   4、(容器外): docker commit 6995 centos_tree # centos_tree 为新镜像名
                            *   5、(容器外):docker run -ti centos_tree 进入centos_tree容器,可以在里面运行tree命令了
                        *   保存容器的步骤(方法二)(容器外操作)
                            *   179  docker rmi -f centos_tree
                            *   180  docker images
                            *   181  docker run centos yum -y install tree
                            *   182  docker ps -l
                            *   183  docker commit 5e92 centos_t
                            *   184  docker run centos_t tree /opt
                *   对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach)
                    *   $docker rm `docker ps -a -q` # 删除所有容器
                    *   $docker rm Name/ID # 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container
                    *   # 停止、启动、杀死一个容器
                        *   $docker stop Name/ID
                        *   $docker start Name/ID
                        *   $docker kill Name/ID
                    *   $docker logs Name/ID # 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
                    *   $docker diff Name/ID # 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
                    *   $docker top Name/ID # 显示一个运行的容器里面的进程信息
                    *   $docker cp Name:/container_path to_path 或 $docker cp ID:/container_path to_path # 从容器里面拷贝文件/目录到本地一个路径
                    *   $docker restart Name/ID # 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10
                    *   $docker attach ID # 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process
                        *   Note: attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。
                *   保存和加载镜像(save、load)
                    *   当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。
                        *   $docker save image_name -o file_path # 保存镜像到一个tar包; -o, --output="" Write to an file
                        *   $docker load -i file_path # 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file

                        *   $docker save image_name > /home/save.tar # 机器a
                        *   # 使用scp将save.tar拷到机器b上,然后: $docker load < /home/save.tar
                *   登录registry server(login)
                    *   $docker login # 登陆registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username
                        *   Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to [https://hub.docker.com](https://hub.docker.com/)to create one.
                *   发布image(push)
                    *   $docker push new_image_name # 发布docker镜像
                *   根据Dockerfile 构建出一个容器
                    *   $docker build -t image_name Dockerfile_path  
        *   安装Docker时,第2步,获取到get-docker.sh成功后,第3步,失败,提示 "cd-room..."
            *   解决方法:
                *   sudo vi /etc/apt/sources.list
                *   注释掉# cd-room即可即可
        *   Docker(4)- Docker的镜像和容器的区别
            *   一、Docker镜像
                *   要理解Docker镜像和Docker容器之间的区别,确实不容易。
                *   假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。
                *   一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。
                *   Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。要列出本地所有有效的镜像,可以使用命令
                *   # docker images
                *   镜像可以发布为不同的版本,这种机制我们称之为标签(Tag)。
                *   如上图所示,neo4j镜像有两个版本:lastest版本和2.1.5版本。
                *   可以使用pull命令加上指定的标签:
                *   # docker pull ubuntu:14.04
                *   # docker pull ubuntu:12.04
            *   二、Docker容器
                *   Docker容器可以使用命令创建:
                *   # docker run imagename
                *   它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。
                *   当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。
                *   我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。
                *   如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。
                *   如果想更新容器到其镜像的新版本,那么必须当心,确保我们是以正确的方式构建了数据结构,否则我们可能会导致损失容器中所有数据的后果。
                *   64字符的十六进制的字符串来定义容器ID,它是容器的唯一标识符。容器之间的交互是依靠容器ID识别的,由于容器ID的字符太长,我们通常只需键入容器ID的前4个字符即可。当然,我们还可以使用容器名,但显然用4字符的容器ID更为简便。
            *   阿里云镜像使用
                *   详细上传步骤
                    *   jet@ubuntu:~$ docker login -u happyjetderek [registry.cn-hangzhou.aliyuncs.com](http://registry.cn-hangzhou.aliyuncs.com/)# 一定不能带-p输入密码,否则报错 # 用户名为阿里云登录的用户名
                        *   Password: # 此处输入密码Registry登录密码(为[https://cr.console.aliyun.com/#/imageList右上角](https://cr.console.aliyun.com/#/imageList右上角)“修改Registry登录密码”出修改的密码)
                        *   Login Succeeded
                    *   jet@ubuntu:~$ docker tag  ff42 registry.cn-hangzhou.aliyuncs.com/cdtest/lamp[:1.0.1]
                        *   # ff42 是ImageID
                        *   默认没有:1.0.1版本号,则为latest
                    *   jet@ubuntu:~$ docker push registry.cn-hangzhou.aliyuncs.com/cdtest/lamp[:1.0.1]
                    *   jet@ubuntu:~$ docker images
                        *   可以查到到刚才推送成功的所有镜像及版本
                        *   在[https://cr.console.aliyun.com/#/dockerImage/cn-hangzhou/cdtest/lamp/versions](https://cr.console.aliyun.com/#/dockerImage/cn-hangzhou/cdtest/lamp/versions) 页面上也可以看到刚上传成功的镜像
                    *   jet@ubuntu:~$ docker logout registry.cn-hangzhou.aliyuncs.com
                        *   退出登录
            *   Docker命令
                *   总的来说分为以下几种:
                    *   容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
                    *   容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
                    *   容器rootfs命令 — docker [commit|cp|diff]
                    *   镜像仓库 — docker [login|pull|push|search]
                    *   本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
                    *   其他命令 — docker [info|version]
                *   镜像操作
                    *   docker search (image-name) 查询镜像 example:docker search ubuntu
                    *   docker history (image-name) 查看镜像的历史版本
                    *   docker push (image-name) 将镜像推送到registry
                    *   docker pull image-name:tag pull镜像 example:docker pull ubuntu:latest
                    *   docker rmi <image id> 删除镜像(先stop并删除镜像上的所有容器)
                    *   docker rmi $(docker images -q) 删除全部镜像
                    *   docker tag image-id imagename:tag 修改镜像的tag标签
                    *   docker load -i test.tar 从tar文件中载入镜像
                    *   docker save image > test.tar 保存镜像为tar文件
                *   容器操作
                    *   docker attach container 进入容器交互式界面
                    *   docker diff  container 列出容器内发生变化的文件与目录
                    *   dcoker logs ID(容器的ID,可以用docker ps查看)   查看docker上的容器的状态
                    *   docker stop ID(或者容器名字)  关闭运行中的容器
                    *   docker start ID 开启容器
                    *   docker restart ID  重启运行中的容器
                    *   docker stop ID docker rm ID  移除容器(先关闭再删除)
                    *   docker kill [options] container 杀死容器的主进程
                    *   docker stop $(docker ps -a -q) 停止所有container
                    *   docker rm $(docker ps -a -q)   移除所有container
                    *   docker commit ID new镜像名字(只能字母加数字) 将容器的状态保存为镜像
                    *   docker export container > test.tar  将容器打包成tar文件
                    *   docker cp container:path hostpath  从容器内复制文件到指定的路径
                *   其它操作
                    *   docker import http://example.com/example.tar  远程导入文件
                    *   docker login [options][server]  用来登陆自己的registry
                    *   docker inspect container/image  收集容器的信息(ip地址,端口等)
                    *   docker wait container  阻塞
            *   Docker一些基础的概念
                *   1.docker与传统虚拟化的区别可以通过下面两幅图很直观的看出
                    *   传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便
                *   2 镜像
                    *   Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
                *   3 容器
                    *   镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
                    *   容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。
                *   4 仓库
                    *   仓库很容易理解,就是镜像的集合。
            *   dockerfile
                *   dockerfile可以用来动态生成新的镜像,比如说我们pull了一个基础的centos镜像,现在需要在此镜像内安装一些软件,以便可以顺利运行我们准备的项目代码,那么可以使用以下2种方案:
                    *   手动式:
                        *   在centos镜像上创建一个容器,进入容器交互式界面后,手动安装一些需要的软件,配置好环境。当做好所有的修改后,使用docker commit container-id newimagename创建新的镜像。再使用新的镜像来创建容器,运行我们的项目代码。
                    *   自动式:
                        *   所谓自动化,就是不需要进入容器手动输入命令进行配置,一切都在容器运行时自动处理,那么这就要用到dockerfile了。dockerfile简单来说就是一个配置文件,docker容器在运行时会处理这个文件内容,比如安装软件,修改环境变量,运行程序等。使用dockerfile的好处在于可以很方便的修改配置文件内容,达到创建动态镜像的效果
                *   编写dockerfile
                    *   在Dockerfile文件内写入:
                        *   我们需要创建一个目录来存放Dockerfile文件,目录名称可以任意取,在该目录里创建Dockerfile文件。这里我以创建一个基于centos基础镜像,容器运行后会自动开启一个python webserver(本地监听8080端口)的例子。
                            *   # Version 0.1
                            *   # 基础镜像
                            *   FROM registry.cn-hangzhou.aliyuncs.com/cdtest/lamp:1.0.1
                            *   # 维护者信息
                            *   MAINTAINER jet
                            *   # 镜像操作命令
                            *   RUN yum -y install tree
                            *   # 容器启动命令
                            *   CMD python -m SimpleHTTPServer 8080
                    *   dockerfile语法类似于MakeDown,基础内容如下:
                        *   FROM 基于的基础镜像名称
                        *   MAINTAINER 维护者信息
                        *   RUN 运行的命令(安装软件等)
                        *   CMD 启动容器时运行的命令(只能写一条)
                        *   语法不止这些,更多内容,可以参考官方文档
                    *   生成dockerfile镜像
                        *   进入到Dockerfile文件所在目录,运行:
                            *   docker build -t centos_test:01 .
                                *   . 为当前目录路径
                                *   centos_test:01为新生成的镜像名:版本号
                    *   使用dockerfile镜像
                        *   在此image上运行容器:
                            *   docker run -d -p 80:8080 centos_test:01
                    *   打开本机的192.168.1.249:80
                        *   192.168.1.249为我的ubuntu虚拟机地址,可在虚拟机外面的浏览器中访问
            *   Laradock
            *   Docker 镜像加速器
                *   我们使用Docker的第一步,应该是获取一个官方的镜像,例如mysql、wordpress,基于这些基础镜像我们可以开发自己个性化的应用。我们可以使用Docker命令行工具来下载官方镜像。
                *   但是因为网络原因,我们下载一个300M的镜像需要很长的时间,甚至下载失败。因为这个原因,阿里云容器Hub服务提供了官方的镜像站点加速官方镜像的下载速度。
                    *   使用镜像加速器
                        *   在不同的系统下面,配置加速器的方式有一些不同,所以我们介绍主要的几个操作系统的配置方法。
                        *   关于加速器的地址,你只需要登录容器Hub服务的控制台,左侧的加速器帮助页面就会显示为你独立分配的加速地址。
                        *   例如:
                        *   公网Mirror:[系统分配前缀].mirror.aliyuncs.com
                            *   当你的docker版本较新时
                            *   当你下载安装的Docker Version不低于1.10时,建议直接通过daemon config进行配置。
                                *   使用配置文件 /etc/docker/daemon.json(没有时新建该文件)
                                *   {
                                *   "registry-mirrors": ["<your accelerate address>"]
                                *   }
                                    *   重启Docker Daemon就可以了。
                            *   当你的docker版本较旧时
                                *   只能根据系统的不同修改对应的配置文件了。
                                *   Ubuntu 12.04 14.04
                                *   Ubuntu的配置文件的位置在 /etc/default/docker
                                *   你只需要在这个配置文件,添加加速器的配置项,重启Docker就可以了
                            *   Ubuntu 15.04 15.10
                                *   Ubuntu 15.04 之后的加速器配置方式有了一些变化
                                *   Ubuntu的配置文件的位置在 /etc/systemd/system/docker.service.d/目录下
                                *   在这个目录下创建任意的*.conf文件就可以作为配置文件。然后在这个配置文件,添加加速器的配置项,重启Docker就可以了
                                *   sudo mkdir -p /etc/systemd/system/docker.service.d
                                *   sudo tee /etc/systemd/system/docker.service.d/mirror.conf <<-'EOF'
                                *   [Service]
                                *   ExecStart=
                                *   ExecStart=/usr/bin/docker daemon -H fd:// --registry-mirror=<your accelerate address>
                                *   EOF
                                *   sudo systemctl daemon-reload
                                *   sudo systemctl restart docker
                            *   CentOS 7
                                *   CentOS的配置方式略微复杂,需要先将默认的配置文件复制出来
                                *   /lib/systemd/system/docker.service -> /etc/systemd/system/docker.service
                                *   然后再将加速器地址添加到配置文件的启动命令
                                *   重启Docker就可以了。
                                *   sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
                                *   sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
                                *   sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
                                *   sudo systemctl daemon-reload
                                *   sudo service docker restart
                            *   Redhat 7
                                *   Redhat 7配置加速器的方式与其他系统都不一样,需要编辑/etc/sysconfig/docker配置文件。
                                *   在OPTIONS配置项中添加加速器配置--registry-mirror=<your accelerate address>
                                *   最后sudo service docker restart重启docker daemon。
                            *   Redhat 6、CentOS 6
                                *   在这两个系统上没有办法直接安装Docker,需要升级内核。
                                *   配置加速器的方式和上一个配置类似,也是通过编辑/etc/sysconfig/docker配置文件。
                                *   在other_args配置项中添加加速器配置--registry-mirror=<your accelerate address>
                                *   最后sudo service docker restart重启docker daemon。
                                *   Docker Toolbox
                                *   在Windows、Mac系统上使用Docker Toolbox使用Docker的话
                                *   推荐做法是在创建Linux虚拟机的时候,就将加速器的地址配置进去
                                *   docker-machine create --engine-registry-mirror=<your accelerate address> -d virtualbox default
                                *   docker-machine env default
                                *   eval "$(docker-machine env default)"
                                *   docker info
                                *   如果你已经通过docker-machine创建了虚拟机的话,则需要通过登录机器修改配置了
                                *   首先通过docker-machine ssh <machine-name>登录虚拟机
                                *   然后修改/var/lib/boot2docker/profile文件,将--registry-mirror=<your accelerate address>添加到EXTRA_ARGS中
                                *   最后sudo /etc/init.d/docker restart重启Docker服务就可以了
        *   Docker(5)-部署( java/php ) web应用
            *   Docker部署java web应用
                *   root@ubuntu:/home/jet/DockerfileTest# docker rm -f $(docker ps -qa)
                    *   删除所有存在的容器
                *   docker ps
                    *   查看正在运行的容器
                *   docker search tomcat
                *   docker pull tomcat
                *   docker tag tomcat tomcat-1
                    *   给镜像tomcat起个别名tomcat-1
                *   docker run -p 5000:8080 --name c1 tomcat-1
                    *   运行镜像tomcat-1,生成的容器名为c1,将容器中的8080端口映射为主机中的5000端口
                *   http://192.168.1.249:5000/
                    *   在浏览器中查看tomcat的启动情况
                *   root@ubuntu:/home/jet/DockerfileTest# docker exec -ti c1 /bin/bash
                    *   进入c1容器中(交互模式)
                *   jet@ubuntu:~/DockerfileTest$ docker cp javaweb1.war c1:/usr/local/tomcat/webapps
                    *   将虚拟机中DockerfileTest目录下的javaweb1.war 复制到c1容器中的/usr/local/tomcat/webapps路径下
                *   root@d2afc8cf878a:/usr/local/tomcat/webapps# ls
                    *   查看是否复制成功
                *   http://192.168.1.249:5000/javaweb1
                    *   浏览器中查看java web应用部署是否OK
                *   设置成私人镜像,并上传便于他人引用
                    *   docker commit c1 [registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1)
                    *   docker login
                    *   docker push [registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1)
                    *   docker pull [registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1)
                    *   root@ubuntu:/home/jet# docker run -tid -p 4800:8080 --name mytomcat [registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/tomcattest:0.0.1)
                    *   [http://192.168.1.249:4800/javaweb1/](http://192.168.1.249:4800/javaweb1/)
                    *   root@ubuntu:/home/jet# docker exec -ti mytomcat /bin/bash
            *   Docker部署php web应用
                *   1\. 下载lamp镜像
                    *   docker search -s 10 lamp  # 意思是搜索10星以上的镜像,越高,证明用的人越多。
                    *   docker pull tutum/lamp   # 选择了一个星级高的tutum/lamp
                    *   docker images # 查看刚才下载的tutum/lamp是否成功
                        *   [https://hub.docker.com/](https://hub.docker.com/)搜索tutum/lamp,查看 镜像tutum/lamp的使用说明
                *   2\. 端口映射
                    *   docker run -tid -p 80:80 -p 3306:3306 tutum/lamp #使用默认方式启动LAMP
                    *   docker run -tid -p 80:80 -p 3306:3306 -e MYSQL_PASS="123456" --name mylamp tutum/lamp # 修改mysql用户root的密码(否则每次都是随机的密码)
                        *   # mylamp 为运行tutum/lamp镜像后,新生成的容器名
                    *   docker ps
                        *   5c8f113fb088        tutum/lamp          "/[run.sh](http://run.sh/)"           41 seconds ago      Up 15 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:3306->3306/tcp   mylamp
                    *   docker exec -ti mylamp /bin/bash # 用容器Name
                        *   docker exec -ti 5c8f /bin/bash # 用容器 id
                        *   进入容器mylamp中
                    *   mysql -uadmin -p"123456"  # 容器中使用刚修改的mysql密码登录mysql
                *   3.web应用在容器中的默认位置
                    *   /var/www/html   # 可以通过容器中find / -name html 搜索到
                *   4.从虚拟机外部上传ranzhi3.3.zip 都虚拟机VM中
                    *   # rz 命令上传
                *   5.从VM中复制到容器中
                    *   docker cp ranzhi3.3.zip mylamp:/var/www/html/
                    *   unzip ranzhi3.3.zip # 此容器中没有unzip,所以要安装: apt -y install unzip
                *   6.外部浏览器中输入网址,可正常访问ranzhi
                    *   http://192.168.1.249/ranzhi/www
                *   7.把容器mylamp生成新镜像,并上传到阿里云镜像源
                    *   docker commit mylamp [registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1)
                    *   docker login [registry.cn-hangzhou.aliyuncs.com](http://registry.cn-hangzhou.aliyuncs.com/)
                        *   happyjetderek / q....7 (输入你自己在阿里云注册的账号及register密码)
                    *   docker push [registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1)
                        *   这是在我的aliyun中cdtest命名空间下的lamp_ranzhi镜像
                *   8.以后所有人都可以下载我刚创建的ranzhi_lamp
                    *   docker pull [registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1)
                    *   docker run -tid -p 80:80 -p 3306:3306 --name myranzhi [registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1](http://registry.cn-hangzhou.aliyuncs.com/cdtest/lamp_ranzhi:1.0.1)
                    *   docker exec -ti myranzhi /bin/bash
                        *   # 可进入容器查看mysql,还是以前的密码123456
        *   tomcat+mysql+javaweb+docker (此段可不看,因为到最后,一直卡在无法连接MySQL容器)
            *   利用Docker搭建RSBI项目
                *   关于如何在docker中利用tomcat和MySQL容器部署java web应用的详细步骤
                    *   1\. 提前拉取tomcat & mysql

                        [图片上传失败...(image-dab50a-1543981840412)]

                        [图片上传失败...(image-ea8292-1543981840412)]

                    *   2\. 镜像拉取好了之后我们就创建运行应用所需的容器,首先创建一个MySQL容器
                        *   docker run -ti -p 3306:3306 --name mymysql  -e MYSQL_ROOT_PASSWORD=123456 -d mysql
                            *   run -itd:在docker中运行一个带交互式的且能后台运行的容器。
                            *   --name mysql:给容器命名为mysql,注意name前面有两个小横杠,你也可以自己随意命名。
                            *   -p 3306:3306:这里是指将容器的3306端口映射到主机的3306端口,冒号前面指的是主机,后面指的是容器。
                            *   -e MY_ROOT_PASSWORD=123456:这行命令的意思是在创建mysql容器的时候在容器中创建一个root用户,密码是123456,要是不想用123456,把它改成你想要的就可以了。
                                *   docker run --name mymysql -p 3306:3306  -v /c/Users/xu/Desktop/mysqldata/:/usr/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 -d mysql
                                    *   -v /c/Users/xu/Desktop/mysqldata/:/usr/lib/mysql是将容器内的数据挂在到宿主机上面
                    *   3\. 进入容器 docker exec -ti mymysql bash

                        [图片上传失败...(image-6cc13e-1543981840412)]

                    *   4\. 注:这里我啰嗦一句,现在我们在mysql容器的命令行中,我们可以另外打开一个终端进行下面的操作,也可以使用 ctrl+p+q(按住ctrl不放,先按p键,再按q键。全部松开后回车就可以回到linux命令行中)来退出mysql容器但不让容器停止。
                    *   5\. 使用Navicat连接Docker中的Mysql容器
                        *   报错:
                        *   连接Docker启动的mysql出现:ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded

                            [图片上传失败...(image-ff3628-1543981840408)]

                            [图片上传失败...(image-e1fea7-1543981840408)]

                            *   ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
                                *   将容器中的Mysql root用户修改了密码,密码也为 root

                                    [图片上传失败...(image-3d4de3-1543981840406)]

                                    *   ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
                                        *   root用户的密码设置为空了(我后来设置为空了,因为我要部署UCKeFU,默认配置是密码空,就不用更改了)

                                            [图片上传失败...(image-126096-1543981840404)]

                    *   5\. Mysql中新建数据库 rs_report

                        [图片上传失败...(image-cd9fec-1543981840412)]

                        [图片上传失败...(image-cf89bc-1543981840412)]

                    *   6\. 接下来我们创建部署web服务的容器,并进入到容器
                        *   docker run -it -p 8080:8080 --name myweb --link mymysql:db -d tomcat

                            [图片上传失败...(image-ff87b9-1543981840408)]

                            *   1)myweb是创建的web容器的名字
                            *   2)mymysql是步骤3中创建的mysql容器的名字,可以通过其访问数据库,例如:jdbc_url=jdbc:mysql://mymysql:3306/mydatabasename?useUnicode=true&characterEncoding=utf8
                            *   3)db是个别名,web程序访问mysq数据可以通过其访问,例如jdbc_url=jdbc:mysql://db:3306/mydatabasename?useUnicode=true&characterEncoding=utf8</span>
                            *   4) tomcat 是tomcat的镜像名称
                    *   7\. Windows中的ROOT.war文件rz上传至Ubuntu服务器 

                        [图片上传失败...(image-576e53-1543981840412)]

                    *   8\. Ubuntu中的rsbi.war上传到Tomcat容器

                        [图片上传失败...(image-c281-1543981840412)]

                        [图片上传失败...(image-265cba-1543981840412)]

                        [图片上传失败...(image-f9215f-1543981840412)]

                        *   docker cp ROOT.war myweb:/usr/local/tomcat/webapps
                            *   修改数据库连接配置文件
                                *   在docker容器中vi指令找不到
                                    *   在使用docker容器时,有时候里边没有安装vi,敲vi命令时提示说:vi: command not found,这个时候就需要安装vi,可是当你敲apt-get install vi命令时,提示:
                                    *   Reading package lists... Done
                                    *   Building dependency tree
                                    *   Reading state information... Done
                                    *   E: Unable to locate package vi
                                    *   这时候需要敲:apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
                                    *   等更新完毕以后再敲命令:apt install vim命令即可。
                                    *   对于其他的软件来说 也是相同的
                                *   执行 apt-get upgrade 遇到速度慢的原因: 使用国外软件源
                                    *   解决方法也很简单,将源换为国内环境即可,我选择阿里云
                                    *   步骤
                                    *   1.备份为 sources.list
                                    *   sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
                                    *   2.编辑sources.list 文件
                                    *   sudo vim /etc/apt/sources.list
                                    *   3.使用#注释原来的内容,并添加以下内容
                                    *   deb http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib
                                    *   deb-src http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contrib
                                    *   4.更新系统软件 并 更新已安装的包
                                    *   sudo apt-get update && apt-get upgrade -y
                    *   9\. 验证:[http://192.168.1.249:8080/rsbi](http://192.168.1.249:8080/rsbi)

                        [图片上传失败...(image-a44be7-1543981840412)]

                        [图片上传失败...(image-245f3f-1543981840412)]

        *   ui-for-docker
            *   Docker管理平台(方便Web方式管理docker images, 容器等)
            *   docker pull uifd/ui-for-docker
            *   docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker
            *   192.168.1.249:9000

                [图片上传失败...(image-5ee9ac-1543981840421)]

                [图片上传失败...(image-e1f497-1543981840421)]

        *   Docker + Tomcat + Mysql 搭建 RSBI (多容器关联) -- 方法1
            *   1\. docker run -ti -p 23306:3306 --name mymysql56  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
                *   pull 5.6版本的mysql
                *   设置MySQL的Root密码为 123456
                *   映射端口为23306
                *   容器名称为 mymysql56
                    *   等待一段时间,使用SQLYog才能连得上,否则一直报错2003错误

                        [图片上传失败...(image-fda0c7-1543981840412)]

            *   2\. SQLYog成功连接上了容器,并成功创建了数据库 rs_report ,导入SQL数据
                *   192.168.1.249
                *   23306
                *   root
                *   123456
            *   3\. docker run -it -p 28080:8080 --name mymyweb --link mymysql56:tomysql -d tomcat
                *   pull 最新版的tomcat
                *   映射Tomcat端口为28080
                *   容器名为 mymyweb
                *   与容器mymysql56数据库关联,指定个别名为tomysql
                    *   查看Tomcat容器与MySQL容器关联成功与否?
                        *   docker exec -ti mymyweb bash # 进入Tomcat容器
                        *   cat /etc/hosts # 查看最后两行
                            *   查看Tomcat启动情况 # docker logs -f mymyweb
            *   4\. 复制rsbi.war到Tomcat容器
                *   docker cp rsbi.war mymyweb:/usr/local/tomcat/webapps/
            *   5\. 进入Tomcat容器,修改rsbi数据库配置信息database.properties
                *   docker exec -ti mymyweb bash
                *   vi /usr/local/tomcat/webapps/rsbi/WEB-INF/classes/database.properties

                    [图片上传失败...(image-8eaca6-1543981840418)]

                    *   默认情况下,Tomcat容器是没有vim命令,所以需要安装
                        *   apt-get update
                        *   apt install vim
            *   6\. 浏览器访问 [http://192.168.1.249:28080/rsbi](http://192.168.1.249:28080/rsbi)

                [图片上传失败...(image-6cc461-1543981840421)]

                [图片上传失败...(image-a3d76f-1543981840421)]

                *   这个问题一直整了好几个小时:
                    *   连接不上MySQL数据(做了2个修改:1、以前一直端口是3306,后来改成了23306,或者13306,都是可以的,可能是端口冲突了;2、还有一点:MySQL版本,以前是用的最新的,后来换成了5.6版本!)

                        [图片上传失败...(image-1e547b-1543981840412)]

        *   Docker + Tomcat + Mysql 搭建 RSBI (多容器关联) -- 方法2
            *   docker run -d -p 33306:3306 --name mysql3  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

                [图片上传失败...(image-3db9f-1543981840421)]

            *   docker logs -f 9538

                [图片上传失败...(image-84ca1d-1543981840421)]

                [图片上传失败...(image-d827fe-1543981840421)]

                [图片上传失败...(image-d25d5a-1543981840421)]

            *   创建数据库,并导入数据

                [图片上传失败...(image-56a125-1543981840421)]

                [图片上传失败...(image-c5e82c-1543981840421)]

            *   docker run -v /home/jet/ceshi/:/usr/local/tomcat/webapps -p 38080:8080 --name myweb3 -d tomcat

                [图片上传失败...(image-faad56-1543981840421)]

                *   这样就不用复制 war文件到Tomcat容器中了,因为Tomcat容器中没有vim命令,需要单独去安装,增加了容器的体量,这样就可以直接映射Tomcat容器中/usr/local/tomcat/webapps路径为宿主机/home/jet/ceshi路径了。
            *   修改database配置文件

                [图片上传失败...(image-3c1db5-1543981840421)]

            *   重启Tomcat

                [图片上传失败...(image-c592c9-1543981840420)]

            *   查看Tomcat容器启动情况 docker logs -f myweb3

                [图片上传失败...(image-4d922f-1543981840420)]

            *   浏览器访问

                [图片上传失败...(image-df2f90-1543981840420)]

                [图片上传失败...(image-effd46-1543981840420)]

                [图片上传失败...(image-bad0f3-1543981840420)]

        *   最新数据库MySQL版本测试rsbi搭建(异常,所以还是只能最好用mysql5.6版本)

            [图片上传失败...(image-89682a-1543981840424)]

            [图片上传失败...(image-c6dde2-1543981840423)]

            [图片上传失败...(image-5c3714-1543981840423)]

            [图片上传失败...(image-483cc4-1543981840423)]

            [图片上传失败...(image-baeaec-1543981840423)]

            [图片上传失败...(image-993ac2-1543981840423)]

            *   MySQL最新版,不兼容!!!
        *   LAMP搭建然之环境
            *   docker run -d -p 8001:80 -p 63306:3306 --name mylamp -v /home/jet/ceshi:/var/www/html -e MYSQL_PASS="123456" tutum/lamp
                *   tutum/lamp([https://hub.docker.com/r/tutum/lamp/](https://hub.docker.com/r/tutum/lamp/)有详细镜像使用说明):
                *   mysql -u root -p (密码为空) -- 容器内连接,无密码
                *   mysql -u admin -p (密码123456) -- 容器外连接,用户:admin,密码设置为:123456

                    [图片上传失败...(image-4f41c9-1543981840418)]

                    [图片上传失败...(image-d5d7d1-1543981840418)]

                    [图片上传失败...(image-713da5-1543981840418)]

                    [图片上传失败...(image-7d700c-1543981840418)]

                    [图片上传失败...(image-41175a-1543981840418)]

                    [图片上传失败...(image-5a06a3-1543981840418)]

上一篇下一篇

猜你喜欢

热点阅读