美文网首页
docker容器入门 2018-11-16

docker容器入门 2018-11-16

作者: Mr_Du_Biao | 来源:发表于2018-11-16 23:13 被阅读0次

一、docker介绍

docker的优势

  • 1、更高效的利用系统资源
    • 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统 资源的利用率更高。
      无论是应用执行速度、内存损耗或者文件存储速度,都要比传 统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运 行更多数量的应用。
  • 2、更快速的启动时间
    • 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接 运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启 动时间。大大的节约了开发、测试、部署的时间。
  • 3、一致的运行环境
    • 开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环 境不一致,导致有些 bug 并未在开发过程中被发现。
      而 Docker 的镜像提供了除内 核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码 在我机器上没问题啊” 这类问题。
  • 4、持续交付和部署
    • 对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意 地方正常运行。
      使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员 可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系 统进行集成测试,
      而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
      而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环 境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
  • 更轻松的迁移
    • 由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在 很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运 行结果是一致的。
      因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一 个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

容器的概念

  • 容器三大基本概念

    • 镜像 image
    • 容器 container
    • 仓库 repository
  • docker镜像

    • image相当于一个root文件系统,比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。
    • image的分层存储
      • 因为镜像包含完整的root文件系统,体积是非常庞大的,因此docker在设计时按照Union FS的技术,将其设计为分层存储的架构。
        镜像不是ISO那种完整的打包文件,镜像只是一个虚拟的概念,他不是一个完整的文件,而是由一组文件组成,或者多组文件系统联合组成。
  • docker容器

    • image和container的关系,就像面向对象程序设计中的 类和实例一样,镜像是静态的定义(class),容器是镜像运行时的实体(object)。
      容器可以被创建、启动、停止、删除、暂停
  • docker仓库

    • 镜像构建完成后,可以很容易的在宿主机上运行,如果要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务。docker registry就是这样的服务。
      一个docker registry可以包含多个仓库(repository),每个仓库有多个tag(标签),每个标签对应一个镜像。
      一个仓库包含同一个软件不同版本的镜像,标签就是用于标记版本的。

      ubantu:14.04
      ubantu:16.05
      不指定tag的话默认是
      ubantu:latest
      仓库名海会以 bob/nginx-proxy形式出现,表明docker registry多用户环境下的 用户名/软件名
  • docker Registry

    • Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服 务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务 供用户管理私有镜像。

    • 最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并 拥有大量的高质量的官方镜像。

CentOS安装docker

1.卸载旧版本

sudo 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.设置存储库

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.安装docker社区版

sudo yum install docker-ce
企业版是sudo yum install docker-ee

4.启动关闭docker

systemctl start docker
systemctl stop docker
systemctl status docker查看docker状态

查看版本信息

docker version

系统环境准备

docker最低支持centos7且在64位平台上,内核版本在3.10以上
可以通过unamr -r 系统环境

docker 加速器

DaoCloud 加速器 是广受欢迎的 Docker 工具,解决了国内用户访问 Docker Hub 缓慢的问题。DaoCloud 加速器结合国内的 CDN 服务与协议层优化,成倍的提升了下载速度。
/etc/docker/daemon.json #修改这个文件为如下内容

{
   "registry-mirrors": [
       "http://95822026.m.daocloud.io"
   ],
   "insecure-registries": []
}

或者用这条命令curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
事后重启dockersystemctl restart docker

docker的常用命令

启动docker:systemctl start/stop/restart/status docker 启动/关闭/重启/查看状态docker
systemctl enable docker设置开机启动docker
systemctl disable docker 取消开机启动
docker容器必须有后台进程在运行,如果没有运行的进程,docker容器实例就挂了
docker ps 查看 正在运行中的容器(存活)
docker ps -a 查看所有运行过的容器记录(挂掉的)
docker search ubuntu 查找ubuntu镜像
docker pull ubuntu 下载ubuntu镜像
docker image lsdocker images查看docker存在哪些镜像
docker rm 容器id删除容器相关记录
docker rmi 镜像名(镜像id) 删除镜像记录
docker rmdocker ps -aq`` 批量删除容器记录
docker run hello-world运行镜像,产生容器
docker exec -it 容器id 进入已经存在,且运行的容器

  • docker run -it --rm ubuntu bash 交互式运行docker容器,此条命令,会自动下载ubuntu镜像

    • docker run就是运行容器的命令
    • -it -t:在新容器内指定一个伪终端或终端。-i:允许你对容器内的标准输入 (STDIN) 进行交互。
    • -rm容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间
    • ubuntu:14.04 这指的是镜像文件
    • bash 指定用交互式的shell,因此需要bash命令
  • docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"docker在centos中运行一段shell脚本,后台运行

    • -d参数:后台运行容器,返回容器ID

docker容器常用命令
docker logs 容器id 查看容器内的标准输出日志
docker stop 容器id 停止容器运行
docker start 容器id 启动容器运行

构建自定义的镜像文件

1.我们进入交互式的centos容器中,发现没有vim命令

docker run -it centos

2.在当前容器中,安装一个vim

yum install -y vim

3.安装好vim之后,exit退出容器

exit

4.查看刚才安装好vim的容器记录

docker container ls -a

5.提交这个容器,创建新的image

docker commit 059fdea031ba chaoyu/centos-vim

6.查看镜像文件

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
chaoyu/centos-vim   latest              fd2685ae25fe        5 minutes ago       348MB

docker运行一个web应用

  • 1.运行一个python web app
    docker run -d -P training/webapp python app.py
    • 参数讲解
      • -d 后台运行容器
      • -P随机端口映射, 将容器中暴露的端口 > 随机映射一个宿主机的端口 5000 > 92320

docker run -d -p 9000:5000 training/webapp python app.py
-p 宿主机端口:容器端口, 小写的p是指定端口映射

  • docker查看容器内的端口映射状态
    docker port 容器id
    5000/tcp -> 0.0.0.0:9000

docker运行一个flask web应用,暴露端口供给windows使用

1.启动centos

docker run -it centos

2. 安装 easy_install 命令,python2软件包管理

yum install python-setuptools

3.安装flask

easy_install flask

4.编写好flask web脚本
from flask import Flask 

        app = Flask(__name__) 

        @app.route('/') 
        def index(): 
            return '<h1>Im flask web, im from docker !!!!!!! !</h1>' 

        #此脚本当做模块导入时候,__main__里代码不执行
        #当做脚本文件直接运行的时候,执行__main__代码
        if __name__ == '__main__':
           app.run(host='0.0.0.0',port=9000)
5.退出容器,产生容器id记录

exit

6.提交此容器记录,构建镜像

docker commit 976 s12/flask_web

7.查看镜像

docker images

8.运行flask_web镜像,暴露端口访问

docker run -d -p 7000:9000 s12/flask-web python /home/flask-web.py

9.此时在windows浏览器访问 7000端口的 flask应用

docker hub的使用

1.docker提供了一个类似于github的仓库dockerhub

网址https://hub.docker.com/需要注册使用

2.注册docker id后,在linux中登录dockerhub

docker login
注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
docker tag chaoyu/centos-vim yuchao163/centos-vim
语法是: docker tag 旧仓库名 yuchao163/仓库名

3.推送docker image到dockerhub

docker push yuchao163/centps-cmd-exec:latest

4.在dockerhub中检查镜像

https://hub.docker.com/

5.删除本地镜像,测试下载pull 镜像文件

docker pull yuchao163/centos-entrypoint-exec

docker私有仓库搭建:

-v参数介绍
  • 假设我要在docker容器中安装 nginx 软件,nginx软件有网页根目录root /opt/static/nginx,这个nginx静态文件,可以放在容器中管理,也可以通过-v参数挂载一个数据-v 宿主机/opt/staic/nginx 容器/opt/static/nginx,容器中的nginx软件,读取数据时候,通过-v参数,去宿主机读取
1.下载docker 私有仓库镜像

docker pull registry

2.启动私有仓库容器实例

docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry

3.检查私有仓库的容器id

docker ps

4.修改本地镜像的tag,便于推送到本地镜像仓库

docker tag 镜像名 10.0.0.10:5000/镜像名

5.修改docker配置文件,因为他默认不让推送非https的镜像
  • 1.找到本地docker文件
    vim /etc/docker/daemon.json
  • 2.写入配置,必须注意此文件是json格式!!!注意引号
{"registry-mirrors": ["http://95822026.m.daocloud.io"],
                "insecure-registries":["10.0.0.10:5000"]
            }
  • 3.将此文件,添加到docker服务脚本中
    vim /lib/systemd/system/docker.service
  • 4.写入以下配置,注意!!!,写入到[Service]配置块中,加载此配置文件
[Service]
EnvironmentFile=/etc/docker/daemon.json
  • 5.修改了docker配置文件,重新加载docker
    systemctl daemon-reload
  • 6.重启docker服务,使得生效
    systemctl restart docker
  • 7.由于重启了docker,所有的容器实例全挂了,因此要打开私有仓库的容器实例
      1. 检查私有仓库的容器记录docker ps -a
      1. 私有仓库的id docker start
    • 3.此时docker ps 检查 私有仓库服务是否启动
  • 8.推送本地镜像到私有docker仓库
    docker push 10.0.0.10:5000/hello-world
  • 9.docker私有仓库提供了API数据可供查看
    http://10.0.0.10:5000/v2/_catalog
  • 10.可以测试删除本地镜像,然后从私有仓库拖取镜像

相关文章

  • Docker入门与实战演示

    目录 什么是容器 Docker安装指南 Docker快速入门 Docker入门详解 如何开发容器化的Java程序 ...

  • docker容器

    docker快速入门01docker快速入门02KVM和Docker的对比 什么是容器? 容器就是在隔离的环境运行...

  • docker容器入门 2018-11-16

    一、docker介绍 docker的优势 1、更高效的利用系统资源由于容器不需要进行硬件虚拟以及运行完整操作系统等...

  • docker入门了解

    docker名词 docker入门地址c/s模型,镜像,仓库,容器,docker daemon,dockerfil...

  • Docker入门操作

    docker目录 查看Docker运行状态 第一个docker入门 查看容器 怎样给容器起一个名字? 重启容器的几...

  • docker-compose搭建nginx+php+mysql

    前言 上一篇《docker入门——安装(CentOS)、镜像、容器》讲了docker镜像获取、启动容器等基本使用,...

  • Docker入门及centOS7下安装

    Docker入门及centOS7下安装 简介:利用go语言实现的应用容器引擎 docker引擎基础是linux容器...

  • Docker容器——在Github上面的一本关于Docker的书

    Docker容器——在Github上面的一本关于Docker的书籍 背景 日常我们...

  • Docker入门

    Docker入门 一、Docker简介 1.什么是Docker Docker 是一个开源的应用容器引擎,让开发者可...

  • 30分钟掌握docker的基本使用

    docker 入门 目标 基于centos 7实例操作安装docker 获取mysql镜像 构建一个mysql容器...

网友评论

      本文标题:docker容器入门 2018-11-16

      本文链接:https://www.haomeiwen.com/subject/qxvpfqtx.html