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)]