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. 【CTFHUB】Web技能树

    Web HTTP协议 请求方式

  2. RabbitMQ--其他几种模式

    本文是作者原创,版权归作者所有.若要转载,请注明出处. 本文RabbitMQ版本为rabbitmq-server-3.7.17,erlang为erlang-22.0.7.请各位去官网查看版本匹配和下载 ...

  3. 一篇文章看清楚 Linux 的职业发展方向

    手机.汽车.甚至宇宙飞船,在今天的科技世界中,你几乎到处都能看到 Linux 的身影.前两天 SpaceX 成功将宇航员送入太空的猎鹰9号火箭与龙飞船用的也是 Linux的操作系统.身处与 Linux ...

  4. ASP.NET Core 依赖注入最佳实践与技巧

    ASP.NET Core 依赖注入最佳实践与技巧 原文地址:https://medium.com/volosoft/asp-net-core-dependency-injection-best-pra ...

  5. Beta冲刺 —— 6.1

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.讨论并解决每个人存在的问 ...

  6. 学Linux驱动: 应该先了解驱动模型

    [导读] Linux设备林林总总,嵌入式开发一个绕不开的话题就是设备驱动开发,在做具体设备驱动开发之前,有必要对Linux设驱动模型有一个相对清晰的认识,将会帮助驱动开发,明白具体驱动接口操作符相应都 ...

  7. Java实现 蓝桥杯VIP 算法训练 完数

    问题描述 一个数如果恰好等于它的因子之和,这个数就称为"完数".例如,6的因子为1.2.3,而6=1+2+3,因此6就是"完数".又如,28的因子为1.2.4. ...

  8. Java实现 LeetCode 290 单词规律

    290. 单词规律 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非 ...

  9. java中Calender类的详细用法(详解)

    一. 如何创建 Calendar 对象 Calendar 是一个抽象类, 无法通过直接实例化得到对象. 因此, Calendar 提供了一个方法 getInstance,来获得一个Calendar对象 ...

  10. Java实现 LeetCode 50 Pow(x,n)

    50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, ...