sunny03 发表于 2018-5-29 11:36:08

docker简明教程(一)

  作者:付炜超qq:961769710
  

  前言:去年寒假的时候萌生的把自己对于docker的理解写成简明教程的样子,想用最直白的言语给大家展示出现在特别火的docker技术,以下的所以内容都是本人写的,绝非复制、粘贴。如果觉得我写的好,对大家有用的话,希望能上推荐博客。我会在近段时间把部分二展示出来,这一次展示的信息量我想大家需要消化几天。谢谢51cto这个平台,能让我把自己会的知识分享给更多的爱技术的人。
  

  

  

  一、Docker简介
  Docker是基于GO语言实现的云开源项目,诞生于2013年初。
  Docker引擎的基础是linux容器(LXC)技术。
  Docker的好处:通过容器打包应用。迁移的话节约时间,降低部署过程中出现风险。
  Docker在运维中的优势:一次创建或配置,终身可以使用
  Docker与虚拟机的比较:更快、对资源需求更少、指令简单,学习成本低、Dockerfile
  

  二、Docker镜像
  Docker镜像是一个面向Docker引擎的只读模板,它是创建Docker容器的基础。
  

  可以下载一个centos的系统镜像
  也可以下载一个包含lamp软件的镜像
  

  

  三、Docker容器
  Docker利用容器来运行和隔离应用
  容器是镜像的实例。可以启动、开始、停止、删除。
  镜像自身是只读的,容器从镜像启动,Docker会在镜像最上层创建一个可写层,镜像本身保持不变。
  

  

  四、Docker仓库
  Docker集中存放镜像的文件的地方。
  分为两种:共有的、私有的。
  

  

  五、Docker安装
  我用的是centos7 的系统。
  直接使用系统自带的yum源就可以,redhat需要自己设置。
  # yum install docker -y
  

  测试:
  

  # docker
  Usage: docker COMMAND
  docker daemon [ --help | ... ]
  docker [ --help | -v | --version ]
  

  直接在命令行敲dokcer会有很多输出,为了节省篇幅,我只截取了一部分
  

  

  六、Docker镜像查找
  docker查找镜像命令很简单
  首先要启动docker
  /bin/systemctl start docker.service
  

  查找某一个我们需要的镜像
  

  # docker search lamp
  INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  docker.io docker.io/reinblau/lamp Dockerfile for PHP-Projects with MySql client 15
  

  会有很多输出,但是我为了省地方,那个数字(15)越大 它越受欢迎!
  

  

  七、Docker镜像获取
  获取docker镜像 docker pull name[:tag] tag标签是版本号。
  

  # docker pull ubuntu
  Using default tag: latest
  Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from library/ubuntu
  。。。。。
  

  可以看到,如果不加标签 默认是 latest
  

  

  八、Docker查看那本地镜像信息
  

  我们可以利用docker images 查看本地镜像信息,方便我们使用
  # docker images
  REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  docker.io/ubuntu latest af88597ec24b 39 hours ago 187.9 MB
  #
  

  列出的信息有 镜像名、标签、镜像id、创建的时间、 大小。
  

  

  

  九、Docker镜像使用
  

  当镜像从镜像站下载到本地以后我们就可以使用了
  

  # docker run -t -i docker.io/ubuntu /bin/bash
  root@5dbb944ba21f:/#
  

  -t选项让docker分配一个伪终端并且绑定到容器的标准输入上,-i 让标准输入保持打开。
  

  让你体验一下docker的神奇之处!!!!!
  

  root@5dbb944ba21f:/# top
  top - 10:29:55 up 1:02, 0 users, load average: 0.01, 0.06, 0.09
  Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie
  %Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
  KiB Mem: 1003164 total, 832668 used, 170496 free, 1820 buffers
  KiB Swap: 1048572 total, 0 used, 1048572 free. 389104 cached Mem
  

  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  1 root 20 0 18164 1976 1496 S 0.0 0.2 0:00.08 bash
  16 root 20 0 19740 1316 1012 R 0.0 0.1 0:00.00 top
  

  看到没 就bash 和top两个进程!!!!!
  

  

  

  

  十、Docker镜像删除
  

  对于我们不再使用的镜像我们可以删除节省空间。
  # docker rmi -f docker.io/ubuntu
  Untagged: docker.io/ubuntu:latest
  Deleted: af88597ec24be1eb2028ec63fadae21be693428196a917fa24632ec41a791754
  Deleted: b2ae0a712b396bf106bd301a41bbff642bd6dfa861596092ac34513b36425241
  Deleted: 02e5bca4149be0f122442345d3aa3bcec2498b07692c48415bcaeaeb970c712c
  Deleted: 895b070402bd7d26d9595e939422c598e8cc1f4ade1b34e2a9659138ffe3c5c9
  

  测试:
  # docker images
  REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  #
  

  再次查看那本地的镜像我们可以发现原来的那个 镜像被删除了。
  

  

  十一、Docker利用已有的镜像容器创建你自己的镜像
  

  首先利用docker.io/ubuntu:latest镜像进入一个容器
  # docker run -ti docker.io/ubuntu:latest /bin/bash
  

  然后在里面创建一个fwc的目录
  

  root@6378eb77bbdf:/# mkdir fwc
  

  查看我们的创建
  

  root@6378eb77bbdf:/# ls
  bin dev fwc lib media opt root sbin sys usr
  boot etc home lib64 mnt proc run srv tmp var
  

  推出容器,记住容器id
  root@6378eb77bbdf:/# exit
  

  容器id不用全部记住,记一部分就行!
  

  利用提交,创建一个新的镜像
  

  # docker commit -m "mkdir fwc dirctory" -a "fuchao" 6378eb77b fuchao
  上面的是命令,下面的是输出。
  8be9f7652ab5d402033dda3d0ba661f540a5111371b7ef03241407f8418d2fd3
  

  -m:后面跟的是提交的信息
  -a:后面跟的是作者。
  

  现在我们可以查看本地的镜像了
  

  # docker images
  REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  fuchao latest 8be9f7652ab5 11 seconds ago 202.3 MB
  docker.io/ubuntu latest af88597ec24b 41 hours ago 187.9 MB
  

  可以看到多了一个fuchao的镜像。
  

  

  

  十二、Docker把镜像存成本地文件
  

  我们可以把上一篇教程中的fuchao 镜像存成本地文件。
  

  # docker save -o fuchao_latest fuchao:latest
  

  测试:
  

  # ls
  anaconda-ks.cfg fuchao_latest
  #
  

  可以看到本地已经生成了 fuchao_latest文件。
  

  

  

  十三、Docker把本地文件导入本地镜像库
  

  首先删除原有的镜像
  

  # docker rmi fuchao
  Untagged: fuchao:latest
  Deleted: 8be9f7652ab5d402033dda3d0ba661f540a5111371b7ef03241407f8418d2fd3
  

  查看那本地镜像库
  

  # docker images
  REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  docker.io/ubuntu latest af88597ec24b 41 hours ago 187.9 MB
  docker.io/centos latest 60e65a8e4030 12 days ago 196.6 MB
  

  把本地文件导入到本地镜像库
  

  # docker load < fuchao_latest
  

  测试:
  

  # docker images
  REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  fuchao latest 8be9f7652ab5 19 minutes ago 202.3 MB
  docker.io/ubuntu latest af88597ec24b 41 hours ago 187.9 MB
  docker.io/centos latest 60e65a8e4030 12 days ago 196.6 MB
  

  

  

  十四、Docker给镜像创建标签
  

  给镜像创建标签
  # docker tag fuchao:latest fuchao_push:latest
  

  测试:查看
  

  # docker images
  REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  fuchao latest 8be9f7652ab5 40 minutes ago 202.3 MB
  fuchao_push latest 8be9f7652ab5 40 minutes ago 202.3 MB
  

  

  

  十五、Docker中上传本地镜像到DockerHub中
  

  首先,你需要注册一个帐号。
  

  想要上传的话首先要登录
  # docker login
  Username: fwc521
  Password:
  Email: 961769710@qq.com
  WARNING: login credentials saved in /root/.docker/config.json
  Login Succeeded
  #
  

  登录成功,接下来就可以了
  

  # docker push fwc521/latest
  

  Do you really want to push to public registry? : y
  The push refers to a repository (len: 0)
  8be9f7652ab5: Pushed
  

  fwc521 是我的帐号
  

  

  

  十六、Docker创建容器
  

  Docker创建容器
  root@docker ~]# docker create -it docker.io/ubuntu:latest
  5bd73ca9dcdb9f5ba8b01ad56662ef16482044801e1224528ded8b4bff42becc
  

  查看容器进程
  # docker ps -a
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 9 seconds ago Created
  

  启动创建的容器
  # docker start 5bd73ca9dcd
  5bd73ca9dcd
  再次查看容器进程
  # docker ps -a
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 3 minutes ago Up 8 seconds sad_brahmagupta
  

  Docker新建并启动容器
  

  # docker run -t -i docker.io/ubuntu:latest /bin/bash
  root@11c1437847cb:/#
  

  

  十七、Docker终止容器
  

  终止运行中的容器
  # docker stop 5bd73ca9d
  5bd73ca9d
  

  要知道容器的id的一部分,(可以唯一的辨识出容器!)
  

  测试:查看
  

  # docker ps -a
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  11c1437847cb docker.io/ubuntu:latest "/bin/bash" 2 minutes ago Exited (0) 21 seconds ago mad_fermi
  5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 10 minutes ago Exited (0) 9 seconds ago sad_brahmagupta
  

  可以看到第二个 5d开头的已经终止了。
  

  

  

  十八、Docker启动终止的容器
  

  启动终止状态的容器
  # docker start 5bd73
  5bd73
  

  测试:查看
  

  # docker ps
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 19 minutes ago Up 8 seconds sad_brahmagupta
  #
  

  可以看到上一篇我们终止 的容器现在已经启动了
  

  重启容器
  

  # docker restart 5bd73
  5bd73
  # docker ps
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 22 minutes ago Up 4 seconds sad_brahmagupta
  #
  

  

  

  十九、Docker守护状态进行
  Docker以守护状态运行
  # docker run -d docker.io/ubuntu:latest /bin/sh -c "while true;do echo fwc; \
  

  sleep 1;done"
  9cd3a0312b95f3ff52138547a983ea16bb2fa3a0d5cb8f4b198a515ae0fd71e6
  查看容器信息
  # docker ps
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9cd3a0312b95 docker.io/ubuntu:latest "/bin/sh -c 'while tr" 5 seconds ago Up 3 seconds elated_lalande
  

  获取容器输出信息
  

  # docker logs 9cd3a031
  fwc
  fwc
  fwc
  fwc
  fwc
  fwc
  

  

  二十、Docker 进去到运行的容器里
  

  首先查找到一个运行的容器
  

  # docker ps -a
  5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 36 minutes ago Up 14 minutes sad_brahmagupta
  

  进入
  

  # docker exec -ti 5bd73ca9dcdb /bin/bash
  root@5bd73ca9dcdb:/#
  

  

  

  二十一、Docker删除容器
  

  删除终止状态的容器
  

  首先找到一个终止 状态的容器
  

  # docker ps -a
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9cd3a0312b95 docker.io/ubuntu:latest "/bin/sh -c 'while tr" 11 minutes ago Exited (0) 5 minutes ago elated_lalande
  

  删除
  

  # docker rm 9cd3a0312b95
  9cd3a0312b95
  

  测试:查看
  

  # docker ps -a
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2424fa7a5346 docker.io/ubuntu:latest "/bin/sh -c top" 14 minutes ago Exited (1) 14 minutes ago dreamy_ritchie
  8c8420123536 docker.io/ubuntu:latest "/bin/sh" 15 minutes ago Exited (0) 15 minutes ago modest_banach
  11c1437847cb docker.io/ubuntu:latest "/bin/bash" 35 minutes ago Exited (0) 32 minutes ago mad_fermi
  5bd73ca9dcdb docker.io/ubuntu:latest "/bin/bash" 42 minutes ago Up 20 minutes sad_brahmagupta
  6378eb77bbdf docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago berserk_bhaskara
  940e7ebbb19d docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (127) 3 hours ago desperate_mayer
  5dbb944ba21f docker.io/ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago hopeful_mahavira
  #
  

  可以发现已经没有了。
  

  删除运行中的容器
  

  首先找到一个运行中的容器,从上面的测试输出可以发现 id是 5bd73ca9dcdb 的是运行状态的。
  

  删除:
  

  # docker rm -f 5bd73ca9dcdb
  5bd73ca9dcdb
  #
  

  测试:查看
  

  # docker ps -a
  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2424fa7a5346 docker.io/ubuntu:latest "/bin/sh -c top" 18 minutes ago Exited (1) 18 minutes ago dreamy_ritchie
  8c8420123536 docker.io/ubuntu:latest "/bin/sh" 19 minutes ago Exited (0) 19 minutes ago modest_banach
  11c1437847cb docker.io/ubuntu:latest "/bin/bash" 38 minutes ago Exited (0) 36 minutes ago mad_fermi
  6378eb77bbdf docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago berserk_bhaskara
  940e7ebbb19d docker.io/ubuntu:latest "/bin/bash" 3 hours ago Exited (127) 3 hours ago desperate_mayer
  5dbb944ba21f docker.io/ubuntu "/bin/bash" 4 hours ago Exited (0) 4 hours ago hopeful_mahavira
  #
  

  可以发现已经没有了
  

  

  

  总结:上面的教程是我花费半个多月时间记录下来的,我不想用冗余的文字,我只想用最简单的大白话,和清楚的例子给大家展示docker的魅力!!!!希望大家可以坚持自己的梦想!!!
  

  
页: [1]
查看完整版本: docker简明教程(一)