美文网首页
centos 7.5 docker安装使用

centos 7.5 docker安装使用

作者: pokerface_max | 来源:发表于2020-07-25 11:15 被阅读0次

    前言

    Docker 是世界领先的软件容器平台。
    开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
    运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。
    企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

    检查环境

    1、 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker; 通过 uname -r 命令查看你当前的内核版本

    # 查看内核版本
    uname -r
    3.10.0-862.14.4.el7.x86_64
    

    2、查看系统是否已经安装过docker 如果安装过就先卸载

    yum list installed | grep docker
    yum -y remove docker-ce.x86_64 18.03.1.ce-1.el7.centos @docker-ce-stable
    

    准备安装

    安装需要使用root用户操作。

    1、更新安装包

    yum update
    

    2、安装依赖包

    yum install -y yum-utils device-mapper-persistent-data lvm2
    

    3、更新yum源

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    

    安装

    1、查看可用的安装版本

    yum list docker-ce --showduplicates | sort -r
    已加载插件:fastestmirror
    adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
    grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
    repo saved to /etc/yum.repos.d/docker-ce.repo
    [root@iZwz92d3g8mjsxop9ljh16Z docker]# yum list docker-ce --showduplicates | sort -r
    已加载插件:fastestmirror
    可安装的软件包
    Loading mirror speeds from cached hostfile
    docker-ce.x86_64            3:19.03.9-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.8-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.7-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.6-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.5-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.4-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.3-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.2-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.1-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:19.03.12-3.el7                    docker-ce-stable
    docker-ce.x86_64            3:19.03.11-3.el7                    docker-ce-stable
    docker-ce.x86_64            3:19.03.10-3.el7                    docker-ce-stable
    docker-ce.x86_64            3:19.03.0-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.9-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.8-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.7-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.6-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.5-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.4-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.3-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.2-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.1-3.el7                     docker-ce-stable
    docker-ce.x86_64            3:18.09.0-3.el7                     docker-ce-stable
    docker-ce.x86_64            18.06.3.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.06.2.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.06.1.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.06.0.ce-3.el7                    docker-ce-stable
    docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.2.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.06.0.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.3.ce-1.el7                    docker-ce-stable
    docker-ce.x86_64            17.03.2.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.1.ce-1.el7.centos             docker-ce-stable
    docker-ce.x86_64            17.03.0.ce-1.el7.centos             docker-ce-stable
    

    2、安装选定版本 (此外使用 18.06.3.ce-3.el7)

    yum install docker-ce-18.06.3.ce-3
    ...
    已安装:
      docker-ce.x86_64 0:18.06.3.ce-3.el7
    
    作为依赖被安装:
      audit-libs-python.x86_64 0:2.8.5-4.el7     checkpolicy.x86_64 0:2.5-8.el7                 container-selinux.noarch 2:2.119.2-1.911c772.el7_8     libcgroup.x86_64 0:0.41-21.el7        libsemanage-python.x86_64 0:2.5-14.el7
      libtool-ltdl.x86_64 0:2.4.2-22.el7_3       policycoreutils-python.x86_64 0:2.5-34.el7     python-IPy.noarch 0:0.75-6.el7                         setools-libs.x86_64 0:3.3.8-4.el7
    
    完毕!
    

    3、设置开机启动

    systemctl start docker
    systemctl enable docker
    

    4、验证是否安装成功

    docker version
    Client:
     Version:           18.06.3-ce
     API version:       1.38
     Go version:        go1.10.3
     Git commit:        d7080c1
     Built:             Wed Feb 20 02:26:51 2019
     OS/Arch:           linux/amd64
     Experimental:      false
    
    Server:
     Engine:
      Version:          18.06.3-ce
      API version:      1.38 (minimum version 1.12)
      Go version:       go1.10.3
      Git commit:       d7080c1
      Built:            Wed Feb 20 02:28:17 2019
      OS/Arch:          linux/amd64
      Experimental:     false
    

    Docker 常用命令

    # 查看docker版本信息
    docker -v
    
    # 查看docker详细信息
    docker info
    
    #  查看镜像 列表
    docker images 
    # 搜索远程镜像
    docker search ${image_name}
    
    # 构建镜像
    docker build -t ${author/}${image_name}:${tag} ${dir}
    ${image_name} 镜像名字
    ${tag} TAG 不写则使用latest
    ${dir} 目录
    
    # 查看容器列表
    docker ps
    docker ps -a
    docker ps -l
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    
    # 查看特定的容器状态
    docker ps | grep ${CONTAINER_ID}    #查看容器状态
    
    
    # 启动一个容器
    docker run ${image_name}
    docker run --name ${container_name} -d -p ${device_port}:${docker_port} ${author/}${image_name}:${tag} -it -v ${device_dir}:${docker_dir} /bin/bash
    --name ${container_name} 指定容器名字
    -d 后台运行
    -p ${device_port}:{docker_port} 映射端口 服务器物理端口:Docker端口 
    -P 随机分配端口
    -it 分配交互式终端
    -v ${device_dir}:${docker_dir} 服务器地址:Docker地址
    /bin/bash 覆盖容器的指令(放在image_name后)
    
    # 启动容器
    docker start ${container_id}|${container_name}
    # 停止一个容器
    docker stop ${container_id}|${container_name}
    
    # 查看容器日志
    docker logs ${container_id}|${container_name}
    # 实时查看 
    docker logs -f ${container_id}|${container_name}
    
    # kill 容器 
    docker kill ${container_name}
    # 移除container
    docker rm ${container_name}
    docker container rm ${container_name}
    # 移除所有container
    docker rm -f  'docker ps -a -q`
    
    # 进入容器命令行
    docker exec -it 77cd6bef4dc9 /bin/bash
    

    DockerFile 详解

    制作Docker image 有两种方式:

    • 一是使用 Docker container,直接构建容器,再导出成 image 使用。
    • 二是使用 Dockerfile,将所有动作写在文件中,再 build 成 image。Dockerfile 的方式非常灵活,推荐使用。

    Dockerfile 分为四部分:

    • 基础镜像信息
    • 维护者信息
    • 镜像操作指令
    • 容器启动时执行指令。
      其中 ’#’ 为 Dockerfile 中的注释。

    一个简单制作nginx的例子

    # This my first nginx Dockerfile
    # Version 1.0
    
    # Base images 基础镜像
    FROM centos
    
    #MAINTAINER 维护者信息
    MAINTAINER tianfeiyu 
    
    #ENV 设置环境变量
    ENV PATH /usr/local/nginx/sbin:$PATH
    
    #ADD  文件放在当前目录下,拷过去会自动解压
    ADD nginx-1.8.0.tar.gz /usr/local/  
    ADD epel-release-latest-7.noarch.rpm /usr/local/  
    
    #RUN 执行以下命令 
    RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
    RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
    RUN useradd -s /sbin/nologin -M www
    
    #WORKDIR 相当于cd
    WORKDIR /usr/local/nginx-1.8.0 
    
    RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
    
    RUN echo "daemon off;" >> /etc/nginx.conf
    
    #EXPOSE 映射端口
    EXPOSE 80
    
    #CMD 运行以下命令
    CMD ["nginx"]
    

    参数详解

    FROM 基础镜像

    具体使用:

    FROM <image> 
    FROM <image>:<tag>
    

    说明:此命令必须为Dockerfile里的第一句。

    MAINTAINER 作者信息

    具体使用:

    MAINTAINER <name>
    

    RUN 运行命令

    RUN <command> 
    # 使用exec 执行命令
    RUN ["executable", "param1", "param2"]
    # 使用指定的命令工具执行
    RUN [“/bin/bash”, “-c”,”echo hello”]
    

    WORKDIR 指定路径

    具体使用

    WORKDIR /path/to/workdir
    
    # 每一次WORKDIR都会基于上一次WORKDIR 来指定目录
    WORKDIR /dira   
    WORKDIR dirb
    WORKDIR dirc
    # 最终目录为 /dira/dirb/dirc
    

    说明: 为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。

    EXPOSE 指定容器暴露的端口

    具体使用:

    # 可以指定多个端口
    EXPOSE <port> [<port>...]
    

    说明:如果在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口。

    ENV 定义环境变量

    具体使用:

    ENV PATH /usr/local/nginx/sbin:$PATH
    

    COPY 复制文件(不会进行解压)

    具体使用

    # 复制物理主机上的文件到docker容器中
    COPY <src> <dest>
    

    ADD 也是复制文件(如果是压缩文件,会自动解压)

    具体使用:

    ADD <src> <dest>
    

    说明: 其中src可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件,复制进容器会自动解压。

    VOLUME 挂载文件夹

    具体使用

    VOLUME <dir>
    VOLUME [<dir>]
    

    说明:
    创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

    USER 指定运行用户

    具体使用

    USER daemon
    

    说明:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如: RUN useradd -s /sbin/nologin -M www

    ENTRYPOINT 容器启动后执行命令

    具体使用:

    ENTRYPOINT ["executable", "param1", "param2"] 
    # shell中执行
    ENTRYPOINT command param1 param2 
    

    说明: 不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效

    CMD

    具体使用

    # 使用 exec 执行,推荐方式
    CMD ["executable","param1","param2"] 
    # 在 /bin/bash 中执行,提供给需要交互的应用
    CMD command param1 param2
    # 提供给 ENTRYPOINT 的默认参数
    CMD ["param1","param2"] 
    

    说明:指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

    ENTRYPOINT 和 CMD 的区别:

    ENTRYPOINT 指定了该镜像启动时的入口,CMD 则指定了容器启动时的命令,当两者共用时,完整的启动命令像是 ENTRYPOINT + CMD 这样。使用 ENTRYPOINT 的好处是在我们启动镜像就像是启动了一个可执行程序,在 CMD 上仅需要指定参数;另外在我们需要自定义 CMD 时不容易出错。
    ENTRYPOINT 不能覆盖掉执行时的参数,CMD 可以掉覆盖默认的参数。
    可以使用以下命令覆盖默认的参数,方便调试 Dockerfile 中的 bug:

    docker run -it --entrypoint=/bin/bash <author>/<image>:<tag>
    

    参考文章

    为什么要使用docker
    Dockerfile详解

    相关文章

      网友评论

          本文标题:centos 7.5 docker安装使用

          本文链接:https://www.haomeiwen.com/subject/aopstktx.html