* 1. 相关概念
* Docker就是一个应用的容器
* Docker是容器,放应用。应用是啥?一个网站、一个程序、一个系统等都是应用。从此不用配置环境,也不用装环境,更不用统一环境了。因为docker都打包好了,开一个容器不到一秒,环境什么的别人都配好了,我就老老实实写代码就可以。奔溃了重启(重启才3秒而已)。所以,docker就是用来存放和运行应用的一个容器,更轻量、更简单、更快速、更好玩。
* Docker是:“一次封装,到处运行”,因为docker决绝了应用环境的问题,安装了docker的平台就能跑“docker包”,这样就决绝了“开发环境能跑,一上线就崩”的尴尬。
* 一个完整的Docker有以下几个部分组成:
* dockerClient客户端
* Docker Daemon守护进程
* Docker Image镜像
* DockerContainer容器
* Docker 的优点
* 1、简化程序:Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
* 2、避免选择恐惧症:如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
* 3、节省开支:一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
* 2. 安装Docker
* Linux系统选择
* Docker都需要64位环境。(有的在Config的CPU中, 有的在Security中Virtualization(虚拟化))
![image](https://img.haomeiwen.com/i10517060/4a0bff6099c8f782.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* CentOS内核一般都很低,而Docker是要求高版本内核,所以,CentOS不合适运行Docker,建议使用Ubuntu安装运行Docker(因为Ubuntu内核更新很频繁)
* 安装ubuntu ( Desktop & Server 版本)
* 下载网址:[http://cn.ubuntu.com/download/](http://cn.ubuntu.com/download/)# Ubuntu 下载
* VM虚拟机启动报错: 无法连接虚拟设备sata0:0,因为主机上没有相应设备
* setting设置,选择iso文件,网络:桥接 ,然后重启虚拟机
* VM安装ubuntu时,由于分辨率问题 ,导致显示不全,无法移动窗口选择,安装不下去
* 解决:alt + 鼠标左键 ,可以移动窗口
* 安装过程中,提示想要安装的软件(如LAMP / openssh-server 等)
* 关键是设置一个用户名,及密码 // 后面登录系统需要用到
* 关闭ubuntu的防火墙 # ufw disable
* 开启防火墙 # ufw enable
* Ubuntu下的 sysv-rc-conf 完美“替代”CentOS下的chkconfig (httpd on)
* 装了Ubuntu14.04后发现chkconfig用不了,并且也安装不了chkconfig,于是老表便在网上找解决办法,最终发现原来chkconfig是Redhat下的程序,而在Ubuntu下有一个更好的程序可以完美“替代”chkconfig,那就是sysv-rc-conf
* apt -y install sysv-rc-conf # apt 跟 apt-get一样的效果,都是安装
* sysv-rc-conf 命令,可以查看所有的进程开启启动状态
* 必须要用超级用户权限; SecureCRT屏幕最大化(否则提示屏幕太小,无法使用这个命令)
* 用鼠标点击,也可以用键盘方向键定位,用空格键选择, “X”表示开启该服务。用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。
* 也可以用命令:
* # sysv-rc-conf mysql off
* ubuntu常用命令
* secureCRT远程连接Ubuntu
* 用户名:输入普通用户和密码,不要输入root,否则提示报错。
* Ubuntu上开启SSH服务
* sudo apt-get update // 更新源列表
* sudo apt-get install openssh-server // 安装openssh-server
* sudo ps -e | grep ssh // 提示sshd,说明安装成功
* 更新root密码
* ubuntu的root密码是每次开机随机的,所以我们可以修改root密码
* sudo passwd // 输入当前账户的密码(我的账号是jet,所以输入jet的密码) > 然后输入unix密码2次,此密码即为root密码
* su root // 登录root账号,输入刚才设置的root密码即可
* Ubuntu设置固定IP
* 打开/etc/network/interfaces文件,内容为(默认使用DHCP分配IP)
* auto lo
* iface lo inet loopback
* auto ens33
* iface ens33 inet dhcp
* 修改为:
* auto lo
* iface lo inet loopback
* auto ens33
* iface ens33 inet static
* address 192.168.1.249 # 想要设置的固定IP
* netmask 255.255.255.0
* gateway 192.168.1.1
* dns-nameservers 192.168.1.1
* # 这里dns可以在电脑的网络中 本地连接/无线连接--详细信息中查看IPv4 DNS服务器
* # 这里的dns配置的优先级比resolv.conf中配置的优先级高,所以,只需要在这里配置即可
* 重启系统即可 # reboot
* Ubuntu上软件安装情况,安装,卸载
* dpkg -l | grep mysql # 查看是否安装mysql
* apt purge mysql* -y # 卸载mysql(不保留配置信息)
* apt install -y mysql # 安装mysql
* Ubuntu apt-get update 失败
* 原因:自带源在国内连接性不好。。。
* 解决:改用”阿里云Ubuntu源”:
* 命令如下:
* sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
* sudo vim /etc/apt/sources.list
* 修改:关键!!此命令是为了进入vim修改sources.list,在将如下代码:
* deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
* deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
* deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
* deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
* deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
* deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
* deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
* deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
* deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
* deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
* 输入之前之前,把相对应的原有的源用#注释掉。
* sudo apt-get update
* 更新列表 ->成功!
* 安装Docker
* 使用脚本自动安装docker (执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 Edge 版本安装在系统中)
![image](https://img.haomeiwen.com/i10517060/67e4102f1ddf382c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* curl -fsSL [get.docker.com](http://get.docker.com)-o [get-docker.sh](http://get-docker.sh) // 先安装curl: (1)apt install curl
* sudo sh [get-docker.sh](http://get-docker.sh) --mirror Aliyun
* 启动 Docker CE
* $ sudo systemctl enable docker // 设置 Docker 开机自动启动(Ubuntu)
* $ sudo systemctl start docker // 启动Docker(Ubuntu)
* $ sudo systemctl stop docker // 停止Docker(Ubuntu)
* 建立 docker 用户组
* docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
* 建立 docker 组: $ sudo groupadd docker
* 将当前用户加入 docker 组:$ sudo usermod -aG docker jet //我登录系统的用户名是jet
* 退出当前终端并重新登录
![image](https://img.haomeiwen.com/i10517060/90bcc5c4c1d590e9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 测试 Docker 是否安装正确
* $sudo docker run hello-world
![image](https://img.haomeiwen.com/i10517060/d7c243a56839f964.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 3.Docker环境搭建(实战)
![image](https://img.haomeiwen.com/i10517060/c6e1419f4e1f444e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* docker run -d -p 8001:80 -p 63306:3306 --name myla /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](https://img.haomeiwen.com/i10517060/3a3e01df1e905e0f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/4d73b9e2de50f7c4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/8a62c9b090f6ee81.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/d08f8900c93d6229.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/2da38a8cbf59f8c2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/787e42727771b1a2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* LAMP 搭建 ranzhi 环境
* 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](https://img.haomeiwen.com/i10517060/4c54cc7e9733ff8b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 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](https://img.haomeiwen.com/i10517060/4d8518aeef78f0c7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 默认情况下,Tomcat容器是没有vim命令,所以需要安装
* apt-get update
* apt install vim
* 6\. 浏览器访问 [http://192.168.1.249:28080/rsbi](http://192.168.1.249:28080/rsbi)
![image](https://img.haomeiwen.com/i10517060/807b01aa8759575c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/4efb1118be5a2091.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 这个问题一直整到了凌晨3点:
* 连接不上MySQL数据(MySQL版本,以前是pull的最新的,一直报错如下,后来换成了5.6版本ok!)
![image](https://img.haomeiwen.com/i10517060/ce29d251b890672d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* Docker + Tomcat + Mysql 搭建 RSBI (多容器关联) -- 方法2
* docker run -d -p 33306:3306 --name mysql3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
![image](https://img.haomeiwen.com/i10517060/dbaded88b93047e4.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* docker logs -f 9538
![image](https://img.haomeiwen.com/i10517060/f4789b54e5518bd7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/f8a79ebb2b3b83e2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/0b0830f792a5cedb.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 创建数据库,并导入数据
![image](https://img.haomeiwen.com/i10517060/9788a732f8a01bc3.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/6067140264f167f6.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* docker run -v /home/jet/ceshi/:/usr/local/tomcat/webapps -p 38080:8080 --name myweb3 -d tomcat
![image](https://img.haomeiwen.com/i10517060/4fd3265570ba53fe.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 这样就不用复制 war文件到Tomcat容器中了,因为Tomcat容器中没有vim命令,需要单独去安装,增加了容器的体量,这样就可以直接映射Tomcat容器中/usr/local/tomcat/webapps路径为宿主机/home/jet/ceshi路径了。
* 修改database配置文件
![image](https://img.haomeiwen.com/i10517060/37a6b6c44370f3a0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 重启Tomcat
![image](https://img.haomeiwen.com/i10517060/e977f0b579e173eb.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 查看Tomcat容器启动情况 docker logs -f myweb3
![image](https://img.haomeiwen.com/i10517060/20cb889bad6dc642.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 浏览器访问
![image](https://img.haomeiwen.com/i10517060/bcfcb370159dd313.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/48d573c9e9f2d492.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 4.Docker常用命令
* docker version # 查看版本
* docker info # 显示docker系统的信息
* docker search -s 10 lamp # 搜索10星以上的lamp镜像
* docker pull lamp:1.1.1 # 拉取lamp(版本位1.1.1)
* docker pull lamp (默认不加版本号,则为latest最新版本)
* 默认情况:Docker官方网站专门有一个页面来存储所有可用的镜像,网址是:[https://hub.docker.com/](https://hub.docker.com/)
* 从阿里云库里pull想要的镜像: docker pull [registry.cn-beijing.aliyuncs.com/neucloud/python-27-centos7](http://registry.cn-beijing.aliyuncs.com/neucloud/python-27-centos7)
* docker images # 查看本机所有的镜像
* docker rmi lamp # 删除本机镜像lamp
* docker ps # 查看当前正在运行的容器
* docker ps -a # 查看宿主机上所有的容器
* docker stop a # 停止容器a
* docker stop myweb3 mysql3 mylamp # 按顺序依次停止这3个容器
* docker restart a # 重启容器a
* docker start a # 开启容器a
* docker rm a # 删除容器a
* docker run -ti -p 23306:3306 --name mymysql56 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
* pull 5.6版本的mysql
* 设置MySQL的Root密码为 123456
* 映射容器端口3306到宿主机上的端口23306
* 容器名称为 mymysql56
* docker run -it -p 28080:8080 --name mymyweb --link mymysql56:tomysql -d tomcat
* pull 最新版的tomcat
* 映射容器端口8080到宿主机上的端口28080
* 容器名为 mymyweb
* 与容器mymysql56数据库关联,指定别名为tomysql
* 查看Tomcat容器与MySQL容器关联成功与否?
* docker exec -ti mymyweb bash # 进入Tomcat容器
* cat /etc/hosts # 查看最后两行
* docker logs -f mymyweb # 查看Tomcat启动情况
* 或: docker logs -f 9538
* docker cp rsbi.war mymyweb:/usr/local/tomcat/webapps/ # 复制rsbi.war到Tomcat容器
* docker run -v /home/jet/ceshi/:/usr/local/tomcat/webapps -p 38080:8080 --name myweb3 -d tomcat
* 这样就不用复制 war文件到Tomcat容器中了,因为Tomcat容器中没有vim命令,需要单独去安装,增加了容器的体量,这样就可以直接映射Tomcat容器中/usr/local/tomcat/webapps路径为宿主机/home/jet/ceshi路径了
* 5.阿里云docker库 ( 首页 [https://dev.aliyun.com](https://dev.aliyun.com))
![image](https://img.haomeiwen.com/i10517060/f0df3e0782629b47.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image](https://img.haomeiwen.com/i10517060/f14fdfd388461f96.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 镜像加速
* 上传下载私有镜像
* 把容器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/)
* happyjet*** / 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镜像
* 以后所有人都可以下载我刚创建的ranzhi镜像
* 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)
网友评论