• Docker安装使用及私有仓库搭建


    1 概念

    1.1 基本概念

    Docker daemon
    ​ 守护进程,运行在宿主机上,用户通过DockerClient客户端Docker命令与Docker daemon交互。
    Docker Client
    ​ Docker命令行工具。是用户使用Docker的主要方式。
    Docker Image
    ​ 镜像。简单说就相当于root文件系统
    Docker Container
    ​ 容器就是镜像的一个实例。容器创建、容器启动、容器停止、容器删除、容器暂停。
    Docker Repository
    ​ 仓库是一个代码的控制空心,作用就是保存镜像。

    1.2 容器与系统

    CoreOS、其他操作系统、容器的网络架构、容器编排、容器集群、容器监控等。

    2 Docker环境搭建

    2.1 CentOS7 安装Docker

    前提:

    1. CentOS6.5 以上,内核3.10及以上
      uname -a
    2. 更新yum源
      yum update
    3. 安装依赖
      yum install -y yum-utils device-mapper-persistent-data lvm2
    4. 替换阿里yum源
      yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    5. 安装docker-ce
      yum install -y docker-ce
    6. 启动docker服务端守护进程
      systemctl start docker
    7. 查看版本信息
      docker version
    8. 设置开机自启
      systemctl enable docker

    2.2 配置阿里云加速镜像

    ​ 登录阿里云平台后进入“容器镜像服务”->"镜像工具"->"镜像加速器"
    配置镜像加速器地址需替换成自己的

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    3 Docker 命令

    3.1 基本命令

    run命令:通过镜像创建并启动容器

    • -i :交互式(可输入命令)
    • -t :终端或模拟终端
    • -d:以守护进程运行
    • -p:指定端口
    • -v:指定存储卷
    • --name:自定义容器名称
    • --restart=aways:当容器挂后自动重启
      exit:退出
      ps命令:查看容器状态
    • -a:查看所有容器
    • -a -q :展示所有容器ID
    • -n:列出指定数量容器
    #列出最近前5个容器
    docker ps -a -n 3
    

    start\stop\restar\ 命令: docker start *ID* docker stop *ID*
    停止所有容器:
    docker stop $(docker ps -a -q)
    exec命令:进入已启动的容器 (注意:使用exec进入容器后exit退出时,容器不会关闭)
    docker exec -i -t 容器ID /bin/bash
    attach命令:进入已启动的容器,exit退出后,容器关闭(不推荐)
    rm命令:删除容器 rm *ID1* *ID2* ....

    # 删除所有容器
    docker rm -f $(docker ps -a -q)
    

    -f:强制删除容器
    kill命令:杀死正在运行的容器
    docker kill 容器ID
    pause\unpause命令:暂停\回复
    logs命令:查看日志
    docker logs 容器ID
    inspect命令:查看容器详细信息
    docker inspect 容器ID
    top命令:显示正在运行的容器进程信息
    docker top 容器ID

    3.2 容器管理

    容器状态(STATUS)

    • Created:创建
    • Up:运行中
    • Pause:暂停
    • Exited:停止
      top命令:查看容器中运行的进程信息
      docker top 容器ID
      diff命令:检测容器中的文件系统变动
      stats命令:实时监控显示容器的资源使用情况
      docker stats 容器ID

    3.3 镜像

    使用原则:有官方的就用官方镜像

    查找镜像

    #搜索httpd镜像
    docker search httpd
    

    拉取镜像

    docker pull 镜像名称(如果不指定版本号,默认获取最新稳定版本的镜像latest),本地镜像保存路径"/var/lib/docker"

    镜像列表

    #查看镜像列表 
    docker images  
    #查看所有镜像ID
    docker images -q 
    

    镜像导出

    docker save 镜像名称及版本 -o 导出的文件名称
    docker save ubuntu:15.10 -o export-test.tar

    删除镜像

    docker rmi 镜像名称:版本 运行中的镜像需要先停掉再删除

    • -f 强制删除。
    #多版本冲突删除
    docker rmi 镜像名称/镜像名称:版本号
    #删除所有镜像
    docker rmi -f $(docker images -q)
    

    镜像标签

    重命名:
    docker tag 镜像ID 源(可自定义)/镜像名称:版本

    镜像创建

    1. 镜像提交
      docker commit 可以把容器打包成一个镜像,可以把容器你的数据也打包到镜像中。
    2. 镜像构建
    • docker build
    • dockerfile

    镜像提交

    将现有镜像push到docker hub仓库

    1. 登录
      docker login
      输入账号密码

    2. 自定义tag
      docker tag nginx:latest qinjuncai/nginx:v1.0

    3. 推送
      docker push qinjuncai/nginx:v1.0

    3.4 仓库

    3.4.1 公共仓库

    DockerHub,参考官方说明

    3.4.2 私有仓库

    3.4.2.1 Docker-registry私有仓库

    Docker公司提供:Docker-registry私有仓库组件

    1. 安装
    ## 拉取镜像
    docker pull registry
    ## 启动容器
    docker run -d -v /registry:/home/docker-registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest
    
    1. 验证
      ip:5000/v2(http://192.168.88.101:5000/v2/
    2. 推送镜像到私有仓库
    # 重命名Tag
    docker tag nginx:latest localhost:5000/nginx:v2.1
    # 推送镜像
    docker push localhost:5000/nginx:v2.1
    

    1. 验证
      http://192.168.88.101:5000/v2/_catalog

    2. 拉取推送的镜像
      客户端deamon.json配置私有仓库地址

    vi /etc/docker/daemon.json 
    #添加私有仓库地址
    {
      "insecure-registry": ["192.168.88.101:5000"]
    }
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    #拉取镜像
    docker pull 192.168.88.101:5000/nginx:v2.1
    
    3.4.2.2 Harbor 私有仓库

    ​ VMWare公司(中国团队)提供:Harbor企业级开源组件(推荐
    特点: 安全、标识和管理、镜像赋值、LDAP、国际化、GItHub开源、图形化用户界面、部署简单

    1. docker-compose安装
      Docker-compose GitHub地址
    #安装docker-compose
    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    chmod +x /usr/local/bin/docker-compose
    
    # 查看版本号,测试是否安装成功你可以通过修改URL中的版本,可以自定义您的需要的版本。
    docker-compose version 
    

    1. harbor安装
      Harbor GitHub地址
      下载离线包(600多M)
    #解压
    tar -xvf harbor-offline-installer-v1.10.10.tgz
    cd harbor
    #执行
    ./prepare
    #修改配置.IP地址及端口修改(不能是localhost或127.0.0.1),admin密码也在此配置文件中
    vi harbor.yml
    #执行安装脚本
    ./install.sh
    
    

    注意:如果不开启https 需注释掉harbor.html HTTPS部分内容,否则会报错

    1. 验证登录
      安装成功

      https://ip:端口(默认80,账号admin 密码:Harbor12345)
    2. 使用
    • 登录系统并创建项目

    • 添加用户
      系统管理-用户管理-创建用户

    • 添加用户到项目中
      项目-成员-添加用户-选择角色

    • 配置镜像地址

    vi /etc/docker/daemon.json 
    #添加私有仓库地址
    {
      # 这行是阿里云加速,需替换自己的	
      "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"],
      "insecure-registries":["192.168.88.101"] 
    }
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 登录仓库
    docker login 192.168.88.101
    #输入用户名密码
    ....
    
    
    • 推送镜像到私有仓库
      格式:docker tag 需要推送的镜像名称:版本 私有仓库IP/项目名称/镜像名称:版本
    # 标记镜像
    docker tag nginx:latest 192.168.88.101/test/nginx:v3.0
    # 推送镜像
    docker push 192.168.88.101/test/nginx:v3.0
    

    • 拉取镜像
    docker pull 192.168.88.101/test/nginx:v3.0
    

    3.4.3 三方仓库

    ​ 阿里云仓库,详见

    3.5 基本命令小结

    4 Dockerfile

    4.1 命令

    案例:通过dockerfile 创建镜像。拉取centos 并安装软件及开放端口

    1. 编写dockerfile
    # 从哪一个基础镜像构建
    FROM centos
    
    # 定义作者信息
    MAINTAINER 'qinjuncai@qq.com'
    
    # 定义一个变量
    ENV newpath /tmp
    
    # 设置登录以后工作路径(落脚点)
    WORKDIR $newpath
    
    # 执行你要的操作
    #RUN yum -y install net-tools
    
    # 开放指定的端口
    EXPOSE 80
    EXPOSE 22
    
    # 执行命令
    CMD echo $newpath
    CMD echo "success.....OK"
    CMD /bin/bash
    
    1. 执行dockerfile
    docker build -f dockerfile -t qinjuncai/centos:v1 .
    
    1. 查看dockerfile执行细节
    docker history qinjuncai/centos:v1
    

    5 容器网络

    5.1 外部访问容器

    端口映射:容器与宿主机之间进行通讯

    • -p:小写的p指定端口映射 。宿主机:容器端口(多用于==生产环境==)
    • -P:大写的P随机映射
    #启动容器,将容器80端口映射到宿主机8080端口,将443端口映射到443
    docker run -itd -p 8080:80 -p 443:443 nginx /bin/bash
    #启动容器,映射端口,高可用
    docker run -itd -p 80:80 --restart=always nginx /bin/bash
    #启动容器,随机映射端口
    docker run -d -P nginx 
    #适用于宿主机多网卡,指定IP及端口映射
    docker run -itd -p 192.168.88.101:8080:80 nginx --name web01 nginx /bin/bash
    #查看容器端口暴露情况
    docker port 717a97e90432
    
    

    端口的暴露:Dockerfile EXPOSE 80

    5.2 容器访问容器(容器互联)

    # 创建Nginx容器1,命名Nginx01 使用自定义网络test-net 宿主90端口映射容器80端口
    docker run -itd -p 90:80 --name nginx01 --network test-net nginx
    # 创建Nginx容器2,命名Nginx02 使用自定义网络test-net 宿主91端口映射容器80端口
    docker run -itd -p 91:80 --name nginx02 --network test-net nginx
    # 分别查看容器详细信息(获取容器IP)
    docker inspect a013498701df 
    docker inspect c61aed657a25
    # 容器1 IP 172.19.0.2 容器2 IP 172.19.0.3 
    # 进入容器1 ping 172.19.0.3 能ping通 说明容器互联成功
    docker exec -it c61aed657a25 /bin/bash
    

    5.3 容器网络的模式

    5.3.1 四种容器网络模式

    1.host 模式
    容器与宿主机共享IP,可设置不同端口号

    2. container 模式
    整合个容器共享独立网卡和IP

    3. none模式 :没有网卡,没有IP 没有路由信息 只有lo
    4.bridge模式(默认):即桥接模式
    每个虚拟机拥有独立的IP和网卡,多个容器之间隔离,可通过宿主机互相访问。

    5.3.2 自定义网络

    # 创建网络
    docker network create -d bridge test-net
    # 查看网络
    docker network ls
    

  • 相关阅读:
    char与unsigned char的区别
    C语言 —— sprintf()函数
    char *s 与 char s[ ]的区别
    打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
    洛谷P2242 公路维修问题(Road)
    洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication
    洛谷P2246 SAC#1
    Bzoj4300 绝世好题
    Uva1398 Meteor
  • 原文地址:https://www.cnblogs.com/dooor/p/docker0226.html
Copyright © 2020-2023  润新知