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就可以看到自己加载的新的镜像了.

  • 相关阅读:
    Sum Root to Leaf Numbers 解答
    459. Repeated Substring Pattern
    71. Simplify Path
    89. Gray Code
    73. Set Matrix Zeroes
    297. Serialize and Deserialize Binary Tree
    449. Serialize and Deserialize BST
    451. Sort Characters By Frequency
    165. Compare Version Numbers
    447. Number of Boomerangs
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/11223140.html
Copyright © 2011-2022 走看看