zoukankan      html  css  js  c++  java
  • 慕课网--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:Usersadmin.dockermachinecache)下,导致无法解决问题。

    下载最新的版的boot2docker.iso镜像, 官方下载地址:https://github.com/boot2docker/boot2docker/releases
    拷贝到本地缓存目录(C:Usersadmin.dockermachinecache)下,
    并拷贝到本地的安装目录(C:Program FilesDocker 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.163.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:UsersAdministrator目录下,这个目录下存在30G的大小文件,将30G文件都上传到 Docker Engine,就卡了

    我们在C:UsersAdministrator目录下新建立一个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就可以看到自己加载的新的镜像了.

  • 相关阅读:
    技术实践 | 聊聊网易云信的信令网络库实践
    打破传统降噪技术 看网易云信在语音降噪的实践应用
    聊聊前端日志库在 SaaS 产品中的应用与设计
    WebRTC 系列之音频会话管理
    简单五步,轻松构建本土「Clubhouse」
    网易云信服务监控平台实践
    基于 Elasticsearch 的数据报表方案
    基于 WebRTC 实现自定义编码分辨率发送
    Python 设计模式—原型模式
    网络层—简单的面试问题
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/11223140.html
Copyright © 2011-2022 走看看