慕课网--docker走进第一个javaweb应用
zh
docker镜像就是一系列文件的集合
docker 容器就是一个进程。将docker镜像运行起来就是一个docker容器
docker仓库就是存储docker镜像的
1、docker的安装
docker是什么?
docker是一种容器技术。
通过docker,可以将应用和开发环境打包成镜像,只要部署环境安装了docker,就可以通过简单的命令,部署镜像,不用再安装一系列复杂的软件环境(数据库、redis缓存等),从而简化了部署的过程。
docker使用go语言开发,并且运行在linux系统下,而如果想用window运行,只能在window基础上先运行一个linux虚拟机,然后再在这个linux虚拟机下运行docker。
window安装docker的原理,就是在系统里安装了一个隐式的linux虚拟机,然后在这个虚拟机里安装了docker服务。下面介绍如何在window环境安装docker。我的系统的win7,就以win7为例了。
安装环境
我本机的配置情况:win7-64位操作系统、内存16G、处理器intel(R) Core(TM) i5-6500 CPU(4核)
安装步骤
win7系统对应的docker安装包,推荐使用 Docker Toolbox 。
1.下载Docker Toolbox 安装包
官方下载地址:https://github.com/boot2docker/windows-installer/releases(这个地址国内下载很慢)
国内下载地址:
https://get.daocloud.io/toolbox/ 或者
http://get.daocloud.io/#install-docker-for-mac-windows
这里下载的是DockerToolbox-17.06.0a-ce.exe版本,最新的18 19版本在win7上安装会出现问题
下载完成之后一直安装注意:安装路径千万不要有中文!!!!
上面的都要勾选上
这里需要勾选始终信任
安装完成之后我们点击桌面上的Docker Quickstart Terminal
由于第一次运行,需要加载一些配置,耗费很长时间创建docker虚拟机,需要自动执行脚本获取boot2docker.iso,但是网络很差,我们自行去下载boot2docker.iso
提示说boot2docker.iso已经过期
解决办法:通过下载、拷贝最新版本的boot2docker.iso文件,放到安装目录和缓存目录下,可以解决此问题。
注意事项:在网上找的文章仅提到拷贝到本地缓存目录(C:\Users\admin.docker\machine\cache\)下,导致无法解决问题。
下载最新的版的boot2docker.iso镜像, 官方下载地址:https://github.com/boot2docker/boot2docker/releases
拷贝到本地缓存目录(C:\Users\admin.docker\machine\cache\)下,
并拷贝到本地的安装目录(C:\Program Files\Docker Toolbox)下,
再次运行-Docker 再次运行-Docker Quickstart Terminal终端控制台,
已经能够正常创建default虚拟机了。
这样整个docker就已经安装成功了,运行docker version 可以看到当前docker的版本信息
3。linux上安装docker
操作系统要求64位的
4、接下来进行docker,创建docker的第一个镜像
docker pull从仓库拉去docker的镜像
docker images 查看本机有哪些docker的镜像
镜像下载完成之后,需要将镜像运行起来,形成一个容器
docker client 发生一条信息给docker daemon ,消息是 docker pull hello-world,docker daemon首先在本地检查hello-wordl的镜像是否存在,如果不存在会到docker仓库去下载对于的镜像
docker client 发生一条信息给docker daemon ,消息是 docker run hello-world,docker daemon首先在本地检查hello-wordl的镜像是否存在,如果不存在会到docker仓库去下载对于的镜像,
接下来docker daemon 会将镜像运行起来
2、接下来docker允许nginx的镜像
我们进入到网易蜂巢的镜像中心下载对应的nginx的镜像
docker pull hub.c.163.com/library/nginx:latest 从网易蜂巢下载最新的docker镜像
docker images查看本地仓库存在哪些镜像
docker run hub.c.163.com/library/nginx 运行nginx的镜像
我们运行之后看到窗口没有反映,我们可以新打开一个Docker Quickstart Terminal窗口,在新窗口中使用docker ps查看当前运行了哪些docker容器
这样说明nginx已经启动了,但是这样nginx是在前台运行,把Terminal窗口关闭了对应的nginx就停止了
我们要后台启动nginx 加上-d命令
docker run -d hub.c.163.com/library/nginx
5e3a9539b69aad09b4a98e79b45e34866d78dcfe05cb966ed96fbb8b6ff2d54b是容器运行的id
接下来我们要进行运行中的容器对容器进行操作,使用下面的命令
docker exec -it 5e3a9539b69aad09b4a98e7 bash
docker exec -it
# 交互可以进入容器 ; exec 也可以在宿主机对容器执行命令;
5e3a9539b69aad09b4a98e7是容器的id
bash在docker中执行bash命令,bash是命令的参数,执行那个命令
执行exit,可以退出容器
4、接下来我们要在浏览器中访问运行的nginx,浏览器要访问docker容器,需要对docker进行网络设置
第一种模式host模式:docker容器使用主机的网卡对外进行通信,和主机具有相同的ip地址和端口容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。
例如,我们在 10.10.101.105/24 的机器上用 host 模式启动一个含有 web 应用的 Docker 容器,监听 tcp 80 端口。当我们在容器中执行任何类似 ifconfig 命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用 10.10.101.105:80 即可,不用任何 NAT 转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
第二种模式:桥接模式:docker容器会模拟出一块虚拟网卡,docker容器通过虚拟网卡和主机进行通信,需要制定docker容器的ip地址和进行端口映射
bridge 模式是 Docker 默认的网络设置,此模式会为每一个容器分配 Network namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。当 Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配 IP 了,Docker 会从 RFC1918 所定义的私有 IP 网段中,选择一个和宿主机不同的IP地址和子网分配给 docker0,连接到 docker0 的容器就从这个子网中选择一个未占用的 IP 使用。如一般 Docker 会使用 172.17.0.0/16 这个网段,并将 172.17.42.1/16 分配给 docker0 网桥(在主机上使用 ifconfig 命令是可以看到 docker0 的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)
我们在设置docker网络设置的时候,我们先将之前运行的docker容器停止掉
先使用docek ps获得当前运行的nginx的id,然后使用docker stop nginxid停止使用nginx
docker run -d -p 9090:80 hub.c.163.com/library/nginx
-d表示让容器为后端运行的进行,把窗口退出之后进程依然存在
-p进行主机和容器端口的映射,80是nginx在容器中默认的端口,9090是当前安装docker主机的端口,当在浏览输入9090端口访问的时候就会映射访问docker容器中的80端口
访问之前我们首先要知道当前安装docker主机的ip地址,不能使用localhost
才知道docker是运行在linux上的,windows运行docker实质上是先开启了linux的虚拟机,然后再到上面运行的。
所以映射到"本机",实际上是映射到了linux的本机ip。(Linux和Mac能使用localhost,因为docker就是运行在本机上的)
那么这个ip是多少呢?
docker启动时,打出的相关信息就有该ip:
使用$ docker-machine ip default
这样在浏览器输入
上面使用-p指定了端口的映射,也可以使用-P大写的P,随机给docker制定一个端口的映射
随机的制定了主机的32768和docker容器的80端口进行映射
6、接下来,我们讲解如何制作自己的镜像,然后将镜像上传到对应的镜像端口
我们使用开源的jpress来制作我们的docker镜像
链接: https://pan.baidu.com/s/1DHKY5xBbcNPltJ3VZiBz8g 提取码: im4m 若链接失效,请联系海哥获取,海哥微信号:wx198819880
我们把jpress-v2.0.5.war下载完成之后复制到目录下
要运行war包需要tomcat的镜像
docker pull hub.c.163.com/library/tomcat:latest
接下来我们要制作镜像文件
vi Dockerfile
告诉docker我要制作一个镜像,这个镜像以Tomcat这个镜像为基础进行制作
COPY jpress-v2.0.5.war /usr/local/tomcat/webapps表示将当前目录下的jpress-v2.0.5.war复制到tomcat启动的webapps目录下
Dockfile的内容如下
from hub.c..com/library/tomcat
COPY jpress-v2.0.5.war /usr/local/tomcat/webapps
接下来我们就可以docker buidl来构建
使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 .
docker build -t jdk_8u191:20190307 . -f jdk_dockerfile
参数解释:
-t :指定创建的镜像的名称和tag,如-t jdk_8u191:20190307
. 注意有一个.这个表示当前目录,必不可少的
-f : 指定要执行的dockerfile文件,如果文件名直接叫dockerfile,那么就不用-f参数了
我在这里执行
一致卡住,没有任何反应,定为了半天原理在于当前的
如果你很不幸地发现需要花很长时间,那么你可能是把当前文件夹里的文件都上传给 Docker Engine 了。于是赶紧取消掉,创建一个空的文件夹,把 Dockerfile 扔进来,再 build 一次吧。
漫长的等待后,镜像就生成好了。当前的Dockerfile在C:\Users\Administrator目录下,这个目录下存在30G的大小文件,将30G文件都上传到 Docker Engine,就卡了
我们在C:\Users\Administrator目录下新建立一个11的文件夹,在改文件夹下面建立dockfile文件
我们打开Docker Quickstart Terminal,进入到11目录,执行docker build命令
$ docker build -t jpress:latest .
这里镜像就创建成功了,使用docker images可以看到我们创建的jpress镜像
接下来我们运行我们创建的镜像
5.使用docker安装mysql数据库
$ docker pull hub.c.163.com/library/mysql:latest
启动mysql:$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 hub.c.163.com/library/mysql
端口映射为3306:3306
-e指定docker运行的参数指定mysql root用户的密码为123456
后面是mysq的tag
为
我们也可以在参数中指定mysql的的数据库,创建一个数据库
$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=mydata hub.c.163.com/library/mysql
创建一个mydata的数据库
我们本地
对于没有私有仓库来说,将本地镜像放到其它服务器上执行时,我们可以使用save和load方法,前者用来把镜像保存一个tar文件,后台从一个tar文件恢复成一个镜像,这个功能对于我们开发者来说还是很方便的!下面我们就带大家来实现上面的过程.
docker save : 将指定镜像保存成 tar 归档文件。
-o :输出到的文件。
在外测服务器上,去load你的tar文件,把这恢复到docker列表里
然后使用docker images就可以看到自己加载的新的镜像了.
慕课网--docker走进第一个javaweb应用的更多相关文章
- newbee-mall开源项目被慕课网拿去做课程,然后我毫不知情,这又是什么骚操作?
万万没想到,这种事情会发生在我身上. 之前写过<开源囧事>系列而且已经写了四篇,四次开源囧事如下: <开源囧事(一)捅娄子了,写个bug被国家信息安全漏洞共享平台抓到了?> & ...
- 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用
来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...
- 使用js脚本批量下载慕课网视频
慕课网(http://www.imooc.com/)上有很多不错的视频,当然我不是来给慕课网打广告的,我本人学习过很多慕课网上的免费的视频. 在线看如果网速慢时,可能会有卡顿,没网时无法观看.所有说下 ...
- 安卓开发_慕课网_Fragment实现Tab(App主界面)
学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...
- 安卓开发_慕课网_ViewPager实现Tab(App主界面)
学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...
- 慕课网-安卓工程师初养成-4-9 Java循环语句之 for
来源:http://www.imooc.com/code/1425 Java 的循环结构中除了 while 和 do...while 外,还有 for 循环,三种循环可以相互替换. 语法: 执行过程: ...
- 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while
do...while 循环与 while 循环语法有些类似,但执行过程差别比较大. 语法: 执行过程: <1>. 先执行一遍循环操作,然后判断循环条件是否成立 <2>. 如果 ...
- 慕课网-安卓工程师初养成-4-7 Java循环语句之 while
来源: http://www.imooc.com/code/1420 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 ...
- react入门——慕课网笔记
一. jsx 1. 被称为语法糖:糖衣语法,计算机语言中添加的某种语法,对语言的功能没有影响,更方便程序员使用,增加程序的可读性,降低出错的可能性 类似的还有(coffeescript,typescr ...
随机推荐
- MVC案例之新增与修改Customer
新增Customer 添加的流程Add New Customer 超链接连接到 newcustomer.jsp新建 newcustomer.jsp: 在 CustomerServlet 的 addCu ...
- Spring Cloud 学习笔记一
一.spring cloud 搭建注册中心(Eureka server) 1.spring cloud中提供了多种分步式服务组件,其都依赖于注册中心(eureka),注册中心的服务者与发现者都通过Eu ...
- vue-cli4 + TS构建新项目
1. 如果你之前没有安装vue-cli,可以通过如下命令进行安装: npm install -g @vue/cli yarn global add @vue/cli 2. 创建vue项目 vue cr ...
- wavenet重要概念
带洞因果卷积 https://img-blog.csdn.net/20181021210509222?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dl ...
- (二)用less+gulp+requireJs 搭建项目(gulp)
gulp是自动化构建工具,基于node,需要安装node,如果你不了解node也没关系,先跟着来一遍再去了解node也不迟~ 首先去node官网下载安装包 1.新建项目文件夹 在目录下shift+右键 ...
- Java实现蓝桥杯第十一届校内模拟赛
有不对的地方欢迎大佬们进行评论(ง •_•)ง 多交流才能进步,互相学习,互相进步 蓝桥杯交流群:99979568 欢迎加入 o( ̄▽ ̄)ブ 有一道题我没写,感觉没有必要写上去就是给你多少MB然后求计 ...
- Java实现 蓝桥杯 算法提高 歌唱比赛
试题 算法提高 歌唱比赛 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X市正在进行歌唱比赛,请你写一个程序计算得分. 每名选手从1到N编号,每名选手的综合成绩由以下几个部分组成: ...
- java实现第五届蓝桥杯圆周率
圆周率 数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事.其中许多方法都涉及无穷级数. 图1.png中所示,就是一种用连分数的形式表示的圆周率求法. 下面的程序实现了该求解方法.实际上数列的收 ...
- 算法讲堂二:组合数学 & 概率期望DP
组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...
- dfs算法总结
DFS 深度优先搜索 主要有两种实现方法:栈和递归 什么是DFS?说白了就是一直遍历元素的方式而已,我们可以把它看成是一条小蛇,在每个分叉路口随意选择一条路线走,直到撞到南墙,才会调头返回到上一个分叉 ...