美文网首页
docker_笔记

docker_笔记

作者: bboymonk | 来源:发表于2017-03-09 11:11 被阅读0次

先说说什么是镜像(image),什么是容器吧?

这两者有点像《奇异博士》里的那个镜像。镜像就是虚拟出来的世界, 那么我们如何进入到镜像里呢?电影里法师会念咒语,启动程序,才能进入镜像。docker也是一样,启动image,我们就能进去了,进去后的镜像世界就称为容器。

简单点说,没启动的是镜像,启动的是容器。

docker是一种容器打包技术,和虚拟机有点类似,区别不同的是:

1,虚拟机虚拟的是整个计算机,包括CPU,内存等等。而docker虚拟的是操作系统的内核,(可以理解成:它能让你在虚拟的操作系统上自由玩耍,和真的操作系统一样)。
2,docker不只虚拟一个,它可以虚拟N多个,数字很吓人,而且N多
个之间互不干>扰,它们之间具有进程级别的隔离,且享受底层资源。

那么,docker怎么玩呢?

1,很简单,首先要先安装docker(我这里是在centos下安装的),因为我用了阿里88的yum源,所以一个命令就搞定yum install docker
2,安装成功后,需要一个基本image,你才能启动起来玩,所以这一步需要下载一个基本image。可以在dockerHub下找一个官方的pull下来,我的基本image是centOs。也可以通过命令docker search (你要找的image)。
3,看了很多资料,有两种方法:1,通过dockerfile来构建 2,通过commit 方式来构建。本人用的是第2种方法。这里贴下步骤吧:

我的基本image是docker.io/centos。有了image,我就可以启动它,并且进入到容器里去玩耍。
docker run -i -t -v /web/:/web/ 67591570dd29 /bin/bash(这是启动命令)

其中,相关参数包括:

-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的/web/目录下,现在需要将其挂载到容器的/web/目录下。
需要说明的是,不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,例如:docker.io/centos:latest
初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可。
4,此时就进入容器内部了,进去后命令头就是这样的 [root@fcd41e085baf /]#
在容器里,你想怎么疯都可以,就像电影里一样,玩疯了都影响不到外面的世界,大不了把这个容器Kill掉。

想在容器里搭建一个开发环境怎么办?刚才启动image时我把主机里/web下的所有内容(jdk,tomcat)都挂载到容器的/web下了。(有人会问,你怎么知道容器里有个web目录呢)

简单分析一下:我启动的image是centos,那么它的目录结构和centos是一样的,命令操作方式也是一样的。当然centos根目录下是没有web目录的,挂载到容器时自动生成的。
5,这个时候,容器里就有了jdk,tomcat了(都是以压缩包的形式传送的),解压配置环境变量:

设置环境变量

首先,编辑.bashrc文件
vi ~/.bashrc
然后,在该文件末尾添加如下配置:
export JAVA_HOME-/jdk
export PATH=$PATH:$JAVA_HOME
最后,需要使用source命令,让环境变量生效:
source ~/.bashrc
编写运行脚本
我们需要编写一个运行脚本,当启动容器时,运行该脚本,启动 Tomcat,具体过程如下:
首先,创建运行脚本:vi /root/run.sh
然后,编辑脚本内容如下:
!/bin/bash
source ~/.bashrc
sh /tomcat/bin/catalina.sh run
注意:这里必须先加载环境变量,然后使用 Tomcat 的运行脚本来启动 Tomcat 服务。
最后,为运行脚本添加执行权限:chmod u+x /root/run.sh
6,exit退出容器,这时就从虚拟世界出来了。可以通过docker ps -a查看容器

7,到了这一步,就可以通过容器(带有JDK,tomcat的)来构建一个新的image,有人问,为什么要再构建一个image呢?没有JDK,tomcat,你的应用程序能在容器里自由的玩耍吗?
docker commit 9169b9b235e2 wjb/javaweb:0.1 这个命令可以把刚才带有JDK,tomcat的容器构建成一个新的image。
9169b9b235e2 是刚才那个容器的ID,wjb/javaweb:0.1是我给这个新的image起的名字。
8,可以通过docker images查看你拥有的所有镜像,没出错的话,应该能看到刚才新构建的image了。
与上次启动容器不同的是,我们现在不再进入容器的命令行,而是直接启动容器内部的 Tomcat 服务。这里有另一种方式:
docker run -d -p 8090:8080 --name javaweb wjb/javaweb:0.1 /root/run.sh

稍作解释:

-d:表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p:表示宿主机与容器的端口映射,此时将容器内部的 8080 端口映射为宿主机的 8090 端口,这样就向外界暴露了 8090端口,可通过 Docker 网桥来访问容器内部的 8080 端口了。
--name:表示容器名称,用一个有意义的名称命名即可。
关于 Docker 网桥的内容,需要补充说明一下。实际上 Docker 在宿主机与容器之间,搭建了一座网络通信的桥梁,我们可通过宿主机 IP 地址与端口号来映射容器内部的 IP 地址与端口号,
在一系列参数后面的是“镜像名”或“镜像 ID”,怎么方便就怎么来。最后是“初始命令”,它是上面编写的运行脚本,里面封装了加载环境变量并启动 Tomcat 服务的命令。
当运行以上命令后,会立即输出一长串“容器 ID”,我们可通过docker ps命令来查看当前正在运行的容器。
9,此时新的镜像启动了,并且启动了容器内部的tomcat命令,可以在宿主机输入http://localhost:8090访问,没错的话,应该是tomcat首页。

再介绍点基本命令:

1,docker stop 你要停止的容器ID
2,docker start 你要启动的容器ID
3,直接进入容器的命令 docker exec -t -i 你的容器ID /bin/bash
4, 删除容器 docker rmi 你的容器ID
5,停止所有的容器,才能对image进行删除操作。docker stop $(docker ps -a -q)

相关文章

  • Docker_学习笔记

    目录 [toc] 01 什么是云计算? 云计算是一种按量付费的模式,它的底层主要通过虚拟化来实现。 云计算的服务类...

  • Archlinux安装docker

    https://wiki.archlinux.org/index.php/Docker_(%E6%AD%A3%E9...

  • Docker_入门

    可以认为容器可以认为是虚拟机运行后的系统,那么也就是说进入容器之后,就当是在另一个ubuntu系统中进行操作。 可...

  • Docker+Jmeter+Gitlab+Jenkins+Ant

    本文执行步骤来自文章Docker_容器化gitlab - 飞天小子 - 博客园 感谢作者分享 下面是我自己搭建的完...

  • Docker Compose 撰写CLI环境变量

    撰写CLI环境变量 有几个环境变量可供您配置Docker Compose命令行行为。 DOCKER_ 开头的变量与...

  • 06 Docker_安装

    从章开始重点是讲实践了,如果理论还有不理解的。可以去看前面的4章。 或者去官网Dockerg官网 Docker从1...

  • docker_增量部署

    由于自己使用的是gradle构建镜像一直很缓慢,意识开始怀疑自己有没有使用增量修改镜像。可以在本地使用docker...

  • Docker_安装mysql

    安装docker并使用docker安装mysql[https://www.cnblogs.com/jiefu/p/...

  • 08 Docker_镜像命令

    1.列出本地镜像 REPOSITORY REPOSITORY:仓库,一类仓库,比如centos和ubanto。RE...

  • 09 Docker_容器命令

    容器命令 docker run 启动一个容器,默认从镜像仓库里启动 docker start启动一个已经停止的容器...

网友评论

      本文标题:docker_笔记

      本文链接:https://www.haomeiwen.com/subject/ymengttx.html