zoukankan      html  css  js  c++  java
  • Docker(一):Docker安装

    简介

      Docker是dotcloud公司开源的一款产品,主要基于PAAS平台为开发者提供服务。是解决运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

    Docker组件

    • Docker仓库:https://hub.docker.com

    • Docker Client:Docker 的客户端。

    • Docker Server:Docker daemon 的主要组成部分,接受用户通过Docker Client发出的请求,并按照相应的路由规则实现路由分发。

    • Docker镜像:Docker镜像运行之后生成容器,镜像就好比图纸,容器相当于根据图纸制作好的实物。

    Docker安装

    前提条件

      安装Docker,官方推荐必须需要一个CentOS7系统。该centos-extras库必须启用。默认情况下,此存储库是启用的,但是如果已禁用它,则需要重新启用它。overlay2建议使用存储驱动程序。

    卸载旧版本

    # 全新的ContOS7精简版,没有安装过docker
    [root@localhost ~]# yum remove docker 
                       docker-client 
                       docker-client-latest 
                       docker-common 
                       docker-latest 
                       docker-latest-logrotate 
                       docker-logrotate 
                       docker-engine
    Loaded plugins: fastestmirror
    Repository epel is listed more than once in the configuration
    Repository epel-debuginfo is listed more than once in the configuration
    Repository epel-source is listed more than once in the configuration
    No Match for argument: docker
    No Match for argument: docker-client
    No Match for argument: docker-client-latest
    No Match for argument: docker-common
    No Match for argument: docker-latest
    No Match for argument: docker-latest-logrotate
    No Match for argument: docker-logrotate
    No Match for argument: docker-engine
    No Packages marked for removal
    

    安装

       官方推荐使用仓库安装docker,若不方便可选择rpm软件包或脚本安装。此次演示的为官方推荐。

    设置仓库

    [root@localhost ~]# yum install -y yum-utils
    # 注意,此仓库为官方提供仓库,国内用户访问网络很坑,这里选择阿里仓库
    [root@localhost ~]# yum-config-manager 
    >     --add-repo 
    >     https://download.docker.com/linux/centos/docker-ce.repo
    Loaded plugins: fastestmirror
    adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
    grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
    repo saved to /etc/yum.repos.d/docker-ce.repo
    
    • 阿里仓库
    [root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    Loaded plugins: fastestmirror
    adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
    repo saved to /etc/yum.repos.d/docker-ce.repo
    

    安装Docker引擎

    # 可选
    [root@k8s-node02 ~]# yum update
    # 安装Docker引擎
    [root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io
    

    启动Docker

    [root@localhost ~]# systemctl start docker
    

    查看状态

    [root@localhost ~]# systemctl status docker
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
       Active: active (running) since Sat 2020-04-11 10:15:26 CST; 15s ago
         Docs: https://docs.docker.com
     Main PID: 18129 (dockerd)
        Tasks: 12
       Memory: 46.4M
       CGroup: /system.slice/docker.service
               └─18129 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    
    Apr 11 10:15:25 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:25.935145283+08:00" level=info msg="scheme "unix" not registered, fallback to default scheme" module=grpc
    Apr 11 10:15:25 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:25.935172947+08:00" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock 0  <nil>}] <nil>}" module=grpc
    Apr 11 10:15:25 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:25.935193242+08:00" level=info msg="ClientConn switching balancer to "pick_first"" module=grpc
    Apr 11 10:15:25 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:25.962339880+08:00" level=info msg="Loading containers: start."
    Apr 11 10:15:26 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:26.230751040+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to...rred IP address"
    Apr 11 10:15:26 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:26.329307123+08:00" level=info msg="Loading containers: done."
    Apr 11 10:15:26 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:26.353432378+08:00" level=info msg="Docker daemon" commit=afacb8b graphdriver(s)=overlay2 version=19.03.8
    Apr 11 10:15:26 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:26.353629385+08:00" level=info msg="Daemon has completed initialization"
    Apr 11 10:15:26 localhost.localdomain dockerd[18129]: time="2020-04-11T10:15:26.381834522+08:00" level=info msg="API listen on /var/run/docker.sock"
    Apr 11 10:15:26 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
    Hint: Some lines were ellipsized, use -l to show in full.
    

    测试

    查看版本

    [root@localhost ~]# docker version
    Client: Docker Engine - Community
     Version:           19.03.8
     API version:       1.40
     Go version:        go1.12.17
     Git commit:        afacb8b
     Built:             Wed Mar 11 01:27:04 2020
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server: Docker Engine - Community
     Engine:
      Version:          19.03.8
      API version:      1.40 (minimum version 1.12)
      Go version:       go1.12.17
      Git commit:       afacb8b
      Built:            Wed Mar 11 01:25:42 2020
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.2.13
      GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
     runc:
      Version:          1.0.0-rc10
      GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
     docker-init:
      Version:          0.18.0
      GitCommit:        fec3683
    

    helloworld

    # 执行三次也没有成功, 原因是下载镜像失败
    [root@localhost ~]# docker run hello-world
    Unable to find image 'hello-world:latest' locally
    docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/hello-world/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fhello-world%3Apull&service=registry.docker.io: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
    See 'docker run --help'.
    [root@localhost ~]# docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    1b930d010525: Pulling fs layer 
    docker: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/fc/fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e/data?verify=1586574550-P3eY%2BuJ7zYienz1l526gNyOltTI%3D: read tcp 192.168.0.11:43826->104.18.121.25:443: read: connection reset by peer.
    See 'docker run --help'.
    [root@localhost ~]# docker run hello-world
    Unable to find image 'hello-world:latest' locally
    docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
    See 'docker run --help'.
    

    配置镜像加速

    cat > /etc/docker/daemon.json <<-EOF
    {
      "registry-mirrors": ["https://e9vsm9qn.mirror.aliyuncs.com"]
    }
    EOF
    
    # 加载daemon配置
    [root@localhost ~]# systemctl daemon-reload
    [root@localhost ~]# systemctl restart docker
    

    阿里镜像加速器地址(需要登录):https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    再次执行helloworld

    [root@localhost ~]# docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    1b930d010525: Pull complete 
    Digest: sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

    卸载Docker

    1. 卸载Docker Engine,CLI和Containerd软件包:
    [root@localhost ~]# yum remove docker-ce docker-ce-cli containerd.io
    
    1. 主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:
    [root@localhost ~]# rm -rf /var/lib/docker
    

    Docker常用命令

    帮助命令

    # docker版本
    [root@localhost ~]# docker version
    # docker信息
    [root@localhost ~]# docker info
    # docker帮助
    [root@localhost ~]# docker --help
    

    镜像命令

    # 查询本地所有镜像,docker images [OPTIONS] 
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              fce289e99eb9        15 months ago       1.84kB
    

    OPTIONS说明:-a 列出本地所有镜像 -q 只显示镜像id

    [root@localhost ~]# docker images -q
    fce289e99eb9
    
    # 在docker仓库中查找nginx镜像, docker search [OPTIONS] [镜像名字]
    [root@localhost ~]# docker search nginx
    NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                              Official build of Nginx.                        12958               [OK]                
    jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1769                                    [OK]
    richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   764                                     [OK]
    #省略
    

    OPTIONS说明:-s [执行数值],列出start数不小于指定值的镜像

    [root@localhost ~]# docker search -s 100 nginx
    Flag --stars has been deprecated, use --filter=stars=3 instead
    NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    nginx                     Official build of Nginx.                        12958               [OK]                
    jwilder/nginx-proxy       Automated Nginx reverse proxy for docker con…   1769                                    [OK]
    richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable of…   764                                     [OK]
    linuxserver/nginx         An Nginx container, brought to you by LinuxS…   102  
    
    # 将镜像下载到本地, docker pull [镜像名字]:[TAG] 默认为:latest
    [root@localhost ~]# docker pull nginx
    Using default tag: latestdocker pull nginx
    latest: Pulling from library/nginx
    c499e6d256d6: Pull complete 
    74cda408e262: Pull complete 
    ffadbd415ab7: Pull complete 
    Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
    Status: Downloaded newer image for nginx:latest
    docker.io/library/nginx:latest
    
    # 删除本地镜像,docker rmi [OPTIONS] [镜像名字/ID]:[TAG] [镜像名字/ID]:[TAG],只能删除没有运行的镜像,-f 强制删除
    [root@localhost ~]# docker rmi hello-world
    Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container 1566e1e530c4 is using its referenced image fce289e99eb9
    [root@localhost ~]# docker rmi -f hello-world
    Untagged: hello-world:latest
    Untagged: hello-world@sha256:f9dfddf63636d84ef479d645ab5885156ae030f611a56f3a7ac7f2fdd86d7e4e
    Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
    
    # 删除全部本地镜像
    [root@localhost ~]# docker rmi -f $(docker images -qa)
    Untagged: nginx:latest
    Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
    Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
    Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
    Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
    Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45
    

    容器命令

    镜像运行才会生成容器。

  • 相关阅读:
    java web spring challenge01
    eclipse的一个小失误
    创建线程的方式三:实现Callable接口。 --- JDK 5.0新增
    线程通信的应用:经典例题:生产者/消费者问题
    8.5 练习
    8.4 练习1
    LockTest.java
    DeadLock.java
    线程死锁
    使用同步机制将单例模式中的懒汉式改写为线程安全的
  • 原文地址:https://www.cnblogs.com/chinda/p/12678140.html
Copyright © 2011-2022 走看看