docker的安装部署以及使用

一、安装

  1. Docker可以运行在MAC,Windows,Linux系统上。本次教程使用Centos7系统操作。使用root账号登录。

    # 1、安装docker所需的软件包
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    # 2、配置国内 docker 的 yum 源(阿里云)
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
    # 3、安装 docker-ce
    sudo yum install docker-ce docker-ce-cli containerd.io -y
    

    yum-util:提供yum-config-manager功能
    device-mapper-persistent-datalvm2是软件驱动依赖
    docker-ce-cli:作用是 docker 命令行工具包
    containerd.io:作用是容器接口相关包

    docker-ce 是 docker 公司维护的开源项目,是一个基于 moby 项目的免费的容器产品
    docker-ee 是 docker 公司维护的闭源产品,是 docker 公司的商业产品。

  2. 查看信息
    如果服务没有运行的话,使用以下命令运行

    systemctl start docker && systemctl enable docker
    

    查看Docker版本信息

    docker version 
    

    查看Docker信息,确认服务运行。显示 Docker 系统信息,包括镜像和容器数。

    docker info
    

    信息说明

    [root@localhost ~]# docker info
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 0
    Server Version: 1.13.1
    Storage Driver: overlay2
     Backing Filesystem: xfs
    ...
    Name: localhost.localdomain
    ID: G26P:TKID:4Y5E:JFGR:GZRV:KPKB:2H2H:II35:6ASJ:GSLV:ATVT:5YPD
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Registry: https://index.docker.io/v1/
    Experimental: false
    ...
    

    Docker Root Dir:默认的 docker 的家目录,以后的镜像都默认放置在这个目录下
    Registry:默认去这个网站找docker镜像

二、镜像加速器

  1. 如果你是是国内的服务器的话,后期使用拉取镜像的时候,速度可能会非常慢。这里提供一个使用阿里云的镜像加速器,来提升拉取的速度。
    网址:https://cr.console.aliyun.com
    使用支付宝账号登录进去,首次使用需要设置登录密码。
  2. 进去之后,根据容器镜像服务 >> 镜像中心 >> 镜像加速器。就看到为你独立分配的镜像加速器的地址了。
    我的是这样的:
    加速器地址
    https://tnhnay7v.mirror.aliyuncs.com
    下面就是阿里云官方提供的使用方式。跟着做就行了。
    1. 安装/升级Docker客户端
      推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce
    2. 配置镜像加速器
      针对Docker客户端版本大于 1.10.0 的用户
      您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://tnhnay7v.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    测试可以使用我的这个,正式发布的时候,建议大家使用自己的镜像地址。

三、docker平台的运行管理

  1. docker的启动与停止命令
    # 启动docker服务
    systemctl start docker
    # 停止docker服务
    systemctl stop docker
    # 重启docker服务
    systemctl restart docker
    # 查看docker服务状态
    systemctl status docker
    # 设置开机启动docker服务
    systemctl enable docker
    

四、docker基本用法之镜像

镜像是docker的核心概念,可以认为镜像就是对某些运行环境或者软件打的包,用户可以从docker仓库中下载基础镜像到本地。
镜像有关的操作有:

镜像列表
镜像详情
镜像搜索
拉取镜像
删除镜像

  1. 镜像列表

    docker images
    
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/centos    latest              831691599b88        6 weeks ago         215 MB
    

    REPOSITORY:镜像名称
    TAG:镜像标签
    IMAGE ID:镜像ID
    CREATED:镜像的创建日期

  2. 镜像详情

    docker inspect [镜像ID/名称]
    

    查询的内容有点多,这里查看镜像版本为例。

    [root@localhost docker-build]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/centos    latest              831691599b88        6 weeks ago         215 MB
    [root@localhost docker-build]# docker inspect 831691599b88
    [
        {
            "Id": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f",
            "RepoTags": [
                "docker.io/centos:latest"
            ],
            ...
            "DockerVersion": "18.09.7",
            "Author": "",
            ...
        }
    ]
    

    可以看到这个centos:latest的版本是18.09.7

  3. 镜像搜索

    docker search [镜像名称]
    
    root@localhost ~]# docker search centos
    INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/centos                             The official build of CentOS.                   6112      [OK]       
    docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              132                  [OK]
    docker.io   docker.io/consol/centos-xfce-vnc             Centos container with "headless" VNC sessi...   118                  [OK]
    docker.io   docker.io/jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos ...   115                  [OK]
    docker.io   docker.io/centos/systemd                     systemd enabled base container.                 86                   [OK]
    ...
    

    NAME:镜像名称
    DESCRIPTION:镜像描述
    STARS:用户评价,反应一个镜像的受欢迎程度
    OFFICIAL:是否官方
    AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

  4. 拉取镜像

    docker pull [镜像名称]
    
    [root@localhost ~]# docker pull centos
    Using default tag: latest
    Trying to pull repository docker.io/library/centos ... 
    latest: Pulling from docker.io/library/centos
    6910e5a164f7: Pull complete 
    Digest: sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43b
    Status: Downloaded newer image for docker.io/centos:latest
    
  5. 删除镜像
    删除指定镜像

    docker rmi [镜像id]
    

    删除所有镜像

    docker rmi `docker images -q`
    
    [root@localhost ~]# docker rmi 831691599b88
    Untagged: docker.io/centos:latest
    Untagged: docker.io/centos@sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43b
    Deleted: sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f
    Deleted: sha256:eb29745b8228e1e97c01b1d5c2554a319c00a94d8dd5746a3904222ad65a13f8
    

五、docker基本用法之容器

容器,也是docker中的核心概念,容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同PHP语言中类和对象的关系。
容器相关的操作有:

查看容器
创建容器
启动容器
停止容器
删除容器
文件拷贝
目录挂载
查看容器ip地址
端口映射

  1. 查看容器
    正在运行的容器

    docker ps
    

    所有容器

    docker ps -a
    
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
    aa36de1a05f3        centos:latest       "bash"              7 minutes ago       Exited (0) 6 minutes ago                       elated_williams
    
  2. 查看容器
    基于现有的镜像,可以使用如下的命令,启动自己的容器。

    docker run [镜像][参数...]
    

    可以执行的参数有

    -i:表示运行容器
    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。一般都是-it一起使用。
    --name:为创建的容器命名。
    -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,可以共享到容器上。
    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

    (1) 交互式容器
    以交互式方式创建并启动容器,启动完成后,直接进入当前容器。可使用exit命令退出容器。需要注意以此种方式启动容器,如果退出容器,则容器会进入停止状态。

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

    创建并启动名称为"mycentos"的交互式容器;上面指令中的镜像名称centos 也可以使用镜像id
    bash [root@localhost ~]# docker run -it --name=mycentos centos /bin/bash [root@26c41dc277b7 /]# ls -a . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
    > 创建成功,并且已经进入了容器内部。注意看root后面的地址已经变成了26c41dc277b7了。

    (2) 守护式容器
    创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复)

    docker run -di --name=mycentos2 centos
    
    [root@localhost ~]# docker run -di --name=mycentos2 centos
    640fac3bbf082e6a17cea153f49ae373f15ddf815cf1a813d7e29d9027560713
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    640fac3bbf08        centos              "/bin/bash"         6 seconds ago       Up 5 seconds                            mycentos2
    

    命令行输出了容器ID,证明创建成功了。使用docker ps查看正在运行的命令,能看到自己正在运行的命令。

    需要登录进入该容器的话,可以使用下面的命令

    docker exec -it [容器名] /bin/bash
    

    [容器名]:容器名称或者容器ID都是可以的。退出的话,使用exit
    bash [root@localhost ~]# docker exec -it mycentos2 /bin/bash [root@640fac3bbf08 /]# ls -a . .. .dockerenv bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

  3. 停止或启动容器
    停止容器

    docker stop mycentos
    

    启动容器

    docker start mycentos
    
    [root@localhost ~]# docker stop mycentos2
    mycentos2
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@localhost ~]# docker start mycentos2
    mycentos2
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    640fac3bbf08        centos              "/bin/bash"         8 minutes ago       Up 3 seconds                            mycentos2
    
  4. 删除容器
    删除指定容器

    docker rm mycentos3
    

    删除全部容器

    docker rm $(docker ps -aq)
    

    停用并删除所有容器

    docker stop $(docker ps -q) & docker rm $(docker ps -aq)
    
    [root@localhost ~]# docker rm mycentos3
    Error response from daemon: You cannot remove a running container 1627ee165666780a98e48a8f0faaa13009264fafd373d60c783d20bed18ba36e. Stop the container before attempting removal or use -f
    [root@localhost ~]# docker stop mycentos3
    mycentos3
    [root@localhost ~]# docker rm mycentos3
    mycentos3
    

    如果容器在运行,必须将其停止后,才能删除。或者加-f强制删除

  5. 文件拷贝
    (1) 将宿主机中的文件拷贝到容器内
    拷贝当前目录的abc.txt文件,拷贝到容器的根目录

    docker cp abc.txt mycentos2:/
    
    [root@localhost ~]# docker cp abc.txt mycentos2:/
    [root@localhost ~]# docker exec -it mycentos2 /bin/bash
    [root@640fac3bbf08 /]# ls -a 
    .  ..  .dockerenv  abc.txt  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    

    拷贝完成后,使用docker exec进入目标容器,能看到自己的文件。

    (2) 将文件从容器内拷贝到宿主机
    使用exit退出容器,在宿主机内部操作,只需要把上面的地址对调就行了

    docker cp mycentos2:/def.txt /root
    
    [root@localhost ~]# docker cp mycentos2:/def.txt /root
    [root@localhost ~]# ls -a 
    .   abc.txt          .bash_history  .bash_profile  .cshrc   .pki     test.txt
    ..  anaconda-ks.cfg  .bash_logout   .bashrc        def.txt  .tcshrc  .viminfo
    
  6. 目录挂载
    在创建容器的时候,可以将宿主机的目录与容器内的目录进行映射。这样我们就可以通过修改宿主机某个目录的文件从而去影响容器内的目录。创建容器时添加-v参数,后边为[宿主机目录]:[容器目录]
    我在/usr/local创建了一个test目录,路径:/usr/local/test

    docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos
    
    [root@localhost ~]# docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos
    1627ee165666780a98e48a8f0faaa13009264fafd373d60c783d20bed18ba36e
    [root@localhost ~]# touch /usr/local/test/def.txt
    [root@localhost ~]# docker exec -it mycentos3 /bin/bash
    [root@1627ee165666 /]# ls /usr/local/test
    def.txt
    

    容器创建成功后,在宿主机创建了def.txt文件,使用docker exec登录进去虚拟机后,能正常查看到该文件。

  7. 查看容器ip

    docker inspect mycentos2
    
    [root@localhost ~]# docker inspect mycentos2
    [
        {
            ...
            "NetworkSettings": {
                ...
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
                ...
            }
        }
    ]
    

    内容有点多,这里做精简。NetworkSettings下的IPAddress就是ip地址。

  8. 端口映射
    使用-p进行端口映射。语法是:

    docker run -d -p [物理机端口]:[容器端口] centos:httpd
    

    实例

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