ITPub博客

首页 > 云计算 > > Docker入门

Docker入门

作者:浪花小雨滴 时间:2020-05-09 11:42:00 0 删除 编辑
Build,Ship & Run anywhere

试想一下,如果有一天你换了一台新电脑,是不是新电脑里得重新安装很多很多东西?

docker可以做到,将你的以前的那个电脑的c盘d盘等等盘,压缩成一个压缩包,在新电脑上解压这个压缩包,这样新电脑就和以前的电脑,完全一样了,这个电脑上甚至垃圾箱,桌面,游戏什么的,都可以正常运行.

起源

Docker是世界领先的软件容器平台,想要搞懂Docker的概念我们须从容器开始说起

容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西是比如是系统环境,网站,程序之类

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

Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

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

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

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

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

0. 为什么选择Docker

既然都是为了解决软件和环境的依赖问题,难道就docker这一个选择吗

通常我会使用百度指数,在涉足一个新的领域的时候帮助我了解这个领域哪些将会是趋势,哪些只是残留

百度指数只能反映国内的一部分情况,以后会加入google指数来反映国外的情况.

0.1 vmware

通常我们会将docker和vmware进行对比

VMWare VS docker - Google Trends
VMWare VS docker - 百度指数

从搜索趋势图中可以看出来vmware是曾经的巨头,一直盘踞着一片江山,不过docker的增长趋势告诉我们,要变天了

1. 安装

  • mac平台
  • RedHat系Linux平台
  • win10平台

1.1 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

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

1.2 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

1.3 Win10(企业版或专业版)

Docker基本安装

  1. 打开百度,搜索“docker download",单击如图中的链接,跳转到docker官方网站,点击“Download for Windows”,或者直接访问docker.com/products/doc
  2. 点击中下方的“Download Desktop For Mac And Windows",必须登录才能下载,跳转登录页,如果没有账号则注册后再登录,登录后,点“Download Desktop For ......."链接
  3. 弹出下载文件窗口,选择位置进行保存文件,等下载完成,双击运行“Docker for Windows Installer.exe”,开始安装

Docker中配置国内镜像

2. 使用

2.1 构建基本环境

安装成功之后,打开终端

确定你想要的操作系统,如果是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这个比我们给这个系统起得名字更能唯一标识,但是不容易记忆,需要每次自己查看

2.2 保存自己的环境

然后我们新建一个文件夹

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

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库

2.3 将自己的环境提交到远程

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

docker login

会提示让输入用户名:selton

然后就是输入密码

登录需要大概十秒的时间

之后会显示Login Succeeded

如果需要退出,docker logout

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

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

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

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

myos/mycentos 1 81bc6c9c1684 19 hours ago 200MB

docker push myos/mycentos:1

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

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

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

2.4 同步远程库环境到本地

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

先删除掉本地的

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

就在下载了

2.5 同步远程库环境到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/mycent 1 e732a1e5c865 6 hours ago 200 MB

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

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

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

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

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

cd myapp
cd work1

至此完成docker的入门使用

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3150778/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39943