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应用的更多相关文章

  1. newbee-mall开源项目被慕课网拿去做课程,然后我毫不知情,这又是什么骚操作?

    万万没想到,这种事情会发生在我身上. 之前写过<开源囧事>系列而且已经写了四篇,四次开源囧事如下: <开源囧事(一)捅娄子了,写个bug被国家信息安全漏洞共享平台抓到了?> & ...

  2. 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用

    来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...

  3. 使用js脚本批量下载慕课网视频

    慕课网(http://www.imooc.com/)上有很多不错的视频,当然我不是来给慕课网打广告的,我本人学习过很多慕课网上的免费的视频. 在线看如果网速慢时,可能会有卡顿,没网时无法观看.所有说下 ...

  4. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  5. 安卓开发_慕课网_ViewPager实现Tab(App主界面)

    学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...

  6. 慕课网-安卓工程师初养成-4-9 Java循环语句之 for

    来源:http://www.imooc.com/code/1425 Java 的循环结构中除了 while 和 do...while 外,还有 for 循环,三种循环可以相互替换. 语法: 执行过程: ...

  7. 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while

    do...while 循环与 while 循环语法有些类似,但执行过程差别比较大. 语法:  执行过程: <1>. 先执行一遍循环操作,然后判断循环条件是否成立 <2>. 如果 ...

  8. 慕课网-安卓工程师初养成-4-7 Java循环语句之 while

    来源: http://www.imooc.com/code/1420 生活中,有些时候为了完成任务,需要重复的进行某些动作.如参加 10000 米长跑,需要绕 400 米的赛道反复的跑 25 圈.在 ...

  9. react入门——慕课网笔记

    一. jsx 1. 被称为语法糖:糖衣语法,计算机语言中添加的某种语法,对语言的功能没有影响,更方便程序员使用,增加程序的可读性,降低出错的可能性 类似的还有(coffeescript,typescr ...

随机推荐

  1. java方式实现选择排序

    一.基本思想 每一趟找到未排序序列的最小(大)值,把它存放在已排序序列末尾,直到把所有的数据排序完,即是第k趟找到剩余未排序数据的最小(大)值,然后把这个最小(大)值存放在数组的第k(k=1,2... ...

  2. Rocket - tilelink - Nodes

    https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp ...

  3. jchdl进展 - 20180918

    这几天看了下SystemC,发现与jchdl相似的地方,或者jchdl与之相似的地方. 但总体而言: 1. jchdl的模型更简单,更清晰: 2. jchdl还有一些建模需要的工具需要补充,比如: i ...

  4. ActiveMQ 笔记(七)ActiveMQ的多节点集群

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Activemq 的集群思想 1.使用Activemq集群的原因 面试题: 引入消息中间件后如何保证 ...

  5. Redis 入门到分布式 (二)API的理解和使用

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 内容: 通用命令 单线程架构 数据结构和内部编码 一.常用的通用命令: keys       计算所有的 ...

  6. Java实现 LeetCode 703 数据流中的第K大元素(先序队列)

    703. 数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组n ...

  7. java实现洛谷P1308统计单词数

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...

  8. Java实现第九届蓝桥杯等腰三角形

    等腰三角形 题目描述 本题目要求你在控制台输出一个由数字组成的等腰三角形. 具体的步骤是: 1. 先用1,2,3,...的自然数拼一个足够长的串 2. 用这个串填充三角形的三条边.从上方顶点开始,逆时 ...

  9. java实现第三届蓝桥杯火柴游戏

    火柴游戏 [编程题](满分34分) 这是一个纵横火柴棒游戏.如图[1.jpg],在3x4的格子中,游戏的双方轮流放置火柴棒.其规则是: 不能放置在已经放置火柴棒的地方(即只能在空格中放置). 火柴棒的 ...

  10. Java实现第九届蓝桥杯复数幂

    复数幂 题目描述 设i为虚数单位.对于任意正整数n,(2+3i)^n 的实部和虚部都是整数. 求 (2+3i)^123456 等于多少? 即(2+3i)的123456次幂,这个数字很大,要求精确表示. ...