Docker 使用简介

Docker 是使用 GoLang 开发的开源容器引擎,能够方便的打包开发好的应用,而后分发到任意 linux 主机上。mysql

与传统的虚拟机相比拥有如下优点:linux

  • 高效的系统资源利用率

    因为不须要进行硬件虚拟和运行完整的操做系统等额外开销,不管是应用执行速度、内存损耗或者文件存储速度, Docker 都更加高效sql

  • 更快的启动速度

    Docker 容器应用直接运行与宿主内核,无需启动完整的操做系统,能够作到秒级启动docker

  • 一致的运行环境

    Docker 镜像提供了除内核外的完整运行环境,确保了应用运行环境的一致性json

  • 持续交付和部署

    能够经过 Docker 镜像来实现服务的持续交付、部署。使用 Dockerfile 来构建镜像,使用持续集成系统进行集成测试;使用镜像结合持续部署系统进行自动部署后端

  • 迁移轻松

    只须要迁移镜像及镜像运行的数据就可在其余主机或平台运行bash

  • 易于维护和扩展

    因为使用镜像进行部署,使维护更为容易。因为支持在镜像的基础上进行定制,使得扩展变得更简单。而官方也维护了一大批高质量的镜像,大大下降了镜像的制做成本wordpress

基本概念

仓库

Docker 提供了仓库(Repository)用于存放制做好的镜像,方便使用者获取,在本地可通知配置多个 Repository测试

  • 拉取

    可使用命令来拉取镜像:ui

    docker pull [repo url>/]image name>

    默认的 repo urlhub.docker.com ,拉取默认仓库中的镜像时是不须要 url 的。
    如拉取 debiandocker pull debian

  • 推送

    咱们也可将本身制做好的镜像推送到仓库,以便分发,使用命令:

    docker push [<repo url>/]<image name>[:<image tag>>

  • 搜索

    使用 docker search 命令则可搜索默认 repo url 内的镜像。

  • 镜像加速

    因为默认 repo url 在国外,为了加快拉取速度,须要指定其为国内的,向 /etc/docker/daemon.json 中添加:

    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }

    即可使用 Docker 在中国的镜像加速站。

    对于企业用户还可搭建本身的私有镜像仓库,方便管理内部镜像。

镜像

镜像是通过 Dockerfile 规则打包生成的, Dockerfile 文件了指明了镜像的生成及运行方式。

Dockerfile

这里简单介绍下 Dockerfile 中经常使用的命令:

  • FROM

    指明基于那个镜像,一般是一个系统环境,如 debian 。在多阶段(stage)构建中可以使用 FROM ... AS ... 来命令阶段,供后面的阶段使用

  • ENV

    设置镜像的环境变量

  • EXPOSE

    导出端口,语法: EXPOSE port/protocol

  • RUN

    执行一条命令

  • COPY

    复制镜像内部的文件,也可从指定 stage 中复制文件,使用 --from=<stage name> 来实现

  • ADD

    复制本地文件到镜像中,并作了一些额外工做,如自动解压文件、保持文件属性等

  • WORKDIR

    切换工做目录

  • CMD

    执行命令,极容易在 docker run 时被覆盖。主要用于指定镜像的默认启动命令,有如下三种语法:

    • CMD ["executable", "param1", "param2"] Exec 模式,首先
    • CMD ["param1", "param2"] 设置 ENTRYPOINT 的默认参数
    • CMD command param1 param2 Shell 模式
  • ENTRYPOINT

    指定镜像默认的运行命令,可使用 --entrypoint 参数在 docker run 时覆盖 Dockerfile 内的 ENTRYPOINT

    ExecShell 两种模式

    一般使用这个命令来指定镜像的启动命令,由于 CMD 稍不注意就被覆盖了

更多关于 Dockerfile 内容请参见: Dockerfile reference

这里给出一个简单的 Dockerfile=, 是 =debian sid 的:

FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]

建立

使用 docker build -f <Dockerfile path> [-t <image name>[:<tag>]] . 建立镜像和标记 Tag

Tag 可用来标记不一样的镜像版本,就像版本号。

列出

使用 docker image ls 能够列出下载下来的镜像

运行

使用 docker run 命令运行镜像,可以使用参数配置,下面给出一个例子:

docker run -it -d -p <local port>:<container port> -v <local path>:<container path> <image>

  • -i 是交互式操做
  • -t 是终端
  • -p 指定端口映射
  • -v 指定 volume 映射
  • -d 后台模式

删除

使用 docker image rm <image id> 删除镜像

导入和导出

  • 导出: docker save <image id> > <image save>.tar
  • 导入: docker load < <image save>.tar

容器

容器是镜像运行后的实体,运行与属于本身的独立的命名空间。

建立

使用 docker run 命令启动镜像就能够建立一个容器

列出

使用 docker ps 可列出正在运行的容器,加上 -a 参数可列出因此存在的容器

控制

  • 启动

    使用 docker container start <containe id> 启动容器

  • 终止

    使用 docker container stop <containe id> 终止容器

  • 暂停

    dcoker container pause <containe id>

  • 重启

    dcoker container restart <containe id>

  • 日志

    dcoker container logs <containe id>

删除

docker container rm <container id> 命令可删除容器

进入容器

使用 docker exec -it <container id> /bin/sh 命令可进入容器的执行环境

导入和导出

  • 导入: docker import <container export>.tar <container name>
  • 导出: docker export <container id> > <container export>.tar

部署

直接运行镜像不便于部署服务,于是官方推出了 Docker Compose 来负责应用部署。

使用 docker-compose.yml 文件将应用须要的镜像都定义在一块儿,而后使用 docker-compose 命令来部署。

docker-compose.yml 的语法详见: Compose file version 3 reference,这里给出一份部署 wordpress 的文件:

version: "3.7"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - backend

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - backend

volumes:
  db-data:

networks:
  backend:

经常使用命令

  • up

    启动服务,加上 -d 表示在后端运行

  • down

    终止服务

  • build

    构建服务中的容器

  • config

    验证文件格式是否有误

  • exec

    进入指定的容器,如进入上面 wordpress 中的 mysql 则是: docker-compose exec mysql

  • logs

    显示日志,可指定容器

  • restart

    重启服务

更多命令请见: Overview of docker-compose CLI

相关文章
相关标签/搜索