开发者社区> seltonzyf> 正文

docker入门

简介: Docker教程 Build,Ship & Run anywhere. Origin 早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如Google,对他们来说,使用容器能够充分利用计算资源节省硬件成本,而这几年,真正把容器技术发扬光大的是Docker。
+关注继续查看

Docker教程

Build,Ship & Run anywhere.


更加优秀的页面展现请到Docker教程

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的入门使用

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
18581 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27727 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
21935 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19980 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15291 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14852 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23523 0
+关注
seltonzyf
个人博客http://selton.cn/
14
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载