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

[经验分享] Linux虚拟化技术—Centos7.4下Docker容器安装配置与基本操作

[复制链接]

尚未签到

发表于 2019-2-22 06:31:39 | 显示全部楼层 |阅读模式
  Docker容器基本操作
  目录
第一部分  实验环境
第二部分  安装配置Docker软件
第三部分  Docker镜像操作
第四部分  Docker容器操作
第五部分  制作镜像
第六部分  数据卷管理
第七部分  网络通信
第八部分  构建nginx镜像
  第一部分  实验环境
Linux服务器一台
系统:CentOS 7.4
IP地址:192.168.80.10

注意:需要该服务器能上公网
  第二部分  安装配置docker软件
一:配置yum源,加入docker源
[root@localhost ~]# vi /etc/yum.repos.d/CentOS-Base.repo

保存退出
二:安装docker软件
[root@localhost ~]# yum install -y docker-engine
[root@localhost ~]# systemctl enable docker       //设置docker为开机自动启动
[root@localhost ~]# systemctl start docker         //开启docker服务
[root@localhost ~]# docker version        //查看docker服务版本

  第三部分  Docker镜像操作
Docker镜像是创建容器的基础,类似虚拟机的快照,可以理解为是一个面向Docker容器引擎的只读模板,比如:一个镜像可以是一个完整CentOS操作系统环境,称为一个CentOS镜像;可以是一个安装了MySQL的应用程序,称之为一个MySQL镜像等等
Docker提供了简单的机制来创建和更新现有的镜像,用户也可以从网卡下载已经做好的应用镜像来直接使用

  • 搜索镜像
    命令语法:docker search 关键字      //用来搜索远端官方仓库中的共享镜像
    [root@localhost ~]# docker search lamp    //搜索关键字为lamp的镜像

    NAME:镜像名称
    DESCRIPTION:描述
    STARS:星级
    OFFICIAL:是否官方创建
    AUTOMATED:是否主动创建
    [root@localhost ~]# docker search lamp -f stars=10

  • 获取镜像
    命令语法:docker pull 名称
    [root@localhost ~]# docker pull nickistre/centos-lamp     //下载镜像nickistre/centos-lamp

    (等待时间有点漫长,不是网速的问题,是国外网站资源少,下载的都是最新的版本)
  • 查看镜像信息
    命令语法:docker images
    [root@localhost ~]# docker images       //查看本地所有镜像

    REPOSITORY:镜像属于的仓库(名称)
    TAG:镜像的标签信息,标记同一个仓库中的不同镜像,默认为latest
    IMAGE ID:镜像的唯一ID号,唯一标识了该镜像
    CREATED:镜像创建时间
    SIZE:镜像大小
    //还可以根据镜像的唯一标识ID号,获取镜像详细信息
    [root@localhost ~]# docker inspect 7c85674b3b36
  • 为镜像添加多个名称和标签
    命令语法:docker tag 名称:标签 新名称:新标签
    [root@localhost ~]# docker tag nickistre/centos-lamp:latest centos:lamp
    [root@localhost ~]# docker images      //查看镜像

    //名称与标签可以添加多个,ID号是唯一的
  • 删除镜像
    命令格式:docker rmi 名称:标签
    //镜像没有使用才能删除成功,且只是删除一个镜像,同一个ID下的其它镜像不会被删除
    或者:docker rmi 镜像ID号  (以ID号删除,会删除同一个ID下全部的镜像)
    Docker rmi –f ID    //永久删除
    docker rmi -f $(docker images | grep "" | awk "{print \$3}") //删除所有没有使用的镜像
    [root@localhost ~]# docker rmi centos:lamp


  • 存出镜像和载入镜像
    (1)存出镜像:将镜像保存成本地文件,这一过程叫作存出镜像,可以使用docker save命令进行操作。之后就可以拷贝该文件到其他机器。
    命令格式:docker save –o 存储文件名 存储的镜像
    [root@localhost ~]# docker save -o lamp nickistre/centos-lamp     //将本地的nickistre/centos-lamp镜像存出为文件lamp

    [root@localhost ~]# docker rmi nickistre/centos-lamp      //删除nickistre/centos-lamp镜像

    (2)载入镜像:将本地存出镜像文件导入到镜像库,这一过程叫作载入镜像。使用docker load或者docker –input进行载入操作
    命令格式:docker load < 存出的文件
    [root@localhost ~]# docker load < lamp    //将文件lamp载入镜像到本地镜像库中


  • 镜像上传
    //本地存储的镜像越来越多,就需要指定一个专门的地方存放这些镜像—仓库
    命令格式:docker push 名称:标签
  第四部分  Docker容器操作
Docker容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见的,可以保证平台的安全性。还可以把容器看作是一个简易版的Linux环境,Docker利用容器来运行和隔离应用。
容器是Docker的另一个核心概念。简单说,容器是镜像的一个运行实例,是独立运行的一个或一组应用以及它们所必需的运行环境,包括文件系统、系统类库、shell环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。

  • 容器的创建与启动
    (1)容器的创建就是将镜像加载到容器的过程
    命令格式:docker create [选项] 镜像 运行的程序
    常用选项:
    -i:让容器的输入保持打开
    -t:让Docker分配 一个伪终端
    [root@localhost ~]# docker create -it nickistre/centos-lamp /bin/bash       //创建容器,默认是没有运行的

    [root@localhost ~]# docker ps –a    //查看容器的运行情况,关注ID(唯一的)

    CONTAINER ID:容器的ID号(唯一的)
    IMAGE:加载的镜像
    COMMAND:运行的程序
    CREATED:创建时间
    STATUS:目前所处的状态
    PORTS:端口映射
    [root@localhost ~]# docker ps    //查看运行中的容器
      
    (2)启动
    命令格式:docker start 容器的ID/名称
    [root@localhost ~]# docker start 45c927ad72d4    启动容器
    [root@localhost ~]# docker ps      //查看运行的容器

    (3)创建并启动
    命令格式:docker run [选项] 镜像 运行的程序
    等同于先执行docker create命令,再执行docker start命令。需要注意只要后面的命令运行结束,容器就会停止。
    [root@localhost ~]# docker run centos:lamp /bin/bash -c ls /    //创建容器的并启动执行一条shell命令,命令完成容器就停止

    [root@localhost ~]# docker ps –a

    (4)容器的暂停运行
    命令格式:docker pasuse 容器的ID
    [root@localhost ~]# docker pause fb89549a2d31

    [root@localhost ~]# docker unpause fb89549a2d31     //继续运行

  • 容器的运行终止
    命令格式:docker stop 容器的ID/名称

    [root@localhost ~]# docker stop 45c927ad72d4

  • 容器的进入
    命令格式:docker exec –it 容器ID/名称 /bin/bash
    [root@localhost ~]# docker exec -it 45c927ad72d4 /bin/bash      //进入运行中的容器

  • 容器的导出与生成镜像
    (1) 导出:将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。
    命令格式:docker export 容器ID/名称 > 文件名
    [root@localhost ~]# docker export 6e22920fc447 > centostar

    (2) 将容器文件生成镜像
    命令格式:cat 文件名 | docker import – 生成的镜像名称:标签
    [root@localhost ~]# cat centostar | docker import - centos1:latest

  • 容器的删除
    命令格式:docker rm 容器ID/名称
    Docker rm –f 容器ID/名称      //强制删除运行中的容器,不建议

    [root@localhost ~]# docker stop fb89549a2d31

    [root@localhost ~]# docker rm fb89549a2d31

    [root@localhost ~]# docker rm -f 6e22920fc447

  第五部分  制作镜像

  • 基于现有镜像制作
    将原始镜像加入容器并运行-》在原始镜像中部署各种服务-》退出容器-》使用下面命令将容器生成新的镜像
    实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像
    命令格式: docker commit [选项] 容器ID/名称 仓库名称:[标签]
    常用选项:
    -m:说明信息
    -a:作用信息
    -p:生成过程中停止容器的运行
    //首先启动一个容器

    //创建镜像
    [root@localhost ~]# docker commit -m &quot;new&quot; -a &quot;daoke&quot; a777634d6997 centos2:latest

  • 基于本地模板创建
    参考上面第四部分的第四点
  • 基于dockerfile创建
    (1)建立工作目录
    [root@localhost ~]# mkdir apache        
    [root@localhost ~]# cd apache/
    (3) 创建并编写dockerfile文件
    [root@localhost apache]# vi dockerfile      
    #基于的基础镜像为centos
    FROM centos
    #维护该镜像的用户信息
    MAINTAINER The Centos Project
    #镜像操作指令安装apache软件包
    #RUN yum -y update      //此处注意,由于我的centos镜像版本是最新的7.3,所以不需要更新,如果是7.3以下的版本,这里需要打开,自动更新到7.3,否则后面会有报错
    RUN yum -y install httpd
    #开启80端口
    EXPOSE 80
    #复制网站首页文件
    ADD index.html /var/www/html/index.html
    #将执行脚本复制到镜像中
    ADD run.sh /run.sh
    RUN chmod 755 /run.sh
    #启动容器时执行脚本
    CMD [&quot;/run.sh&quot;]
    保存退出
    (3)编写执行脚本内容
    [root@localhost apache]# vi run.sh        
    #!/bin/bash
    rm -rf /run/httpd/*                   //清理httpd的缓存
    exec /usr/sbin/apachectl -D FOREGROUND       //启动apache服务
    保存退出
    (4)创建测试页面
    [root@localhost apache]# vi index.html
    This is test
    保存退出
    (5)使用dockerfile生成镜像
    命令格式:docker build [选项] 路径
    常用选项:-t    //指定镜像的标签信息
    [root@localhost apache]# docker build -t httpd:centos .      //”.”表示当前路径


    (6)使用新的镜像运行容器
    [root@localhost apache]# docker run -d -p 9000:80 httpd:centos   //用-p选项实现将本地端口9000映射到容器中的80端口

    //浏览器访问http://192.168.80.10:9000

  • Ssh公钥验证—基于dockerfile生成镜像
    注意:需要联网
    (1)建立工作目录,创建公钥
    [root@localhost ~]# mkdir sshd
    [root@localhost ~]# ssh-keygen -t rsa      //创建公钥,一路回车,不要设置密码
    [root@localhost ~]# cat .ssh/id_rsa.pub > sshd/authorized_keys
    [root@localhost ~]# cd sshd/
    (2)创建并编写Dockerfile文件
    [root@localhost sshd]# vi Dockerfile
    FROM centos1
    MAINTAINER The Centos Project
    RUN yum install -y openssh-server
    RUN mkdir -p /var/run/sshd
    RUN mkdir -p /root/.ssh
    RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
    ADD authorized_keys /root/.ssh/authorized_keys
    ADD run.sh /run.sh
    RUN chmod 775 /run.sh
    EXPOSE 22
    CMD [ &quot;/usr/sbin/init&quot;]
    CMD [&quot;/run.sh&quot;]
    保存退出
    (3)编写执行脚本
    [root@localhost sshd]# vi run.sh
    #/bin/bash
    /usr/sbin/sshd –D
    保存退出
    (4)生成镜像
    [root@localhost sshd]# docker build -t sshd:centos .


    [root@localhost sshd]# docker run --privileged -itd -p 2222:22 35f737ae37e9 /usr/sbin/init  
    //创建、启动容器,并且将ssh服务加入系统启动服务,该命令只适用于centos7以上版本

    [root@2c2528b24914 /]# systemctl status sshd

    [root@2c2528b24914 /]# yum install initscripts –y

    注意:centos7以下不需要,只要使用以下命令:
    docker run -itd -p 2222:22 9ccd132ae0f7 /bin/bash
    (5)验证测试
    [root@localhost sshd]# ssh 172.17.0.11     //远程访问,不需要输入密码直接进入

  第六部分  数据卷管理

  • 数据卷
    数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。类似于Linux下对目录进行的mount操作
    1.1 创建数据卷
    在docker run命令中使用-v选项可以在容器内创建数据卷;
    多次使用-v选项可创建多个数据卷;
    使用--name选项可以给容器创建一个友好的自定义名称。
    [root@localhost ~]# docker run -v /mnt:/mnt:ro -itd --name www centos1 /bin/bash

    1.2 进入容器中查看挂载情况
    [root@localhost ~]# docker exec -it 673e2ad4bb91 /bin/bash

    //查看本地mnt目录:

    [root@localhost ~]# docker inspect 673e2ad4bb91      //查看容器信息
  • 数据卷容器
    用于不同的容器之间共享数据
    2.1 创建数据卷容器
    [root@localhost ~]# docker run -itd -v /datevo --name dbdata centos2 /bin/bash

    [root@localhost ~]# docker exec -it a00ca1ae829d /bin/bash

    2.2 使用—volumes-from来挂载一个容器中的数据卷到一个新的容器
    [root@localhost ~]# docker run -it --volumes-from dbdata --name db1 centos2 /bin/bash


    2.3 写数据验证
    [root@localhost ~]# docker start 3fee5101e8b0
    [root@localhost ~]# docker exec -it 3fee5101e8b0 /bin/bash
    [root@3fee5101e8b0 /]# cd datevo/
    [root@3fee5101e8b0 datevo]# touch aa.txt

    [root@3fee5101e8b0 datevo]# exit
    [root@localhost ~]# docker exec -it a00ca1ae829d /bin/bash
    [root@a00ca1ae829d /]# cd datevo/

  第七部分  网络通信

  • 端口映射
    选项:
    -P:随机映射
    -p:指定要映射的端口
    用法:[root@localhost ~]# docker run -d -p 9000:80 httpd:centos
    [root@localhost ~]# docker run -d -P httpd:centos

    浏览器访问http://192.168.80.10:32768

  • 容器间通信
    2.1 创建源容器
    [root@localhost ~]# docker run -itd -P --name web1 nickistre/centos-lamp:latest /bin/bash
    //创建并运行容器取名web1,端口号自动映射

    2.2 创建接收容器
    [root@localhost ~]# docker run -itd -P --name web2 --link web1:web1 nickistre/centos-lamp:latest /bin/bash       //创建并运行容器取名web2,链接到web1和其通信

    2.3 测试容器互联通信
    [root@localhost ~]# docker exec -it c8f2674e7e6b /bin/bash
    [root@c8f2674e7e6b /]# ping web1

    [root@localhost ~]# docker exec -it bd3673a6da2a /bin/bash
    [root@bd3673a6da2a /]# ping 172.17.0.10

  第八部分  构建nginx镜像

  • 创建工作目录
    [root@localhost ~]# mkdir nginx
    [root@localhost ~]# cd nginx
  • 创建并编写dockerfile文件
    [root@localhost nginx]# vi Dockerfile
    FROM centos
    MAINTAINER The Centos Project
    RUN yum install -y epel-release
    RUN yum install -y nginx
    #ADD nginx.conf /etc/nginx/nginx.conf
    #RUN echo &quot;test page&quot; >> /etc/nginx/nginx.conf
    ADD run.sh /run.sh
    RUN chmod 775 /run.sh
    EXPOSE 80
    #CMD [ &quot;/usr/sbin/init&quot;]
    CMD [&quot;/run.sh&quot;]
    保存退出
  • 创建并编写启动脚本
    [root@localhost nginx]# vi run.sh
    #!/bin/bash
    /usr/sbin/nginx
    保存退出
  • Dockerfile生成镜像
    [root@localhost nginx]# docker build -t nginx:centos .

    [root@localhost nginx]# docker images     //查看生成的镜像

    [root@localhost nginx]# docker run --privileged -itd -p 80:80 e2201d9ab8a9 /usr/sbin/init
    //创建、启动容器,映射到本机80端口,并且将nginx加入系统启动服务,该命令只适用于centos7以上版本

    [root@localhost nginx]# docker exec -it 010bf45da174 /bin/bash
    [root@010bf45da174 /]# nginx
    [root@010bf45da174 /]# netstat -anpt | grep nginx

    浏览器访问http://192.168.80.10:80

    //构建完成




运维网声明 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-675427-1-1.html 上篇帖子: 17、网络 下篇帖子: 20、《每天5分钟玩转Docker容器技术》学习--macvlan Network
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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