走进docker-初识

什么是Docker容器?

容器是打包代码及其所有依赖项的软件的标准单元,因此应用程序可以从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级的,独立的,可执行的软件软件包,其中包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置 容器映像在运行时会成为容器,对于Docker容器,映像会在Docker Engine上运行时成为容器。不论基础架构如何,容器化软件都可用于基于Linux和Windows的应用程序,始终运行相同。容器将软件与其环境隔离开来,并确保尽管开发和登台之间存在差异,但软件仍可以均匀地工作。 Docker容器具有以下特点:

  • 标准: Docker创建了容器的行业标准,因此它们可以在任何地方移植
  • 轻量级:容器共享计算机的OS系统内核,因此不需要每个应用程序都具有OS,从而提高了服务器效率并降低了服务器和许可成本
  • 安全:应用程序在容器中更安全,并且Docker提供了业界最强大的默认隔离功能

Docker基础

  • Docker环境安装 Ubuntu Docker 安装

    #卸载旧版本
    $ sudo apt-get remove docker docker-engine docker.io       containerd runc
    #更新apt
    $ sudo apt-get update
    #安装 apt 依赖包,用于通过HTTPS来获取仓库:
    $ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
    #添加 Docker 的官方 GPG 密钥:
    $ curl -fsSL //mirrors.ustc.edu.cn/docker-ce/l     inux/ubuntu/gpg | sudo apt-key add -
    #使用以下指令设置稳定版仓库
    $ sudo add-apt-repository \
    "deb [arch=amd64] //mirrors.ustc.edu.cn/docker-     ce/linux/ubuntu/ \
    $(lsb_release -cs) \
    stable"
    #安装 Docker Engine-Community
    $ sudo apt-get update
    #安装最新版本的 Docker Engine-Community 和 containerd 
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io

    CentOS Docker 安装

    #卸载旧版本
    $ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
    #设置仓库
    $ sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    #设置阿里云仓库
    $ sudo yum-config-manager \
          --add-repo \
          //download.docker.com/linux/centos/docker-ce.repo
    #安装Docker Engine-Community
    $ sudo yum install docker-ce docker-ce-cli containerd.io
    #启动docker
    sudo systemctl start docker
    sudo systemctl ebable docker

    Windows 安装

    Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。 Docker Desktop 官方下载地址: //hub.docker.com/editions/community/docker-ce-desktop-windows

    Mac 安装

    #Homebrew 的 Cask 已经支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 来进行安装:
    brew install --cask --appdir=/Applications docker
  • Dockerfile构建镜像

    Docker的镜像是层叠结构的。 这个有点像git。就是最上一层的images,可能是下一层的images,为 基础构建的。

    1. 构建Dockerfile

    FROM nginx
    RUN echo '这是一个本地构建的nginx镜像' > /usr/share/ngin   x/html/index.html

    FROM :依赖的基础镜像

    RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

     # <命令行命令> 等同于,在终端操作的 shell 命令。
    1. RUN <命令行命令>
      #RUN ["./test.php", "dev", "offline"] 等价于 RUN ./tes    t.php dev offline
    2. RUN ["可执行文件", "参数1", "参数2"]

    COPY:用于从本地文件中复制到容器中

    COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

    ADD:和copy一样,包含了解压的操作

    CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

    1. CMD 在docker run 时运行。
    2. RUN 是在 docker build。

    ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。但是, 如果运行 docker run 时使用了 –entrypoint 选项,将覆盖 CMD 指令指定的程序。在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

    ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

    ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

    ENV <key> <value>
    ENV <key1>=<value1> <key2>=<value2>...

    ARG:构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。构建命令 docker build 中可以用 –build-arg <参数名>=<值> 来覆盖。

    ARG <参数名>[=<默认值>]

    VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

    VOLUME ["<路径1>", "<路径2>"...]
    VOLUME <路径>

    EXPOSE:仅仅只是声明端口。 1. 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。 2. 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    WORKDIR: 指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

    WORKDIR <工作目录路径>
    1. 构建Docker镜像

    docker build -t nginx:v3 .

    在 Dockerfile 文件的存放目录下,执行构建动作。 以下示例,通过目录下的 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签)。命令中的. 是上下文路径。

  • Docker容器常用使用命令

    1. 下载容器 docker pull 镜像:tag

    默认下载走的是Dockerhub官方镜像,大家可以设置下阿里云的镜像仓库

    #修改镜像地址
    vim /etc/docker/daemon.json
    "registry-mirrors": ["//iv7stq00.mirror.aliyuncs.com"] }

    启动容器

     docker run -itd -v /opt/opt -p 5000:5000 --name test nginx  
       
    • -i: 交互式操作。
    • -t: 终端。
    • -d: 后端运行(不加会占用你的控制台,关闭控制台则关闭容器)。
    • -v: 映射容器内部文件夹。
    • -p: 映射端口。
    • –name: 容器名称

    查看当前镜像

    docker images 

    查看当前启动容器

    # -a启动失败的也可以看到
     docker ps -a 

    删除容器

     docker rm -f 容器名称/容器Id

    查看容器概况

     docker inspect 容器名称/容器Id

    进入容器

     docker exec -it 容器名称/容器Id bash

    重启容器

     docker restart 容器名称/容器Id

    其他命令

     docker command --help  

Docker三剑客简介

  • Docker Swarm

    Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。

  • Docker Machine

    能够帮助快速创建docker容器环境,Docker Machine也可以集中管理所有的docker主机,比如快速的给100台服务器安装上docker。

machinemachine

  • Docker Compose

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

读一本好书,就是在和高尚的人谈话。