Docker入门

Docker 思想

  • 1.集装箱
  • 2.标准化(运输方式、存储方式、API接口)
  • 3.隔离

Docker 解决了什么问题?

  • 1.运行环境不一致
  • 2.独立运行、隔离进程
  • 3.快速增加服务器(京东已实现所有业务Docker,Docker实例有15万个)

Docker 几个专业术语

  • 1.image 称为镜像,可以理解为集装箱,image的实现是利用Linux系统底层的联合文件系统(文件分层),实现镜像存储。image可以对应bulid(构建)
  • 2.仓库可以理解为集装箱码头,对应ship(运输)
  • 3.容器可以理解为运行的程序,包含程序执行文件和系统运行文件,也是运行的image。对应run(执行)

Docker 在Linux安装

Docker支持以下的CentOS版本

CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本

使用 yum 安装(CentOS 7下)

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker

通过 uname -r 命令查看你当前的内核版本

[root@runoob ~]# uname -r

安装 Docker

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。

Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。

本文介绍 Docker CE 的安装使用。

  • 1.移除旧的版本:
  yum remove docker \
            docker-client \
            docker-client-latest \
            docker-common \
            docker-latest \
            docker-latest-logrotate \
            docker-logrotate \
            docker-selinux \
            docker-engine-selinux \
            docker-engine
  • 2.安装一些必要的系统工具:

    yum install -y yum-utils device-mapper-persistent-data lvm2
  • 3.建议使用阿里云的地址,国外的地址,下载比较慢,而且很容易链接超时:

    官网地址

    sudo yum-config-manager
    --add-repo
    https://download.docker.com/linux/centos/docker-ce.repo

    阿里云地址

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 4.更新 yum 缓存和安装docker

    yum makecache fast

    yum install docker-ce
  • 5.启动 Docker 后台服务

    sudo systemctl start docker
  • 6.测试运行 hello-world

    docker run hello-world

Docker 常用命令

Docker帮助命令

    docker version
    docker info
    docker --help

镜像命令


  查看本地镜像列表
  docker image ls 
  docker images [-a(列出本地所有的镜像-含中间映像层)/-q(只显示镜像ID)]

  docker pull  [不写默认中央仓库]  imagename  [TAG]--镜像版本默认最新版本

  docker search 镜像名字 [--no-trunc(显示完整的镜像描述)/-s(列出收藏数不小于指定值的镜像)/--automated(只列出automated build类型的镜像)]

  删除镜像
  docker rmi [-f(强制删除)] imageName/多个imageName

  删除全部镜像
  docker rmi -f $(docker images - q)

容器命令


  运行镜像
  docker run [options] imageName [TAG][COMMANP][ARG]
  [options说明]
  --name="name":为容器指定一个名称
  -d:后台运行模式
  -i:以交互模式运行容器
  -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  -P:随机分配端口映射
  -p:指定端口映射

  例: docker run -d -p 8080:8080 [-v xxxxxxxx]  tomcat《后台运行tomcat容器端口映射是8080,如果有-v可以用外部文件替代内部文件》

  查看已经运行的容器
  docker ps
  docker ps -a

  运行容器
  docker start containerId
  停止容器
  docker stop containerId
  docker kill containerId
  重启容器
  docker restart containerId
  删除容器
  docker rm containerId
  强制删除容器
  docker rm -f containerId
  容器不停止退出
  ctrl+P+Q
  进入正在运行的容器并以命令行交互
  docker exec(再容器中打开新的终端,并且可以启动新的进程)/attach(之间进入容器启动命令终端,不会启动新的进程) -it 容器名/容器ID  bash
  查看容器日志
  docker logs -f -t --tail containerId
  查看容器进程
  docker top containerId
  查看容器内部细节(重要)
  docker inspect containerId
  从容器内拷贝文件到主机上
  docker cp  containerId:文件绝对路径  宿主机文件路径
  替换docker 内部文件
  docker cp 文件路径 containerId:文件绝对路径  
  
  

运行nginx

docker run --name docker_nginx -d -p 80:80

-v /zzz/mynginx/nginx/log:/var/log/nginx

-v /zzz/mynginx/nginx/conf:/etc/nginx/conf.d

-v /zzz/mynginx/nginx/nginx.conf:/etc/nginx/nginx/conf

-v /zzz/mynginx/nginx/html:/lx/html

nginx

第一个-v:挂载日志目录

第二个-v:挂载配置目录

第三个-v:干脆把配置文件直接挂出来,不推荐

第四个-v:挂载项目目录

其他指令

docker container ls --all ---查看所有容器(包含未运行的容器)

docker commit -m "" -a "" [CONTAINER ID] [给新的镜像命名] -----打包成镜像

systemctl enable docker 设置docker开机自启动
docker update --restart 容器ID 设置docker容器自启动

部署镜像私有仓库

  • 1.下载镜像registry

    $ docker pull registry
  • 2.启动容器

    $ docker run -d -p 5000:5000 --name=registry-srv [-v /mydata/dockerRegistry:/var/lib/registry] registry

    图片
  • 3.作制本地镜像上传仓库

    $ docker tag 源镜像 仓库IP:5000/目标镜像
  • 4.上传tag镜像到仓库

    docker push 制作好的image

    说明:push 会出现错误 Get https://xxxxxxxx:5000/v1/_ping: http: server gave HTTP response to HTTPS client

    这是因为Docker在1.3.x之后默认docker registry使用的是https,为了解决这个问题,修改本地主机的docker启动配置文件

    $ vim /etc/docker/daemon.json 不存在就新建

    {"insecure-registries":["192.168.84.104:5000"]}
    图片

Q.E.D.


爱调味品的大哥