zoukankan      html  css  js  c++  java
  • docker之安装和基本使用(一)

    前言

    开始折腾docker。

    主要概念

    • 容器:独立运行的一个或一组应用,与其他应用完全独立。

    • 镜像:用于创建 Docker容器的模板。

    • 仓库:用于收纳镜像文件,可以理解为代码控制中的代码仓库

    注意:

    一个docker容器应该被看做是一个进程而不是一台虚拟机,因为所有的docker中的应用其实是运行在宿主机上的,你可以通过ps查看它们,区别是它们被隔离成独立的,没有联系的应用;所以docker部署的一般用法是在一个docker中只部署一个应用,如一个nginx。

    安装docker

    • 可以使用apt安装docker,但安装的不是最新的,如果是云服务可以这样做;
    sudo apt-get install docker
    或
    sudo apt-get install docker-ce
    
    • 使用阿里源安装最新docker
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get update
    sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    
    sudo apt-get -y update
    sudo apt-get -y install docker-ce
    
    • 使用repo
    #安装所需要的包
    sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
    
    # 添加使用 HTTPS 传输的软件包以及 CA 证书
    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates
    
    #添加GPG密钥
    sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    
    # 添加软件源
    echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
    
    # 添加成功后更新软件包缓存
    sudo apt-get update
    
    # 安装docker
    sudo apt-get install docker-engine
    
    # 启动 docker
    sudo systemctl enable docker
    sudo systemctl start docker
    

    注意: docker-engine和docker-ce只是不同的docker版本。

    镜像加速

    • 国内网络导致后续拉取 Docker 镜像十分缓慢,需要修改镜像源。
    cd  /etc/docker/
    
    touch daemon.json # 创建该文件
    
    chmod 644 daemon.json
    
    vi daemon.json
    
    
    # 设置镜像源
    {
      "registry-mirrors": ["http://hub-mirror.c.163.com", "https://registry.docker-cn.com"]
    }
    
    • 设置完毕后需要重启docker使得配置生效。
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    注册docker云账号,创建自己的仓库

    • 可以去hub.docker.com注册,但是国内的网络需要翻墙才能注册成功。

    • 国内如阿里云等也提供docker云服务,注册一个;

    # 网址:https://dev.aliyun.com/search.html
    
    • 点击管理中心,如果还没有阿里云账号先注册账号,有会要求设置登录docker仓库的密码

    • 点击镜像加速器可以看到专用的加速地址,将其加入到daemon.json文件中

    • 创建镜像仓库的命名空间

    网址:https://cr.console.aliyun.com/?spm=5176.1971733.0.2.duOGn4#/namespace/index
    
    • 创建一个镜像仓库
    网址:https://cr.console.aliyun.com/?spm=5176.1971733.0.2.duOGn4#/imageList
    镜像仓库可以和代码仓库关联起来。从而实现自动构建镜像,现在我们只创建一个本地镜像私有仓库
    

    完成后可以看到仓库地址,点击管理里面有详细的信息和操作指南。

    # 登录阿里云docker registry:
    $ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
    
    # 从registry中拉取镜像:
    $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号]
    
    # 将镜像推送到registry:
    $ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com # 先登录
    $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号] # 标记镜像文件
    $ sudo docker push registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号] # 推送
    

    docker客户端的一些基本的命令

    docker run :创建一个新的容器并运行一个命令
    参数:
    -p: 端口映射,格式为:主机(宿主)端口:容器端口, 如-p 27018:27017
    -d: 后台运行容器,并返回容器ID;
    -v:目录映射,格式为:主机(宿主):容器, 如-v /var/data/db:/data/db 这样对容器的/data/db的操作会反应在主机的/var/data/db目录中
    -P: 直接将容器的端口映射主机的端口,不需要参数
    --name:指定创建的容器的名字,
    --restart:设置容器的重启策略;
    
    # 例:使用mongo:latest镜像创建一个容器,如果后面没有额外的命令则使用构建镜像时默认的启动命令,如果有则使用输入的命令
    docker run -p 27018:27017 -v $PWD/db:/data/db -d --name mongodb mongo:latest
    
    # 基本命令
    docker start :启动一个或多少已经被停止的容器
    docker stop :停止一个运行中的容器
    docker restart :重启容器
    docker kill :杀掉一个运行中的容器。
    docker rm :删除一个或多少容器
    docker create :创建一个新的容器但不启动它
    docker exec :在运行的容器中执行命令
    docker pause :暂停容器中所有的进程。
    docker unpause :恢复容器中所有的进程。
    docker ps -a : 查看创建的容器列表,-a指的是左右的容器。无论是运行或不运行的,-l指的是最新的;
    docker top : 查看容器内的所有进程
    docker port : 快速查看端口的映射情况
    
    # 镜像管理
    docker login -u 用户名 -p 密码 #登录一个镜像仓库
    docker logout  # 登出
    docker pull : 从镜像仓库中拉取或者更新指定镜像
    docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
    docker search : 从Docker Hub查找镜像
    
    # 本地镜像管理
    docker images : 列出本地镜像文件列表。
    # 使用REPOSITORY:TAG,即仓库源:标签来定义不同的镜像
    
    docker rmi : 删除本地一个或多少镜像。使用id删除
    

    本地镜像存放的位置:/var/lib/docker

    docker的基本使用

    • 比如说我们想使用docker运行nginx服务
    # 查看本机已有的镜像,发现没有nginx的镜像
    docker images # 使用REPOSITORY:TAG,即仓库源:标签来定义不同的镜像
    # 先去hub查找合适的nginx镜像
    docker search nginx
    # 找到一个合适的拉取到本地
    docker pull nginx:3.4 # 默认拉取的是latest,可以通过nginx:3.4的方式指定是3.4版本
    # 运行
    docker run --name mynginx -p 80:80 -d nginx:3.4
    或
    docker run --name mynginx -p 80:80 -d nginx:3.4 nginx # 后面的nginx是启动命令
    # 测试
    使用http://ip+port访问
    

    制作docker镜像

    如果拉取的镜像环境不满足我们的要求,我们可以先拉取然后改造成我们自己的镜像。

    从已经创建的容器中更新镜像,并且提交这个镜像

    • 当一个容器被创建并运行后,我们需要进入这个容器
    docker exec
    参数:
    -d :分离模式: 在后台运行
    -i :交互模式
    -t :分配一个伪终端
    
    # 进入容器打开一个交互终端
    docker exec -i -t (容器的ID/names) /bin/bash
    
    # 退出容器
    exit
    
    • 进入后到/根目录,可以发现容器的目录和linux操作系统的目录差不多,但这些都是虚拟的目录。

    • 更改容器

    # 进入容器更新
    apt-get update
    # 安装vim
    apt install vim
    
    # 现在这个容器相当于被我们改造了,为它提交一个副本
    exit # 先退出容器
    docker commit -m="install a vim" -a="cwp" (容器的id) (新的镜像文件的名字)
    # commit命令的参数:
    -m:提交的描述信息
    -a:指定镜像作者
    镜像文件命名规则:abc:def   # abc会变成REPOSITORY部分,def变成TAG部分
    
    # 查看我们的镜像列表
    docker images 
    
    # 将我们的镜像推送到阿里云仓库
    $ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com # 先登录
    # 标记镜像文件,即创建一个链接,用来描述该镜像是属于哪一个仓库的
    $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号] 
    $ sudo docker push registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号] # 推送
    
    # 在镜像版本中可以查看推送的镜像文件
    

    使用 Dockerfile 指令来创建一个新的镜像

    • 使用 Dockerfile是创建一个全新的镜像。
    touch Dockerfile
    # 编辑
    vi Dockerfile
    
    • 一个一般的Dockerfile的文件的格式
    #所有的命令都需要大写
    FROM    ubuntu:16.04  # 说明docker是基于linux版本构建的
    MAINTAINER      cwp "13926902570@163.com"  # 说明维护者和邮箱
    
    # 在linux系统中运行一些命令
    ADD sources.list /etc/apt/sources.list # 复制本地的apt源到docker的apt源中
    RUN apt-get update # 更新apt
    RUN apt install xxx  # 安装你想制作镜像的的应用
    EXPOSE  22 # 设置开放的端口
    EXPOSE  80
    CMD     /usr/sbin/sshd -D  # 设置容器运行时自动执行的命令,只能有一条,多个的话执行最后一条
    

    注意: 使用ADD时最好把需要复制的文件放置在dockerfile文件的同一目录下,防止找不到文件;

    • 完毕后创建镜像
    docker build -t test:v1 /home/   # 指定tag和dockerfile文件所在的目录
    #只有出现Successfully的字样才算是创建成功
    
    • 查看创建的镜像
    docker images
    

    参考:

  • 相关阅读:
    ios中要在tableview中添加事件的方法
    ios中键盘处理适合ipad 和iphone
    ios中LeveyPopListView 弹出view的用法
    ios中VRGCalendarView日历控件
    ios中MKHorizMenu用法
    ios中封装网络和tableview的综合运用
    ios中core Plot (2)
    ios中NSObject分类(2)
    ios中NSObject分类
    ios 中UIViewController的分类
  • 原文地址:https://www.cnblogs.com/cwp-bg/p/9365983.html
Copyright © 2011-2022 走看看