zoukankan      html  css  js  c++  java
  • docker安装配置使用

    docker容器

    • 容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等
    (1)与宿主机使用同一个内核,性能损耗小;
    (2)不需要指令级模拟;
    (3)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
    (4)避免了准虚拟化和系统调用替换中的复杂性;
    (5)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
    
    • centos7.6

    • 10.0.0.202

    • purple

    • docker的主要组成部分

    docker是传统的CS架构分为docker client和docker server,向mysql一样    
    
    命令:docker version
    [root@controller ~]# docker version 
    Client:
     Version:	17.12.0-ce
     API version:	1.35
     Go version:	go1.9.2
     Git commit:	c97c6d6
     Built:	Wed Dec 27 20:10:14 2017
     OS/Arch:	linux/amd64
    
    Server:
     Engine:
      Version:	17.12.0-ce
      API version:	1.35 (minimum version 1.12)
      Go version:	go1.9.2
      Git commit:	c97c6d6
      Built:	Wed Dec 27 20:12:46 2017
      OS/Arch:	linux/amd64
      Experimental:	false
      
    docker info(如果要做监控)
    
    docker主要组件有:镜像、容器、仓库, 网络,存储
    
    启动容器必须需要一个镜像,仓库中只存储镜像
    容器---镜像---仓库
    

    安装

    • 安装源

      curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
      curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
      
    • 换源之后可直接yum安装

      [root@purple ~]# yum install -y docker
      [root@purple ~]# systemctl start docker.service
      [root@purple ~]# systemctl enable docker.service
      
      • 启动第一个容器前需要配置docker镜像加速
    vi /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    [root@purple ~]# systemctl restart docker.service
    

    镜像

    • 创建容器需要有依赖容器运行的镜像

    • 获取镜像的方式有两种

    • 一种是手动上传镜像

      • 使用rz直接将镜像上传到 /var/lib/docker/containers/ 目录下

        此时使用查看镜像列表命令
        [root@purple /var/lib/docker/containers]# docker images    #列出镜像或者docker image ls
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        显示没有镜像
        我们使用导入镜像命令导入镜像
        docker load  	
        [root@purple /var/lib/docker/containers]# docker load -i centos6.9 
        b5e11aae8a8e: Loading layer 202.9 MB/202.9 MB
        Loaded image: centos:6.9
        [root@purple /var/lib/docker/containers]# docker images
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        centos              6.9                 adf829198a7f        15 months ago       195 MB
        此时就发现了可用于创建容器的镜像
        
    • 一种 是直接在网上拉取

    使用命令 docker search 查找网上的可用镜像
    [root@purple /var/lib/docker/containers]# docker search centos
    INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/centos                             The official build of CentOS.                   5684      [OK]       
    docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              125                  [OK]
    [root@purple /var/lib/docker/containers]# docker search niginx
    INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/28may1988/niginx-demo                                                              0                    
    docker.io   docker.io/316213788/niginx                   qqqqq                                           0                                 
    之后使用docker pull (选中的镜像名称) 将网上镜像下载到本地
    [root@purple /var/lib/docker/containers]# docker pull docker.io/ansible/centos7-ansible
    Using default tag: latest
    Trying to pull repository docker.io/ansible/centos7-ansible ... 
    latest: Pulling from docker.io/ansible/centos7-ansible
    45a2e645736c: Pull complete 
    1c3acf573616: Pull complete 
    edcb61e55ccc: Pull complete 
    cbae31bad30a: Pull complete 
    aacbdb1e2a62: Pull complete 
    fdeea4fb835c: Pull complete 
    Digest: sha256:39eff7d56b96530d014083cd343f7314c23acbd1ecf37eb75a71a2f6584d0b02
    Status: Downloaded newer image for docker.io/ansible/centos7-ansible:latest
    [root@purple /var/lib/docker/containers]# docker images
    REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
    centos                              6.9                 adf829198a7f        15 months ago       195 MB
    docker.io/ansible/centos7-ansible   latest              688353a31fde        2 years ago         447 MB
    --补充
    删除镜像
    	docker rmi  (要删除的镜像名称)
    [root@purple /var/lib/docker/containers]# docker rmi docker.io/ansible/centos7-ansible
    [root@purple /var/lib/docker/containers]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              6.9                 adf829198a7f        15 months ago       195 M
    

    容器

    [root@purple /var/lib/docker/containers]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos              6.9                 adf829198a7f        15 months ago       195 MB
    [root@purple /var/lib/docker/containers]# docker run -d -p 80:80 centos:6.9 
    90c41f4e28b1b332aa4d533b99d2724d3ac0f7098a24a262240e035172faec5f
    - 参数
    run(创建并运行一个容器)
    -d 放在后台
    -p 端口映射
    centos:6.9 docker镜像的名字
    [root@purple /var/lib/docker/containers]# docker ps    #查看正在运行的容器
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@purple /var/lib/docker/containers]# docker ps -all    #查看所有容器
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
    90c41f4e28b1        centos:6.9          "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       condescending_aryabhata
    通过上述查看容器的命令我们发现容器创建成功了,但是并没有运行
    [root@purple /var/lib/docker/containers]# docker start  90c41f4e28b1   #启动容器
    90c41f4e28b1
    [root@purple /var/lib/docker/containers]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    通过启动,我们发现容器可以成功启动,但是启动的瞬间就自动停止运行了,这是因为我们创建容器时却是让容器运行下去的解释器,所以我们需要删除容器并添加解释器创建
    删除容器
    [root@purple /var/lib/docker/containers]# docker rm 90c41f4e28b1
    - 批量删除容器
        docker rm -f `docker ps -a -q`
    
    
    [root@purple /var/lib/docker/containers]# docker run -it  -p 80:80 --name nginx centos:6.9 /bin/bash
    [root@a689cdcd8ea4 /]# 
    --参数
    -it   分配交互式的终端
    --name 指定容器的名字
    /bin/sh覆盖容器的初始命令
    创建容器之后会直接进入容器内部
    [root@a689cdcd8ea4 /]# exit      # 退出容器
    [root@purple /var/lib/docker/containers]# docker ps -all
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                        PORTS               NAMES
    a689cdcd8ea4        centos:6.9          "/bin/bash"         About a minute ago   Exited (130) 20 seconds ago                       nginx
    此时发现推出容器之后,容器会立刻停止运行,此时将容器启动就可以使容器运行下去了
    [root@purple /var/lib/docker/containers]# docker start  a689cdcd8ea4
    停止容器
    	docker stop a689cdcd8ea4
    杀死容器
    	docker kill a689cdcd8ea4
    进入容器
         docker exec -it a689cdcd8ea4 /bin/bash
    
    
    • 如果你的镜像是centos7.0以上版本,在容器中使用systemctl的命令时会报错,此时你需要使用以下命令创建容器才能在容器中正常使用systemctl命令
      docker run --privileged -d -ti -e "container=docker"  -v /sys/fs/cgroup:/sys/fs/cgroup centos7  /usr/sbin/init
      
    

    仓库

    • Docker Registry就是完成搭建本地容器仓库,简单来说就是讲一个专门的服务器作为镜像仓库,启用一个Docker Registry容器实例提供服务。
    [root@purple /var/lib/docker/containers]# docker pull  docker.io/registry
    [root@purple /var/lib/docker/containers]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  docker.io/registry:latest 
    1e1e60dd80f9f934e51b868eb70d856a93b1e79920c18d5020b7947970225701
    
    

    接下来我们需要通过http://10.0.0.202:5000/v2来判断registry服务是否正常启动,如果出现“{}”既可以说明服务运行正常。

    上传镜像到私有仓库:
    a:给镜像打标签
    [root@purple /var/lib/docker/containers]# docker tag centos:6.9 10.0.0.202:5000/centos:v1
    b:上传镜像
    [root@purple /var/lib/docker/containers]# docker push 10.0.0.202:5000/centos:v1
    如果遇到报错:
    The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
    Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
    解决方法:
    vim  /etc/docker/daemon.json
    {
      "insecure-registries": ["10.0.0.202:5000"]
    }
    systemctl restart docker
    [root@purple /var/lib/docker/containers]# docker push 10.0.0.202:5000/centos:v1 
    The push refers to a repository [10.0.0.202:5000/centos]
    b5e11aae8a8e: Layer already exists 
    v1: digest: sha256:0e59afcc4d7a07fcbd6285f79f6f377ce997ae091c10f8e3c2feb2bcda90b06c size: 529
    
    
    
    • 优化本地仓库图形界面
    [root@purple /var/lib/docker/containers]# docker pull konradkleine/docker-registry-frontend:v2
    [root@purple /var/lib/docker/containers]# systemctl daemon-reload
    [root@purple /var/lib/docker/containers]# docker run -d -e ENV_DOCKER_REGISTRY_HOST=10.0.0.202 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 8081:80 konradkleine/docker-registry-frontend:v2
    访问浏览器http://10.0.0.202:8081/home 查看上传到仓库的镜像
    http://10.0.0.202:8081/repositories/20
    
    

    扩展

    清除仓库
    1)进入docker registry的容器中
    docker exec -it registry /bin/sh
    2)删除/var/lib/registry/docker/registry/v2/repositories目录下的镜像
    rm -fr /var/lib/registry/docker/registry/v2/repositories/centos
    
    

    带basic认证的加密仓库

    [root@purple ~]# yum install httpd-tools -y
    [root@purple ~]# yum install -y python2-pip
    [root@purple ~]# mkdir /opt/registry-var/auth/ -p
    [root@purple ~]# htpasswd  -Bbn admin 123456  >> /opt/registry-var/auth/htpasswd
    [root@purple ~]# docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/   -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e  "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" docker.io/registry
    访问浏览器http://10.0.0.202:5000/v2/可以看到需要刷入密码
    用户:admin
    密码:123456
    

    --------------purple---------------------

  • 相关阅读:
    day21
    day19
    【淘淘商城项目】jsonp解决ajax跨域问题
    【淘淘商城项目】商品规格参数的表结构设计
    打印日志的时机
    【javascript】call和apply的区别
    MySQL timestamp自动更新时间
    spring管理属性配置文件properties——PropertiesFactoryBean和PropertyPlaceholderConfigurer的区别
    【Maven】修改nexus默认的工作目录
    URIEncoding和UseBodyEncodingForURI的解释
  • 原文地址:https://www.cnblogs.com/jiangyatao/p/11905966.html
Copyright © 2011-2022 走看看