docker备忘录,docker,Dockerfile,docker-compose速查表


docker备忘录,docker,Dockerfile,docker-compose速查表

1. 使用docker compose 直接来一套lnmp+*
  • docker lnmp 我用的是github上dnmp
  • 虽然有这个dnmp,但实际使用中可能会遇到有些扩展安装失败,以及开发调试时需要的一些命令,所以我就改了下php的镜像,以及源
2. 熟悉docker
  1. docker run ubuntu:15.10 /bin/echo "Hello World"
    • docker:docker的二进制执行文件
    • run:与前面docker组合运行一个容器
    • ubuntu:15.10 :指定镜像,首先检查本地是否存在,不存在就从镜像仓库下载
    • /bin/echo "Hello World" 启动容器的命令
  2. 运行交互式容器
    • docker run -i -t ubuntu:15.10 /bin/bash
    • -t:在新容器内指定一个伪终端
    • -i:允许你对容器内的白哦准输入进行交互
  3. 后台模式
    • docker run -d ubuntu:15.10 /bin/sh
  4. docker ps
    • CONTAINER ID :容器ID
    • IMAGE:使用的镜像
    • COMMAND:启动容器时运行的命令
    • CREATED:创建容器的时间
    • STATUS:容器状态
      • created (已创建)
      • restarting (重启中)
      • running (运行中)
      • removing (迁移中)
      • paused (暂停)
      • exited (停止)
      • dead (死亡)
    • PORTS:容器的端口信息和连接类型(tcp\udp)
    • NAMES:容器名称
  5. 停止容器
    • docker stop 4bdba648dfbd
    • 可以使用 docker ps查看
常用命令
  1. 容器信息
    • docker version 查看docker版本
    • docker info查看docker容器信息
  2. 镜像操作
    • docker images列出本地images
    • docker images -a含中间映像层
  3. 镜像搜索
    • docker search mysql搜索仓库mysql镜像
    • docker search --filter=starts=600 mysql找starts>=600的镜像
    • docker search --no-trunc mysql显示镜像完整的描述
  4. 镜像下载
    • docker pull redis 下载官方镜像
    • docker pull bitnami/redis下载私人仓库镜像
  5. 镜像删除
    • docker rmi redis单个镜像删除
    • docker rmi -f redis强制删除镜像,针对有运行的容器进程
    • docker rmi -f redis tocat nginx
  6. 镜像构建
    • 编写dockerfile
    • 构建镜像 ```docker build -f /docker/dockerfile/mycentos -t mycentos:1.1
  7. 容器操作
    • 对容器操作可以是container id 或者names
    • 容器启动
      • 交互式启动 ```docker run -i -t –name mycentos
      • 后台启动 docker run -d mycentos
      • 启动一个或多个被停止的容器
        • docker start redis
        • docker restart redis
    • 容器进程
      • docker top redis列出redis容器运行的进程
    • 容器日志
      • docker logs rabbitmq 查看容器日志
      • docker logs -f -t --tail=20 redis查看最后20条日志 -f 跟踪日志输出 -t显示时间戳
      • docker logs --since="2019-05-21" --tail=10 redis指定日期后10条日志
    • 容器进入与退出
      • docker run -it centos /bin/bash 进入 exit退出且关闭 ctrl+p+q仅退出容器不关闭 docker attach --sig-proxy=false centos直接进入容器启动命令终端,不会启动新进程,多个attach连接共享容器屏幕, 参数–sig-proxy为了确保ctrl+d或者ctrl+c不会关闭容器 docker exec -it centos /bin/bash打开新的交互模式终端
    • 查看容器 docker ps 查看正在运行的容器 docker ps -q 查看整在运行的容器id docker ps -a 查看整在运行+历史运行的容器 docker ps -s 查看运行容器总文件大小
    • 容器停止与删除 docker stop redis停止一个运行中的容器 docker kill redis杀掉一个运行中的容器 docker rm redis删除一个已停止的容器 docker rm -f redis删除一个运行中的容器 docker rm -l db 移除容器间网络连接 连接名为db docker rm -v redis删除容器并且删除挂载的数据卷
    • 生成镜像 docker commit -a="DeepInThought" -m="my redis" [redis容器ID] myredis:v1.1
      • 基于当前redis容器创建一个新的镜像;参数:-a 提交的镜像作者; -c使用Dockerfile指令来创建镜像;-m:提交时的说明文字;-p:在commit时,将容器暂停
    • 容器与主机间的数据拷贝 docker cp rabbitmq:/[container_path] [local_path]将rabbitmq容器中的文件拷贝至本地路径 docker cp [local_path] rabbitmq:/[container_path]将本地文件拷贝到rabbitmq容器中
Dockerfile
  • 构建命令: docker build -t xbf/hello-nginx .
    • 在当前目录构建一个叫xbf/hello-nginx
  • 格式:

        FROM alpine:latest    #基于一个linux版本
        MAINTAINER xbf        #作者信息
        CMD echo 'hello docker'  # 运行容器时输出echo内容
    
  • 实战:

        FROM ubuntu
        MAINTAINER xbf
        RUN se -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
        RUN apt-get update
        RUN apt-get install -y nginx
        COPY index.html /var/www/html
        ENTRAYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
        EXPORSE 80
    
  • Dockerfile 里的命令

    命令 用途
    FROM base image
    RUN 执行命令
    ADD 添加文件
    COPY 拷贝文件
    CMD 执行命令
    EXPOSE 暴露端口
    WORKDIR 指定路径
    MAINTAINER 维护者
    ENV 设定环境变量
    ENTRYPOINT 容器入口
    USER 指定用户
    VOLUME mount point
Docker Compose
  • 常见命令

    必须在有docker-compose.yml 目录下

    • ps 列出所有运行容器
      • docker-compose ps
    • logs 查看服务日志输出
      • docker-compose logs
    • port 答应绑定的公共端口
      • docker-compose port php72 9005 #将php72服务9005端口暴露出来
    • build 构建或者重新构建服务
      • docker-compose build php72
    • start 启动指定服务已存在的容器
      • docker-compose start php72
    • stop 停止已运行的容器
      • docker-compose stop php72
    • rm 删除指定容器
      • docker-compose rm php72
    • up 构建 启动容器
      • docker-compose up php72 nginx redis mysql
    • kill 通过发送SIGKILL信号来停止制定容器
    • pull 下载服务镜像
    • scale 设置运行制定容器个数
    • run 在一个服务上执行一个命令
      • docker-compose run php72 /bin/bash
  • docker-compose.yml 属性
    • version 指定docker-compose.yml的写法格式
    • services: 多容器
    • build: 使用Dockerfile来构建镜像
      • context: 构建路径
      • dockerfile: Dockerfile名称
      • args: 构建参数

      •   build:
            context: .
            args:
              PHP_VERSION: ${PHP72_VERSION}
              ALPINE_REPOSITORIES: ${ALPINE_REPOSITORIES}
              PHP_EXTENSIONS: ${PHP72_EXTENSIONS}
              MORE_EXTENSION_INSTALLER: php72.sh
        
    • command: 覆盖容器里启动后执行的命令

        command: [ "php", "./your-script.php" ]
        command: php ./your-script.php
      
    • dns: 指定dns服务器,支持单行和数组模式
    • dns_search 配置dns搜索域 没用过
    • environment 环境变量配置,支持数组或者字典模式

        environment:
          MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      
    • env_file: env配置文件,一般默认.env,单行或者数组
    • expose: 暴露端口给连接服务,跟ports有区别
    • image: 指定所用的镜像
    • network_mode: 设置网络模式

        network_mode: "bridge"
        network_mode: "host"
        network_mode: "none"
        network_mode: "service:[service name]"
        network_mode: "container:[container name/id]"
      
    • ports: 对外暴露端口
    • links: 设置服务别名,来访问其他容器
    • volumes: 挂在文件路径
    • logs: 日志输出
    • healthcheck 健康检查
      • test: [“CMD”, “curl”, “-f”, “http://localhost”] # 设置检- 测程序
      • interval: 1m30s # 设置检测间隔
      • timeout: 10s # 设置检测超时时间
      • retries: 3 # 设置重试次数
      • start_period: 40s # 启动后,多少秒开始启动检测程序
    • restart
      • no 默认,不重启
      • always 总是重启
      • on-failure 非正常退出时,才会重启
      • unless-stopped 容器推出后总是重启

        no是需要加双引号的

    • stop_signal 设置容器停止信号 默认是SIGTERM
    • ulimits 如盖容器默认的ulimit