Docker入门


title: Docker教程


Build,Ship & Run anywhere

Origin

早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如Google,对他们来说,使用容器能够充分利用计算资源节省硬件成本,而这几年,真正把容器技术发扬光大的是Docker。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

Docker的slogan“Build,Ship & Run anywhere”定位非常清晰,Docker的出现打破了传统运维模式里从打包到部署的过程中环境、语言、平台不一致的乱象,将这一整套开发运维模式标准化了,从而真正帮助企业实践了DevOps和微服务化。

但是,国内的大型企业面临技术转型的的时候,历史包袱太沉重,对Docker的接受和部署非常缓慢。同样地,多数的中小型企业也并未把Docker作为生产环境上部署和管理服务的标配,而选择继续使用传统的运维方案。

造成这种现象的原因是什么呢?可能原因之一是企业从业人员对Docker的学习认知并不够。之二是目前市面上Docker的容器编排系统很多,常见的就有K8s、Mesos、Swarm、Rancher、Newben,编排系统的学习和认知成本也进一步提升了企业应用Docker的难度

本文作者同大家一起开始步入docker的镜像世界,一步一步,深入docker,从入门到精通,从使用到理解掌握

quick-start

  1. 安装Docker
  2. 使用Docker

安装

Mac

Docker基本安装

mac安装了homebrew的话

直接brew cask install docker(我的没有成功,就去官网下载了)

官网下载需要登录帐号 下载的是ce版本

安装完后

启动终端后,通过命令可以是否安装成功

docker info

以及查看docker版本

docker --version

Docker中配置国内镜像

在正常情况下,docker有一个默认连接的国外官方镜像,在国外的网友访问该官方镜像自然不成问题,但是国内毕竟不是国外,由于国情不同,中国的网络访问国外官方镜像网速一向很慢,而且往往还会遭遇断网的窘境,所以说我们要想正常使用docker的镜像,那么我们就不得不配置相应的国内镜像。

Docker可以配置的国内镜像有很多可供选择,比如说:阿里云,网易蜂巢,DaoCloud,Docker中国区官方镜像等,这些都是可以提供给大家随意选择的不错的镜像仓库。

在任务栏点击
Docker for mac 应用图标(右上方) -> Perferences... -> Daemon -> Registry mirrors

在列表中填写加速器地址即可。用的是网易的http://hub-mirror.c.163.com 修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。

RedHat

Docker基本安装

使用yum包管理工具安装

yum install -y docker

启动docker服务

systemctl start docker

查看是否安装成功

docker --version

Docker中配置国内镜像

使用vi修改 /etc/docker/daemon.json 文件

{ 
"registry-mirrors": ["http://hub-mirror.c.163.com"] 
}

配置完之后执行下面的命令,以使docker的配置文件生效

systemctl daemon-reload 
systemctl restart docker

docker info可以查看到修改过的配置

Registry Mirrors:
 http://hub-mirror.c.163.com

Win10

Docker基本安装

Docker中配置国内镜像

使用

构建基本环境

安装成功之后,打开终端

确定你想要的操作系统,如果是centos

docker search centos

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

centos The official build of CentOS. 4773 [OK]

复制这个名字centos

docker seach会在dockerhub,dockerhub(dockerhub类似于github,github大部分用于提交同步代码,dockerhub用于镜像同步与存储)中寻找name和docker search str的这个str相接近的字符串

镜像:这里可以理解为一个压缩包,这有助于理解

然后我们将这个远程库中的镜像下拉到本地,在前期,你可以将镜像理解为一个压缩包,这里,就是centos系统的压缩包

docker pull centos

即可获取到最新的centos版本的镜像

如果需要指明版本

docker pull centos:版本号

即可获取到相应版本

docker image ls

命令简化:docker images

查看可以使用的所有image的列表

REPOSITORY TAG IMAGE ID CREATED SIZE

centos latest 5182e96772bf 8 weeks ago 200MB

可以看到我们刚刚pull下来的镜像

TAG表示的版本号,latest表示是最新版,IMAGE ID唯一确定这个镜像,以后都是用这个序列号表示这个镜像

CREATED表示这个镜像是什么时候被创建出来的

SIZE表示这个镜像的大小

接下来我们需要'解压'这个镜像

docker run -it --name mycentos centos /bin/bash

解释:

Docker run 命令用来创建一个新的容器并运行,相当于 docker create和docker start的组合。

用 docker run --help可以显示命令的使用说明。

-i, --interactive Keep STDIN open even if not attached(如果没有打开交互界面,则打开)

-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false

带着-it参数会打开一个命令行窗口,退出这个窗口就相当于是'关机',不过还可以通过docker start的方式'开机',这也就是docker的前台运行方式,后台运行之后会提到

既然我们要解压这个镜像,就一定得知道这个镜像('压缩包')是谁,centos参数就可以唯一的确定这个'压缩包',可以唯一标识的只有name:tag或者id,如果像这样只写了name,没有注明tag,一律表示最新版latest,而这里我们正好是latest

--name mycentos --name参数后跟我们解压后的东西的名字mycentos是名字,这样mycentos就能唯一的确定这个解压后的东西,实际上我们之前说了,'压缩包'里压缩的就是一个centos操作系统,所以解压后的东西就是一个centos操作系统

/bin/bash

这是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器就会退出。

这个就表示启动容器后启动bash。

好的,介绍完了,让我们实际操作试试看

再次确认我们上一步push下来的image

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE

centos latest 5182e96772bf 2 months ago 200MB

docker run -it --name mycentos centos /bin/bash

如果运行成功,就会变成这样

zyfselton@MacBook-Pro-6:docker run -it --name mycentos centos /bin/bash
[root@9f733e598d67 /]#

这就表示我们已经成功的创建并启动和进入了这个centos操作系统

9f733e598d67这个比我们给这个系统起得名字更能唯一标识,但是不容易记忆,需要每次自己查看

保存自己的环境

然后我们新建一个文件夹

mkdir myapp
cd myapp
mkdir work1

这里的新建文件夹是简单工作,主要是表示我们在这个系统里面做了一些事,我们需要测试我们做的这个事(这里是新建文件夹)能不能被保存到'压缩包'中去,当然你可以在里面安装环境,写笔记,运行程序等等,但是某些需要暴露端口给外部使用的这种服务的安装,后面会详细介绍

然后我们关闭这个窗口,或者输入exit也可以退出这个窗口

也就相当于关闭了刚才的操作系统

那我们的修改,或者说是工作内容会被清除吗

doker ps

会显示所有正在运行的os(Operation System操作系统)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

发现没有

docker ps -a

会显示所有os(不管有没有在启动着)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

9f733e598d67 centos "/bin/bash" 9 minutes ago Exited (0) 2 minutes ago

发现这个id 9f733e598d67和我们之前启动os的id一样,恩,也算是确认过眼神了

这个时候我们要启动它

输入docker start后接 CONTAINER ID就会启动那个os

docker start 9f733e598d67

此时docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

9f733e598d67 centos "/bin/bash" 45 minutes ago Up 30 minutes mycentos

就会发现我们的系统启动了

可是我们还没有进入到这个系统

进入系统

docker exec -it 9f733e598d67 /bin/bash
[root@9f733e598d67 /]#

这里的-it和/bin/bash和之前docker run的那个代表的意思类似

cd myapp
cd work1

进入容器后的目录为workdir,默认workdir为自己的home(~)下,我们创建的时候在home下,所以地址是没有问题的

发现我们之前的工作内容都在

这个时候即便exit或者关闭窗口,之后再次进入安装docker环境的机器(就是宿主机,比如我的就是mac环境)的窗口时,我们docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

9f733e598d67 centos "/bin/bash" 4 hours ago Up About an hour mycentos

然后我们可以将这个带有工作内容的os'压缩'成镜像,这样相当于有了一个压缩包,每次我们解压这个压缩包都会的到一个相应内容的os

docker commit 9f733e598d67 selton/mycentos:1

记得这儿的selton/mycentos:1可以标识这个由9f733e598d67压缩包解压后得到的完整的os

/之前的selton一定要是你的用户名,就是你去docker官网注册的帐号的用户名,没有注册一定要注册一个,不然之后我们无法将压缩包像git提交代码到仓库一样提交我们的压缩包到我们的库

docker image ls就会发现一个新的压缩包

REPOSITORY TAG IMAGE ID CREATED SIZE

selton/mycentos 1 81bc6c9c1684 5 seconds ago 200MB

关闭掉刚才的容器

docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

9f733e598d67 centos "/bin/bash" 4 hours ago Up About an hour mycentos

docker stop 9f733e598d67

将新的压缩包解压,看看里面有没有我们的工作内容

docker run -it --name mycentos2 selton/mycentos:1 /bin/bash

--name后面的mycentos2是我们解压后的os的名字,selton/mycentos:1的selton/mycentos是name,1是tag,表示的是具体的某个压缩包

cd myapp
cd work1

发现工作内容都在,至此,我们就明白了docker的主要作用

那么,我们的压缩包是在本地机器上的(这里是mac),但是开发环境和测试环境一定是不一样的,我们如何做到将我们的压缩包让开发环境获取,这就和代码一样,记得我们起初是怎么获得centos的吗

没错,回头看你会发现这个命令docker pull,这和git pull不光长得像,作用也是类似的,用于从远程库中获取到我们的压缩包,不过git中需要先建立本地库和特定远程库的关系,但是我们的docker的镜像库的远程库只有一个,就是dockerhub库

将自己的环境提交到远程

官方下载docker是需要帐号的,此时我们已经有了帐号,如果没有,请前往官网注册一个帐号

docker login

会提示让输入用户名:selton

然后就是输入密码

登录需要大概十秒的时间

之后会显示Login Succeeded

如果需要退出,docker logout

Removing login credentials for https://index.docker.io/v1/

如果你和我一样使用了统一密码管理工具,请记得粘贴使用窗口上的编辑->paste,而不是cv

登录成功之后推送我们的镜像到自己的库中

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

myos/mycentos 1 81bc6c9c1684 19 hours ago 200MB

查看到了我们制作的镜像('压缩包')

登录docker官网就可以看到多了一个你提交的这个镜像(''压缩包'')

也就是现在只要有一台机器安装了docker,就可以得到这个镜像('压缩包'),里面除了一个现成的os还有我们可能安装部署完的环境

同步远程库环境到本地

先尝试一下本地下载远程的我们提交的镜像

先删除掉本地的

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

selton/mycentos 1 e732a1e5c865 About an hour ago 200MB

docker rmi e732a1e5c865

显示

Untagged: selton/mycentos:1

Untagged: selton/mycentos@sha256:8d264bbac07545d8933dcbab286bf343a52bf5a63426b5c4b9d944f4b9acc558

Deleted: sha256:e732a1e5c8652bbb8a48e2ffed6dee7c52df5dfc74f19b0c433b01f2a814417d

Deleted: sha256:3f45206b758eae4a3864432e0e0fda23991d3956a779d4831c1f95dcb4d7191b

docker images查看,ok

docker pull selton/mycentos:1

就在下载了

同步远程库环境到linux上(开发,测试,生产)

我用的是一台阿里云的云服务器,1核2g内存,40g硬盘,centos7

安装docker

yum install -y docker

ok

启动docker服务

systemctl start docker
docker --version

由于我们刚刚的库就和git的库道理一样,是公开的

无须登录

docker pull selton/mycentos:1

docker images可以查看到

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/selton/mycentos 1 e732a1e5c865 6 hours ago 200 MB

之后就和之前的操作一样了

我们再次重复一下以加深印象

现将这个image('压缩包')解压

docker run -it --name mycentos e732a1e5c865  /bin/bash 

ok,成功进入这个解压出来的container(os)中

cd myapp
cd work1

ok,至此完成docker的入门使用

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