设为首页 收藏本站
查看: 623|回复: 0

[经验分享] centos docker的使用

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-4-24 09:11:12 | 显示全部楼层 |阅读模式
  1. 镜像
  是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
  2. docker容器
  镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
  3. docker仓库
  存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库http://dockerpool.com/
  

  安装:
  centos6 上安装(6.5之前版本需要升级一下 yum update ) yum install -y epel-release
  yum install -y docker-io
  

  如果是centos7
  yum install -y docker
  

  启动docker
  /etc/init.d/docker start
  

  镜像管理:
  docker pull  centos   //从docker.com获取centos镜像,如果太慢,直接做个加速http://www.apelearn.com/bbs/thread-15126-1-1.html
  docker images //查看本地都有哪些镜像
  docker tag centos bob     //为docker镜像设置便签为bob,再使用docker images查看会多出一行,镜像的id和centos是一样的
  docker search centos     //从仓库里面搜索cnetos的镜像
  docker run -it bob /bin/bash   //用下载的镜像开启容器,-i 表示让容器的标准输入打开,-t 表示分配一个伪终端,要把-i和-t放在镜像名字的前面
  当镜像发生修改后,我们可以吧该镜像提交重新生成一个新版本进行再本地。
  docker ps   //查看运行的容器,加上-a可以查看没有运行的容器
  docker rmi bob//用来删除指定镜像,其中后面的参数可以是tag,如果是tag时,实际上是删除该tag,只要该镜像还有其他tag,就不会删除该镜像,后面的参数为镜像id时,则会彻底删除真个镜像,连通所有边卡一同删除。
  docker tag centos centos:test  //新添加的还可以指定tag
  

  docker start id   启动容器
  docker exec -it id号   /bin/bash    进入容器
  如果要使用ifconfig 查看ip,则需要安装net-tools包:yum install -y net-tools
  

  使用已有镜像的容器创建新的镜像
  docker commit -m "install  network" -a "bob" 3ew bob/centos
  -m  加改动的信息
  -a   指定作者相关的信息
  3ew  容器id
  在后面为新镜像的名字
  

  从容器里面退出来可以使用exit或ctrl+d
  

  docker基于本地模板导入创建镜像
  http://openvz.org/Download/templates/precreated
  模板导入为镜像
  cat centos-6-x86_64-minimal.tar.gz |docker import - centos-6-x86_64
  吧现有的镜像导出为一个文件
  docker save -o centos_net-64 bob/latest
  用文件恢复本地镜像
  docker load --input bob-centos.tar  或者
  docker load < bob-centos.tar
  

  可以吧自己的镜像上传到dockerhub官网上去,但需要有自己的账户。
  docker push images_name
  

  给镜像改名字
  docker tag 45fg centos-net-64:bob
  

  docker的使用和配置

  备份docker

  docker commit -m "yum net-tools" -a "bob" 12fgfd2462g3 bob/centos
  -m  改动的信息
  -a  作者的信息
  一串为容器id
  最后面是新镜像的名字
  

  查看启动的容器

  docker ps
  查看所有的容器
  docker ps -a
  创建容器,但容器并没有启动
  docker create -it centos
  启动一个容器
  docker start 容器id   //启动容器后,可以使用docker ps 查看,之前使用的docker run相当于先create,在start
  docker run -itd centos-6-x86 /bin/bash   -d在后台运行
  进入一个启动的容器
  docker exec -it 容器id /bin/bash
  exec  可以随意的退出和进入,不影响容器的启动和停止
  attach 不算好用,退出终端,容器也会停止

  

  docker logs 可以查看容器运行的历史信息
  给容器定义一个名字
  docker run -name bob -itd centos bash
  

  删除容器
  docker rm 513g
  强制删除容器
  docker rm -f  531g
  

  导出容器
  docker export container_id > fil2.tar
  生成bob镜像
  cat file.tar |docker import - bob
  

  创建新的镜像
  docker build -t centos:httpd
  

  把现有镜像导出为一个文件
  docker save -o bob-centos.tar bob:centos
  使用文件恢复本地镜像
  docker load --input bob-centos.tar 或者
  docker load < bob-centos.tar
  docker load - i centos-docker-image.tar    导入镜像到docker里
  

  docker的镜像以及一些数据都在/var/lib/docker目录下
  cd /var/lib/docker/
  

  杀死一个容器,或让一个容器退出
  docker kill cd5232f    后面是容器id
  

  启动、停止或重启
  docker start fa43521dfasdfe
  docker stop fasdfefaeae
  docker restart dfaeojfa43523
  

  

  指定端口
  docker run -d -p 5000:5000 centos
  

  docker仓库管理
  docker pull registry 下载registry镜像

  docker run -d -p 5000:5000 registry 启动镜像,并监听5000端口
  可以使用telnet 127.0.0.1:5000 测试
  curl 127.0.0.1:5000 可以访问它
  给镜像标记一下,必须带有私有仓库的ip和port
  docker tag centos 192.168.103.131:5000/centos
  docker push 192.168.103.131:5000/centos 上传到私有仓库
  vim /etc/init.d/docker

  把$exec -d $other_args改为
  $exec -d --insecure-registry 192.168.103.131:5000 $other_args
  然后重启服务
  service docker restart
  docker start c50  启动registry容器

  curl http://192.168.103.131:5000/v1/search  由于版本更改使用这个查看上传的镜像
  curl http://192.168.103.131:5000/v2/_catalog
  进入registry容器
  docker exec -it 953 sh或者bash
  docker exec -it 953 /bin/ls 可以查看里面的内容
  

  安装ipconfig功能
  yum install -y net-tools
  

  数据管理

  •   挂载本地目录到容器里面去

      docker run -itd -v /data/:/data1/ centos:bob bash
      -v 用来指定挂载目录,前面的是本地目录,后面的data1是容器的目录
  •   挂载数据卷
      docker run -itd --volumes-from suspicious_ptolemy centos bash
      --volumes-from 后面是名字
      相当于吧容器为suspicious_ptolemy容器的磁盘挂载到cenots上
  •   创建数据卷容器
      docker run -itd -v /data/ --name centos-test centos bash
      /data/指的是是容器里面的/data跟宿主机没有关系

  docker run -itd --volumes-from centos-test centos bash

  

  备份和恢复
  mkdir /data_backup

  docker rum --volumes-from centos-test -v /data_backup/:/backup bob:centos
  tar cvf /backup/data.tar /data/
  

  docker网络管理
  host模式;使用docker run时,使用--net=host指定

  docker使用的网络实际商河宿主机一样,在容器看到的网卡ip是宿主机上的ip

  container模式:使用--net=container:container_id  多容器使用共同的网络,看到的ip是一样的。
  none模式:使用--net=none 指定,这种模式下,不会配置任何网络
  bridge模式,使用--net=bridge指定
  默认模式就是使用这种网络模式,类是于vmware的nat的网络模式,中一个宿主机上的所有容器会在同一网段下。相互之间是可以通信的。
  

  外部访问容器
  docker run -itd -p 5123:80 centos-http:bob bash
  本地的5123端口对应容器的80端口
  

  docker容器互联
  先创建一个容器,命名为bob
  docker run -itd -p 13306:3306 --name bob centos bash
  再新建一个容器,命名abc,并与bob互联
  docker run -itd -p 1222:80 --name abc --link bob:abc centos-test bash
  

  docker配置桥接网络
  centos7
  l为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了。l安装pipwork
git clone https://github.com/jpetazzo/pipework
cp~/pipework/pipework /usr/local/bin/l开启一个容器 docker run -itd --net=none --name aming123 centos  /bin/bashlpipework br0  aming123 172.7.15.201/24@172.7.15.107  #201为容器的ip,@后面的ip为宿主机iplbrctladdif br0 eth0 #eth0为宿主机网卡,这一步为把br0和eth0桥接起来lipaddr add 172.7.15.107/24 br0 #把107的ip绑定在br0上ldocker exec -it aming123 /bin/bash #进去后ifconfig查看就可以看到新添加的ip
  

  centos6
  lcd /etc/sysconfig/network-scripts/; cpifcfg-eth0  ifcfg-br0lvi ifcfg-eth0 //增加BRIDGE=br0,删除IPADDR,NETMASK,GATEWAY,DNS1lvi ifcfg-br0//修改DEVICE为br0,Type为Bridge,把eth0的网络设置设置到这里来lservice network restartl安装pipwork:git clone https://github.com/jpetazzo/pipework;
cp~/pipework/pipework /usr/local/bin/l开启一个容器: docker run -itd --net=none --name aming123 centos  /bin/bashlrpm -Uvhhttps://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm#不安会报错Object "netns" is unknown,try "ip help"lpipework br0  aming123 172.7.15.201/24ldocker exec -it aming123 /bin/bash #进去后ifconfig查看就可以看到新添加的ip
  

  pipework br0  aming123 172.7.15.201/24@172.7.15.1  //@后面的ip为网关ip
  

  dockerfile创建镜像
  

  l1. FROM   //指定基于哪个基础镜像l格式 FROM <image> 或者  FROM <image>:<tag>, 比如lFROM centoslFROM centos:latest
  l2. MAINTAINER  //指定作者信息l格式  MAINTAIN <name> ,比如lMAINTAINER  aming aming@aminglinux.com
  l3. RUN   //镜像操作指令l格式为 RUN <command>  或者 RUN [“executable”, “param1”, “param2”],比如lRUN  yum install  httpdlRUN ["/bin/bash","-c", "echo hello"]
  l4. CMD // 三种格式:lCMD ["executable","param1", "param2"]lCMD command param1 param2lCMD ["param1","param2"]lRUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条。比如lCMD ["/bin/bash", "/usr/local/nginx/sbin/nginx","-c", "/usr/local/nginx/conf/nginx.conf"]
  l5. EXPOSE  l格式为 EXPOSE <port> [<port>...] , 比如lEXPOSE 22 80 8443l这个用来指定要映射出去的端口,比如容器内部我们启动了sshd和nginx,所以我们需要把22和80端口暴漏出去。这个需要配合-P(大写)来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)来指定。
  l6. ENV  l格式 ENV  <key> <value>, 比如  lENV PATH /usr/local/mysql/bin:$PATHl它主要是为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量lENV MYSQL_version5.6
  l7. ADD  格式 add <src> <dest>l将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。比如lADD <conf/vhosts> </usr/local/nginx/conf>
  l8. COPY  l格式同addl使用方法和add一样,不同的是,它不支持url
  l9. ENTRYPOINT  格式类似CMDl容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是:lCMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。比如,容器名字为amingl我们在Dockerfile中指定如下CMD:lCMD [“/bin/echo”, “test ”]l启动容器的命令是  dockerrun aming这样会输出 testl假如启动容器的命令是 docker run -it aming /bin/bash  什么都不会输出lENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行lENTRYPOINT ["echo","test"]ldocker run -it aming  123l则会输入 test  123 ,这相当于要执行命令  echotest  123
  l10. VOLUME l格式  VOLUME ["/data"]l创建一个可以从本地主机或其他容器挂载的挂载点。l
l11. USER  l格式 USER daemonl指定运行容器的用户l
l12. WORKDIR  l格式 WORKDIR  /path/to/workdirl为后续的RUN、CMD或者ENTRYPOINT指定工作目录
  

  l先下载nginx的配置文件 wget http://www.apelearn.com/study_v2/.nginx_conflvim Dockerfile //内容如下l############################################################
# Dockerfile tobuild NginxInstalled Containers
# Based on CentOS
############################################################
# Set the base image to CentOS
FROM centos
# File Author / Maintainer
MAINTAINERamingaming@aminglinux.com

# Install necessary tools
RUN yum install -y pcre-develwgetnet-tools gcc
RUN yum install -y zlibzlib-develmake
RUN yum install -y openssl-devel
l# Install Nginx
ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
RUN tar zxvfnginx-1.8.0.tar.gz
RUN mkdir -p/usr/local/nginxlRUN cd nginx-1.8.0.tar.gz &&./configure --prefix=/usr/local/nginx&& make && make install
RUN rm -fv /usr/local/nginx/conf/nginx.conf
COPY .nginx_conf /usr/local/nginx/conf/nginx.conf

# Expose ports
EXPOSE 80
# Set the default command to execute
# when creating a new container
ENTRYPOINT /usr/local/nginx/sbin/nginx -c/usr/local/nginx/conf/nginx.confl创建镜像:ldocker build -t centos_nginx .docker images 可以看到我们新建的镜像

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-451182-1-1.html 上篇帖子: Centos 6.7 系统启动失败 下篇帖子: centos 用ntpdate从时间服务器更新时间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表