docker容器入门 2018-11-16

一、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.可以测试删除本地镜像,然后从私有仓库拖取镜像
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容