in 工具 docker ~ read.

docker及docker-compose一文通

docker安装

yum remove docker*

yum install docker
service docker start
chkconfig docker on

curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

简介

基本概念

镜像

和使用光盘拷贝已经有的镜像一样,镜像是指一个系统的镜像,我们的镜像都是基于 linux 的。
docker 镜像可以理解为,你在 win 下用ghost 拷贝出来的磁盘镜像。不过他是 linux 版的。

性能损耗

得益于现在的 linux 内核的 namespace, 我们可以拥有各种直达内耗的容器可以用,你在 docker 中的进程其实进程就是直接的宿主机进程,这一切都在系统启动 clone 函数的时候就决定了, 所以谈不上性能损耗。

容器

容器本身就是我们最重要的概念,我们使用 docker 要做的就是容器这个东西。
简单来说容器是一个镜像的实例,更通俗来说容器就像你用 vm 或者 virtualbox 使用镜像创建的一个虚拟机实例。

hub

就是镜像仓库,类似GitHub,这里就是dockerhub。
有很多三方 dockerhub 服务器, 有阿里云,网易蜂巢,有容云,daocloud, amazon 等等;
docker hub

docker

一句话

docker 是一种容器技术,作用是用来快速部署服务

docker-compose

一句话

docker-compose用来做docker的多容器控制,把docker用一条命令,自动化完成

简单原理

通过编写docker-compose.yml文件,将所有的操作/配置都写好,然后执行命令docker-compose up -d就可以自动化完成。

使用

docker使用

  • 搜索镜像docker search xxx

  • 下载镜像docker pull xxx

  • 登录docker login

  • 查看你已经下载好的镜像docker images

  • 删除镜像docker rmi xxx

  • 创建并运行docker run xxx

  • 看日志docker logs xxx

  • 停止一个容器示例docker stop xxx

  • 查看容器状态docker stats xxx

  • 查看帮助docker

    • Commands:
    cmd explain note
    attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
    build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
    commit Create a new image from a container's changes # 提交当前容器为新的镜像
    cp Copy files/folders from the containers filesystem to the host path # 从容器中拷贝指定文件或者目录到宿主机中
    create Create a new container # 创建一个新的容器,同 run,但不启动容器
    diff Inspect changes on a container's filesystem # 查看 docker 容器变化
    events Get real time events from the server # 从 docker 服务获取容器实时事件
    exec Run a command in an existing container # 在已存在的容器上运行命令
    export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
    history Show the history of an image # 展示一个镜像形成历史
    images List images # 列出系统当前镜像
    import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应 export]
    info Display system-wide information # 显示系统相关信息
    inspect Return low-level information on a container # 查看容器详细信息
    kill Kill a running container # kill 指定 docker 容器
    load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
    login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
    logout Log out from a Docker registry server # 从当前 Docker registry 退出
    logs Fetch the logs of a container # 输出当前容器日志信息
    port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
    pause Pause all processes within a container # 暂停容器
    ps List containers # 列出容器列表
    pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
    push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
    restart Restart a running container # 重启运行的容器
    rm Remove one or more containers # 移除一个或者多个容器
    rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
    run Run a command in a new container # 创建一个新的容器并运行一个命令
    save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
    search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
    start Start a stopped containers # 启动容器
    stop Stop a running containers # 停止容器
    tag Tag an image into a repository # 给源中镜像打标签
    top Lookup the running processes of a container # 查看容器中运行的进程信息
    unpause Unpause a paused container # 取消暂停容器
    version Show the docker version information # 查看 docker 版本号
    wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值

    Run 'docker COMMAND --help' for more information on a command.

docker-compose使用

服务更新

软升级

  • 停止容器运行docker-compose stop wordpress
  • 删除老旧的容器docker-compose rm wordpress
  • 更新你的 image
  • 启动新容器docker-compose start wordpress
    还比如, 你的 nginx 更新了配置文件之后
    docker-compose restart nginx

硬升级

  • 停止容器运行docker-compose stop
  • 升级你的程序
  • 重新docker-compose up

查看日志

  • 直接查看所有日志docker-compose logs nginx
  • 类似linux tail 命令docker-compose logs -f --tail 10 nginx

查看帮助

  • 查看帮助docker-compose --help

Commands:

cmd explain
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command # 运行一个一次性命令
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information

docker-compose配置文件

version: '2'
services:
  mysql:
    image: mysql:5.7
    restart: always
    ports:
      - "33306:3306"
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --init-connect='SET NAMES utf8mb4;' --innodb-flush-log-at-trx-commit=0
    networks:
      blog-network:
        aliases:
          - mysql
    environment:
      - MYSQL_ROOT_PASSWORD=Root-123
      - MYSQL_DATABASE=ghostdb
      - MYSQL_USER=ghost_user
      - MYSQL_PASSWORD=Ghost-123
    volumes:
      - ./mysql/data/:/var/lib/mysql
  nginx:
    image: nginx:1.14-alpine
    restart: always
    ports:
      - "80:80"
      - "443:443"
    networks:
      blog-network:
        aliases:
          - nginx
    volumes:
      - ./nginx/config/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/config/conf.d:/etc/nginx/conf.d
      - ./nginx/ssl:/etc/nginx/ssl/blog
      - ./nginx/log:/var/log/nginx
  ghost:
    image: ghost
    depends_on:
      - mysql
      - nginx
    expose:
      - "2368"
    ports:
      - "2368:2368"
    volumes:
      - ./ghost/config/config.json:/var/lib/ghost/config.production.json
      - ./ghost/content:/var/lib/ghost/content
    networks:
      blog-network:
        aliases:
          - ghost
networks:
  blog-network:
    driver: bridge

docker-compose.yml配置文件的内容还是很容易理解的,我提一下volumes参数,这个是用来做文件映射的,也就是把容器里的路径映射到本机的路径local path:contain path

日常使用docker-compose 需要注意的

不要把 docker 当做数据容器来使用,数据一定要用 volumes 放在容器外面
不要把 docker-compose 文件暴露给别人, 因为上面有你的服务器信息
多用 docker-compose 的命令去操作, 不要用 docker 手动命令&docker-compose 去同时操作
写一个脚本类的东西,自动备份docker 映射出来的数据。
不要把所有服务都放在一个 docker 容器里面

参考资料

docker官方文档
docker compose官方文档
docker入门教程