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. MVC案例之新增与修改Customer

    新增Customer 添加的流程Add New Customer 超链接连接到 newcustomer.jsp新建 newcustomer.jsp: 在 CustomerServlet 的 addCu ...

  2. Spring Cloud 学习笔记一

    一.spring cloud 搭建注册中心(Eureka server) 1.spring cloud中提供了多种分步式服务组件,其都依赖于注册中心(eureka),注册中心的服务者与发现者都通过Eu ...

  3. vue-cli4 + TS构建新项目

    1. 如果你之前没有安装vue-cli,可以通过如下命令进行安装: npm install -g @vue/cli yarn global add @vue/cli 2. 创建vue项目 vue cr ...

  4. wavenet重要概念

    带洞因果卷积 https://img-blog.csdn.net/20181021210509222?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dl ...

  5. (二)用less+gulp+requireJs 搭建项目(gulp)

    gulp是自动化构建工具,基于node,需要安装node,如果你不了解node也没关系,先跟着来一遍再去了解node也不迟~ 首先去node官网下载安装包 1.新建项目文件夹 在目录下shift+右键 ...

  6. Java实现蓝桥杯第十一届校内模拟赛

    有不对的地方欢迎大佬们进行评论(ง •_•)ง 多交流才能进步,互相学习,互相进步 蓝桥杯交流群:99979568 欢迎加入 o( ̄▽ ̄)ブ 有一道题我没写,感觉没有必要写上去就是给你多少MB然后求计 ...

  7. Java实现 蓝桥杯 算法提高 歌唱比赛

    试题 算法提高 歌唱比赛 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X市正在进行歌唱比赛,请你写一个程序计算得分. 每名选手从1到N编号,每名选手的综合成绩由以下几个部分组成: ...

  8. java实现第五届蓝桥杯圆周率

    圆周率 数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事.其中许多方法都涉及无穷级数. 图1.png中所示,就是一种用连分数的形式表示的圆周率求法. 下面的程序实现了该求解方法.实际上数列的收 ...

  9. 算法讲堂二:组合数学 & 概率期望DP

    组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...

  10. dfs算法总结

    DFS 深度优先搜索 主要有两种实现方法:栈和递归 什么是DFS?说白了就是一直遍历元素的方式而已,我们可以把它看成是一条小蛇,在每个分叉路口随意选择一条路线走,直到撞到南墙,才会调头返回到上一个分叉 ...