Centos7.4—Docker容器安装配置与基本操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7.4—Docker容器安装配置与基本操作相关的知识,希望对你有一定的参考价值。

Docker容器基本操作

目录
第一部分 实验环境
第二部分 安装配置Docker软件
第三部分 Docker镜像操作
第四部分 Docker容器操作
第五部分 制作镜像
第六部分 数据卷管理
第七部分 网络通信
第八部分 构建nginx镜像

第一部分 实验环境
Linux服务器一台
系统:CentOS 7.4
IP地址:192.168.80.10
技术分享图片
注意:需要该服务器能上公网

第二部分 安装配置docker软件
一:配置yum源,加入docker源
[[email protected] ~]# vi /etc/yum.repos.d/CentOS-Base.repo
技术分享图片
保存退出
二:安装docker软件
[[email protected] ~]# yum install -y docker-engine
[[email protected] ~]# systemctl enable docker //设置docker为开机自动启动
[[email protected] ~]# systemctl start docker //开启docker服务
[[email protected] ~]# docker version //查看docker服务版本
技术分享图片

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

  1. 搜索镜像
    命令语法:docker search 关键字 //用来搜索远端官方仓库中的共享镜像
    [[email protected] ~]# docker search lamp //搜索关键字为lamp的镜像
    技术分享图片
    NAME:镜像名称
    DESCRIPTION:描述
    STARS:星级
    OFFICIAL:是否官方创建
    AUTOMATED:是否主动创建
    [[email protected] ~]# docker search lamp -f stars=10
    技术分享图片
  2. 获取镜像
    命令语法:docker pull 名称
    [[email protected] ~]# docker pull nickistre/centos-lamp //下载镜像nickistre/centos-lamp
    技术分享图片
    (等待时间有点漫长,不是网速的问题,是国外网站资源少,下载的都是最新的版本)
  3. 查看镜像信息
    命令语法:docker images
    [[email protected] ~]# docker images //查看本地所有镜像
    技术分享图片
    REPOSITORY:镜像属于的仓库(名称)
    TAG:镜像的标签信息,标记同一个仓库中的不同镜像,默认为latest
    IMAGE ID:镜像的唯一ID号,唯一标识了该镜像
    CREATED:镜像创建时间
    SIZE:镜像大小
    //还可以根据镜像的唯一标识ID号,获取镜像详细信息
    [[email protected] ~]# docker inspect 7c85674b3b36
  4. 为镜像添加多个名称和标签
    命令语法:docker tag 名称:标签 新名称:新标签
    [[email protected] ~]# docker tag nickistre/centos-lamp:latest centos:lamp
    [[email protected] ~]# docker images //查看镜像
    技术分享图片
    //名称与标签可以添加多个,ID号是唯一的
  5. 删除镜像
    命令格式:docker rmi 名称:标签
    //镜像没有使用才能删除成功,且只是删除一个镜像,同一个ID下的其它镜像不会被删除
    或者:docker rmi 镜像ID号 (以ID号删除,会删除同一个ID下全部的镜像)
    Docker rmi –f ID //永久删除
    docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}") //删除所有没有使用的镜像
    [[email protected] ~]# docker rmi centos:lamp
    技术分享图片
    技术分享图片
  6. 存出镜像和载入镜像
    (1)存出镜像:将镜像保存成本地文件,这一过程叫作存出镜像,可以使用docker save命令进行操作。之后就可以拷贝该文件到其他机器。
    命令格式:docker save –o 存储文件名 存储的镜像
    [[email protected] ~]# docker save -o lamp nickistre/centos-lamp //将本地的nickistre/centos-lamp镜像存出为文件lamp
    技术分享图片
    [[email protected] ~]# docker rmi nickistre/centos-lamp //删除nickistre/centos-lamp镜像
    技术分享图片
    (2)载入镜像:将本地存出镜像文件导入到镜像库,这一过程叫作载入镜像。使用docker load或者docker –input进行载入操作
    命令格式:docker load < 存出的文件
    [[email protected] ~]# docker load < lamp //将文件lamp载入镜像到本地镜像库中
    技术分享图片
    技术分享图片
  7. 镜像上传
    //本地存储的镜像越来越多,就需要指定一个专门的地方存放这些镜像—仓库
    命令格式:docker push 名称:标签

第四部分 Docker容器操作
Docker容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见的,可以保证平台的安全性。还可以把容器看作是一个简易版的Linux环境,Docker利用容器来运行和隔离应用。
容器是Docker的另一个核心概念。简单说,容器是镜像的一个运行实例,是独立运行的一个或一组应用以及它们所必需的运行环境,包括文件系统、系统类库、shell环境等。镜像是只读模板,而容器会给这个只读模板一个额外的可写层。

  1. 容器的创建与启动
    (1)容器的创建就是将镜像加载到容器的过程
    命令格式:docker create [选项] 镜像 运行的程序
    常用选项:
    -i:让容器的输入保持打开
    -t:让Docker分配 一个伪终端
    [[email protected] ~]# docker create -it nickistre/centos-lamp /bin/bash //创建容器,默认是没有运行的
    技术分享图片
    [[email protected] ~]# docker ps –a //查看容器的运行情况,关注ID(唯一的)
    技术分享图片
    CONTAINER ID:容器的ID号(唯一的)
    IMAGE:加载的镜像
    COMMAND:运行的程序
    CREATED:创建时间
    STATUS:目前所处的状态
    PORTS:端口映射
    [[email protected] ~]# docker ps //查看运行中的容器
    技术分享图片
    (2)启动
    命令格式:docker start 容器的ID/名称
    [[email protected] ~]# docker start 45c927ad72d4 启动容器
    [[email protected] ~]# docker ps //查看运行的容器
    技术分享图片
    (3)创建并启动
    命令格式:docker run [选项] 镜像 运行的程序
    等同于先执行docker create命令,再执行docker start命令。需要注意只要后面的命令运行结束,容器就会停止。
    [[email protected] ~]# docker run centos:lamp /bin/bash -c ls / //创建容器的并启动执行一条shell命令,命令完成容器就停止
    技术分享图片
    [[email protected] ~]# docker ps –a
    技术分享图片
    (4)容器的暂停运行
    命令格式:docker pasuse 容器的ID
    [[email protected] ~]# docker pause fb89549a2d31
    技术分享图片
    [[email protected] ~]# docker unpause fb89549a2d31 //继续运行
    技术分享图片
  2. 容器的运行终止
    命令格式:docker stop 容器的ID/名称
    技术分享图片
    [[email protected] ~]# docker stop 45c927ad72d4
    技术分享图片
  3. 容器的进入
    命令格式:docker exec –it 容器ID/名称 /bin/bash
    [[email protected] ~]# docker exec -it 45c927ad72d4 /bin/bash //进入运行中的容器
    技术分享图片
  4. 容器的导出与生成镜像
    (1) 导出:将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态均可导出。
    命令格式:docker export 容器ID/名称 > 文件名
    [[email protected] ~]# docker export 6e22920fc447 > centostar
    技术分享图片
    (2) 将容器文件生成镜像
    命令格式:cat 文件名 | docker import – 生成的镜像名称:标签
    [[email protected] ~]# cat centostar | docker import - centos1:latest
    技术分享图片
  5. 容器的删除
    命令格式:docker rm 容器ID/名称
    Docker rm –f 容器ID/名称 //强制删除运行中的容器,不建议
    技术分享图片
    [[email protected] ~]# docker stop fb89549a2d31
    技术分享图片
    [[email protected] ~]# docker rm fb89549a2d31
    技术分享图片
    [[email protected] ~]# docker rm -f 6e22920fc447
    技术分享图片

第五部分 制作镜像

  1. 基于现有镜像制作
    将原始镜像加入容器并运行-》在原始镜像中部署各种服务-》退出容器-》使用下面命令将容器生成新的镜像
    实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像
    命令格式: docker commit [选项] 容器ID/名称 仓库名称:[标签]
    常用选项:
    -m:说明信息
    -a:作用信息
    -p:生成过程中停止容器的运行
    //首先启动一个容器
    技术分享图片
    //创建镜像
    [[email protected] ~]# docker commit -m "new" -a "daoke" a777634d6997 centos2:latest
    技术分享图片
  2. 基于本地模板创建
    参考上面第二小部分的第四点
  3. 基于dockerfile创建
    (1)建立工作目录
    [[email protected] ~]# mkdir apache
    [[email protected] ~]# cd apache/
    (3) 创建并编写dockerfile文件
    [[email protected] apache]# vi dockerfile
    #基于的基础镜像为centos
    FROM centos
    #维护该镜像的用户信息
    MAINTAINER The Centos Project<[email protected]>
    #镜像操作指令安装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 ["/run.sh"]
    保存退出
    (3)编写执行脚本内容
    [[email protected] apache]# vi run.sh
    #!/bin/bash
    rm -rf /run/httpd/* //清理httpd的缓存
    exec /usr/sbin/apachectl -D FOREGROUND //启动apache服务
    保存退出
    (4)创建测试页面
    [[email protected] apache]# vi index.html
    This is test
    保存退出
    (5)使用dockerfile生成镜像
    命令格式:docker build [选项] 路径
    常用选项:-t //指定镜像的标签信息
    [[email protected] apache]# docker build -t httpd:centos . //”.”表示当前路径
    技术分享图片
    技术分享图片
    (6)使用新的镜像运行容器
    [[email protected] apache]# docker run -d -p 9000:80 httpd:centos //用-p选项实现将本地端口9000映射到容器中的80端口
    技术分享图片
    //浏览器访问http://192.168.80.10:9000
    技术分享图片
  4. Ssh公钥验证—基于dockerfile生成镜像
    注意:需要联网
    (1)建立工作目录,创建公钥
    [[email protected] ~]# mkdir sshd
    [[email protected] ~]# ssh-keygen -t rsa //创建公钥,一路回车,不要设置密码
    [[email protected] ~]# cat .ssh/id_rsa.pub > sshd/authorized_keys
    [[email protected] ~]# cd sshd/
    (2)创建并编写Dockerfile文件
    [[email protected] sshd]# vi Dockerfile
    FROM centos1
    MAINTAINER The Centos Project<[email protected]>
    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 [ "/usr/sbin/init"]
    CMD ["/run.sh"]
    保存退出
    (3)编写执行脚本
    [[email protected] sshd]# vi run.sh
    #/bin/bash
    /usr/sbin/sshd –D
    保存退出
    (4)生成镜像
    [[email protected] sshd]# docker build -t sshd:centos .
    技术分享图片
    技术分享图片
    [[email protected] sshd]# docker run --privileged -itd -p 2222:22 35f737ae37e9 /usr/sbin/init
    //创建、启动容器,并且将ssh服务加入系统启动服务,该命令只适用于centos7以上版本
    技术分享图片
    [[email protected] /]# systemctl status sshd
    技术分享图片
    [[email protected] /]# yum install initscripts –y
    技术分享图片
    注意:centos7以下不需要,只要使用以下命令:
    docker run -itd -p 2222:22 9ccd132ae0f7 /bin/bash
    (5)验证测试
    [[email protected] sshd]# ssh 172.17.0.11 //远程访问,不需要输入密码直接进入
    技术分享图片

第六部分 数据卷管理

  1. 数据卷
    数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。类似于Linux下对目录进行的mount操作
    1.1 创建数据卷
    在docker run命令中使用-v选项可以在容器内创建数据卷;
    多次使用-v选项可创建多个数据卷;
    使用--name选项可以给容器创建一个友好的自定义名称。
    [[email protected] ~]# docker run -v /mnt:/mnt:ro -itd --name www centos1 /bin/bash
    技术分享图片
    1.2 进入容器中查看挂载情况
    [[email protected] ~]# docker exec -it 673e2ad4bb91 /bin/bash
    技术分享图片
    //查看本地mnt目录:
    技术分享图片
    [[email protected] ~]# docker inspect 673e2ad4bb91 //查看容器信息
  2. 数据卷容器
    用于不同的容器之间共享数据
    2.1 创建数据卷容器
    [[email protected] ~]# docker run -itd -v /datevo --name dbdata centos2 /bin/bash
    技术分享图片
    [[email protected] ~]# docker exec -it a00ca1ae829d /bin/bash
    技术分享图片
    2.2 使用—volumes-from来挂载一个容器中的数据卷到一个新的容器
    [[email protected] ~]# docker run -it --volumes-from dbdata --name db1 centos2 /bin/bash
    技术分享图片
    技术分享图片
    2.3 写数据验证
    [[email protected] ~]# docker start 3fee5101e8b0
    [[email protected] ~]# docker exec -it 3fee5101e8b0 /bin/bash
    [[email protected] /]# cd datevo/
    [[email protected] datevo]# touch aa.txt
    技术分享图片
    [[email protected] datevo]# exit
    [[email protected] ~]# docker exec -it a00ca1ae829d /bin/bash
    [[email protected] /]# cd datevo/
    技术分享图片

第七部分 网络通信

  1. 端口映射
    选项:
    -P:随机映射
    -p:指定要映射的端口
    用法:[[email protected] ~]# docker run -d -p 9000:80 httpd:centos
    [[email protected] ~]# docker run -d -P httpd:centos
    技术分享图片
    浏览器访问http://192.168.80.10:32768
    技术分享图片
  2. 容器间通信
    2.1 创建源容器
    [[email protected] ~]# docker run -itd -P --name web1 nickistre/centos-lamp:latest /bin/bash
    //创建并运行容器取名web1,端口号自动映射
    技术分享图片
    2.2 创建接收容器
    [[email protected] ~]# docker run -itd -P --name web2 --link web1:web1 nickistre/centos-lamp:latest /bin/bash //创建并运行容器取名web2,链接到web1和其通信
    技术分享图片
    2.3 测试容器互联通信
    [[email protected] ~]# docker exec -it c8f2674e7e6b /bin/bash
    [[email protected] /]# ping web1
    技术分享图片
    [[email protected] ~]# docker exec -it bd3673a6da2a /bin/bash
    [[email protected] /]# ping 172.17.0.10
    技术分享图片

第八部分 构建nginx镜像

  1. 创建工作目录
    [[email protected] ~]# mkdir nginx
    [[email protected] ~]# cd nginx
  2. 创建并编写dockerfile文件
    [[email protected] nginx]# vi Dockerfile
    FROM centos
    MAINTAINER The Centos Project<[email protected]>
    RUN yum install -y epel-release
    RUN yum install -y nginx
    #ADD nginx.conf /etc/nginx/nginx.conf
    #RUN echo "test page" >> /etc/nginx/nginx.conf
    ADD run.sh /run.sh
    RUN chmod 775 /run.sh
    EXPOSE 80
    #CMD [ "/usr/sbin/init"]
    CMD ["/run.sh"]
    保存退出
  3. 创建并编写启动脚本
    [[email protected] nginx]# vi run.sh
    #!/bin/bash
    /usr/sbin/nginx
    保存退出
  4. Dockerfile生成镜像
    [[email protected] nginx]# docker build -t nginx:centos .
    技术分享图片
    [[email protected] nginx]# docker images //查看生成的镜像
    技术分享图片
    [[email protected] nginx]# docker run --privileged -itd -p 80:80 e2201d9ab8a9 /usr/sbin/init
    //创建、启动容器,映射到本机80端口,并且将nginx加入系统启动服务,该命令只适用于centos7以上版本
    技术分享图片
    [[email protected] nginx]# docker exec -it 010bf45da174 /bin/bash
    [[email protected] /]# nginx
    [[email protected] /]# netstat -anpt | grep nginx
    技术分享图片
    浏览器访问http://192.168.80.10:80
    技术分享图片
    //构建完成

以上是关于Centos7.4—Docker容器安装配置与基本操作的主要内容,如果未能解决你的问题,请参考以下文章

centos7.4中安装docker

CentOS7.4下Docker的安装配置

在腾讯CentOS7.4云服务器上安装Docker并安装MySQL和Tomcat应用

Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理

Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理

Docker基本操作 安装redis 与 redis 主从配置