• docker入门



    title: Docker教程

    Build,Ship & Run anywhere

    Origins

    早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如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的前台运行方式,后台运行之后会提到

    参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。

    既然我们要解压这个镜像,就一定得知道这个镜像('压缩包')是谁,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的帐号注册坑有点多,如果你是进入到docker官网,请找到下载页面(我知道你是要注册帐号),下载docker,会需要登录,这时候你就能找到登录页,找到注册按钮:),或者是直接进入dockerhub,首页有注册按钮,注册或者登录的时候有时候会不成功,加载不出来验证你是不是机器人的组件,可能需要FQ

    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 push myos/mycentos:1

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

    也就是现在只要有一台机器安装了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的入门使用

  • 相关阅读:
    jenkins配置发送邮件
    inux下rz、sz的简单安装
    Linux系统信息查看命令
    selenium元素定位
    windows下 maven+selenium+testng项目搭建(七)
    eclipse testng插件安装
    window maven安装(六)
    linux下Apache+Svn环境搭建(五)
    Linux实战教学笔记38:企业级Nginx Web服务优化实战(下)
    Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)
  • 原文地址:https://www.cnblogs.com/selton/p/9762132.html
Copyright © 2020-2023  润新知