Docker学习笔记(一)Docker初体验

Docker学习笔记(一)Docker初体验

什么是Docker

Docker是一个虚拟环境容器,可以将开发环境、代码、配置文件等一并打包到这个容器中,并发布应用到任意平台中

Docker的安装

在Doker的官方网站 点击Download from Docker Store,在docker store中点击GetDocker即可下载mac的dmg文件



下载完成后,正常安装运行

错误

打开Docer发现如下错误


Docker does not rely on VirtualBox but may not work properly on systems with VirtualBox v4.3.28 is currently installed.
Please upgrade or uninstall VirtualBox

大致的意思就是说 虽然Docker不依赖于VirtualBox,但是在VirtualBox版本太低的电脑上无法运行,可以选择写在VirtualBox或者更新VirtualBox,尝试卸载ViertualBox后问题依旧,最后在VirtualBox官网更新了最新版本的VirtualBox之后 问题解决,打开Docker,Docker正常运行


安装完成后,可以使用 docker version 来查看版本信息

安装完成后,再注册一个Docker的账号

第一个docker镜像

基本命令

docker pull [options] name[:tag]

  • 该命令会从docker的远程仓库拉取docker的镜像
  • name : 表示镜像的名称
  • tag : 表示镜像的版本,如果不填写,默认是最新版本的docker

docker images [options][repository[:tag]]

  • 该命令会查看本机都有哪些镜像,可以用来验证pull是否成功
  • repository : 指定镜像名称
  • tag : 版本

docker仓库(Repository)

官方仓库,该仓库是官方仓库,但是访问速度比较慢
网易蜂巢镜像中心,需要登录后访问该网址
docker也支持自己搭建镜像仓库

HelloWord

下载

输入命令,该命令会从官方仓库去下载镜像

docker pull hello-world

运行

命令:
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

  • IMAGE : 镜像的名字
  • options : -d 在后台运行
doker ps

可查看当前机器上所启动的镜像

docker exec # 进入容器内部
exit #退出

执行

docker run hello-world

docker 网络

下载nginx

  1. 下载Nginx镜像 : hub.c.163.com/library/nginx
  2. 在后台运行镜像
  3. 使用docker run -d hub.c.163.com/library/nginx来在后台启动nginx镜像,会返回容器的ID
  4. 进入容器内部 docker exec -it 容器id bash
    -i : 可以保证输入有效
    -t : 容器会分配给我们一个终端
    容器id 可以只写前几个字母

docker网络

Docker网络类型

docker中有3中网络类型

  • Bridge : docker中每一个容器默认都是独立的网络,默认选项
  • Host : 和主机使用同一个网络
  • None : 没有网络

端口映射

在容器中的端口和主机中的端口建立一个映射
使用命令

docker run -d -p 8080:80 hub.c.163.com/library/nginx

来启动容器,-p的参数表示主机的8080端口映射到容器的80端口,访问主机的8080端口即可放完到nginx了


Docker中关于镜像的基本操作

利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本

下载centos镜像并启动,进入容器

docker pull hub.c.163.com/library/centos:latest
docker run -it hub.c.163.com/library/centos
root@307bb1848b9e:/# git --version
bash: git: command not found

发现没有安装git,使用yum命令安装git,安装完成后再检查git命令:

执行commit操作将容器转换为一个镜像

docker commit -m "centos with git" -a "cfy" 307bb1848b9e cfy/centos:git

其中, -m指定说明信息;-a 指定用户信息307bb1848b9e为容器的id;使用docker ps -a命令查询得到;cfy/centos:git指定目标镜像的用户名,仓库名和tag信息
操作完成后使用docker images查看:


此时我们在进入该docker,检查git

~ docker run -it cfy/centos:git bash
[root@f952d74b63af /]# git --version
git version 1.8.3.1

制作自己的镜像

  • Dockerfile : 告诉docker如何制作镜像,每一个步骤是什么
  • docker build : 根据Dockerfile来制作镜像
  • JPress : 一个开源的Java博客平台(jpress.io)

创建DockerFile

说明

Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作,一个建议的Dockerfile文件如下所示

# 说明该镜像以哪个镜像为基础
FROM centos:latest

# 构建者的基本信息
MAINTAINER cfy

# 在build这个镜像时执行的操作
RUN yum update
RUN yum install -y git

# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/
创建Tomcat的镜像

首先下载tomcat的镜像

docker pull hub.c.163.com/library/tomcat:latest

编写镜像的Dockerfile

form hub.c.163.com/library/tomcat

MAINTAINER liuguoguo 734481463@qq.com

# 将本地的war包拷贝到tomcat的目录中
COPY jpress.war /usr/local/tomcat/webapps

使用build命令来构建镜像

docker build -t jpress:latest .

-t表示来为镜像起一个名字和标签,最后的点表示在当前目录寻找Dockerfile文件,这里要注意该命令会默认将Dockerfill所在目录下的所有文件发送到Daemon,这就会导致内容非常多,尽量使用空目录来存放dockerfile和所需要的资源文件

运行自己的TomCat

启动容器

docker run -d -p 8888:8080 jpress

在浏览器输入 http://localhost:8888/jpress/ 出现如下信息:


证明我们的tomcat运行成功了,可以看到jpress需要一个mysql数据库,来下载一个mysql的容器

docker pull hub.c.163.com/library/mysql:latest

在页面中可以找到mysql的使用命令,-e为docker的命令,表示要输入一个环境变量,参数为键值对,可以指定数据库的密码,接着运行mysql

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=A_000000 -e MYSQL_DATABASE=jpress  hub.c.163.com/library/mysql:latest

将mysql映射到3307端口,并设定MYSQL的密码为A_000000,数据库名为jpress,这样mysql就能成功运行了,检查一下3307端口是否正常监听:

netstat -na|grep 3307

可以看到3307端口已经开启监听了

配置JPress

数据库名和用户名密码填写mysql的设置用户名及密码,而数据库的主机不能填写localhost,因为tomcat在容器内部如果填写localhost则代表是容器自己,需要填写我们电脑的ip地址,端口号则填写我们做映射的端口号,点击下一步



设置网站的用户名和密码,下一步



jPress告诉我们需要重启web服务器
docker restart 4b0e395d1cbc # 输入id重启容器,该命令不会改变容器的id

再看一下网站



发现我们的网站已经起来了

容器连接

在测试之前可以使用docker stop 容器ID指令来将之前的容器停止,而容器停止之后,之前设置的东西就全部会小时
使用主机ip进行转发的这种连接tomcat和mysql方式显然不好,如果我们的主机ip地址发生了变化,那么配置就会失效,而docker允许容器之间课件并安全的创建连接,首先我们创建数据库容器

docker run -d --name db -p 3307:3306 -e MYSQL_ROOT_PASSWORD=A_000000 -e MYSQL_DATABASE=jpress  hub.c.163.com/library/mysql:latest

与之前不同的是,我们使用--name指令,为数据库容器起了一个名字叫db



可以看到数据库容器已经有了一个名字叫db,然后运行tomcat容器

docker run -d -p 8888:8080 --name jpress --link db:db jpress

同样的将tomcat容器映射到8888端口,然后为容器起一个名字叫jpress,并通过--link指令来连接容器,link指令:

--link name:alias 

name是我们连接容器的名字,alias是连接的别名,



回到我们jpress的设置页面,其他项都不变,注意数据库主机这里填写我们连接的别名,即可连接到数据库

总结

Docker思想

想要把程序部署到另外一台计算机中,把所有的相关程序利用docker打包,这里面包含了程序所有的开发环境,可以做到开发环境与生产环境的同一,并标准化的运输,其实Docker与虚拟机差不多,但是Docker要比虚拟机小快很多,例如启动一个虚拟机可能需要几分钟,但是启动一个docker只需要几秒

Docker的三个基本概念

1. 镜像(Image)

类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像

2. 容器(Container)

类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。而容器可以理解为一个操作系统的进程

3. 仓库(Repository)

类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,417评论 15 147
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,404评论 0 120
  • 0x01 核心概念 Docker镜像类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统...
    闲云逸心阅读 4,601评论 0 9
  • 0. 前言 docker是什么?docker是用GO语言开发的应用容器引擎,基于容器化,沙箱机制的应用部署技术。可...
    sessionboy阅读 3,794评论 2 49
  • 《消失的你》/杏子 气温零下几度,依旧有我不知名的鸟雀在枝头上乱跳,偶有车子开过,猛地跃出...
    一种缺陷ing阅读 1,001评论 6 5