docker容器技术

简单介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

docker的基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

以上都是来自菜鸟教程的资料

简单介绍

docker就是一个可以产生很多虚拟机的应用容器引擎,每个虚拟机都是需要镜像的,每个镜像都是一个单独的应用,例如mysql,redis等等,容器就是虚拟机,所以使用docker可以快速搭建很多应用服务,而告别一些繁琐的配置

  • docker 有官方的仓库来保存很多的镜像,这里的仓库和npm、maven代码仓库是同理,同样的仓库在国外,最好使用国内的仓库地址会比较快,例如:daocloud等等
  • 当然也可以创建自己自定义的镜像,这样的自定义镜像可以帮助同事快速搭建环境,解决环境不一致的问题,同样自定义镜像也可以上传到云上保存

docker的安装和启动

  • CentOS 7 的版本安装可以使用 curl -sSL https://get.daocloud.io/docker | sh
  • CentOS 8 安装可能会报错,反正我是踩坑了,缺少依赖,找度娘去吧
  • 安装完成后当前目录会产生一个containerd文件夹,不要惊讶

关于开机自启的命令

  • 启动docker sudo systemctl start docker
  • 查看已经启动的服务 systemctl list-units --type=service
  • 查看是否设置了开机自启 systemctl list-unit-files | grep enabled
  • 设置开机自启 systemctl enable docker.service
  • 关闭开机自启 systemctl disable docker.service

docker的常见命令

  • docker ps 查看当前工作的容器
    • docker ps -a 查看所有容器
  • docker logs 容器id 查看容器内部的输入日志
  • docker run -itd 镜像名称 bash 指定镜像在后台启动一个新容器
  • docker start 容器id 启动一个停止的容器
  • docker restart 容器id 重启一个容器
  • docker stop 容器id 停止容器
  • docker exec 进入容器,废话一句,这里和进入一个linux的虚拟机感觉一样
  • docker rm -f 容器id 删除容器
  • docker rmi 镜像名称 删除镜像

docker-compose介绍

docker存在的一些问题

  • docker对管理多个容器配置还需要一条命令的重复操作

  • docker对配置端口的映射等等配置麻烦,不适合批量管理

  • 一台服务器往往存在多个应用服务,docker重复配置效率低下

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

dokcer-compose的安装

  • sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 下载安装docker-compose
  • sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 创建软链

docker-compose.yml例子

# 关闭防火墙后docker需要重启:service docker restart
version: '3.1'
services:
  nginx:  
    restart: always
    image: daocloud.io/library/nginx:latest
    container_name: "nginx"
    ports:
      - "80:80"
    volumes:
      - "/opt/docker_nginx/nginx/conf.d:/etc/nginx/conf.d"
      - "/opt/docker_nginx/postCode:/usr/share/nginx/html/postCode/web"
  mysql:
    restart: always
    image: daocloud.io/library/mysql:5.7.4
    container_name: "mysql"
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/shanghai     #指定时区
      MYSQL_ROOT_PASSWORD: dojanep47902tyoslwYIJ547865_901f_hrzg
    volumes:
      - "/opt/docker_mysql/data:/var/lib/mysql"
  redis:
    restart: always
    image: daocloud.io/library/redis:3.2.9
    container_name: "redis"
    command: redis-server --requirepass qazwsxedcrfvtgbyhnujmikolp
    ports:
      - "6379:6379" 
    environment:
      TZ: Asia/shanghai     #指定时区
    volumes:
      - "/opt/docker_redis/redis:/usr/local/etc/redis"
  rabbitmq:
    restart: always
    image: daocloud.io/library/rabbitmq:3.7.26-management
    container_name: "rabbitmq"
    hostname: myRabbitmq
    ports: 
      - "8672:15672"  #http端口
      - "8673:5672"   #通信端口
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=15572046172
    volumes:
      - "/opt/docker_rabbitmq:/var/lib/rabbitmq"

docker-compose的常用命令

  • docker-compose --version 查看版本
  • docker-compose up -d 在后台运行该服务
  • docker-compose ps 列出所有容器
  • docker-compose stop 停止正在运行的容器
    • docker-compose stop 容器名称 停止指定容器
  • docker-compose start 启动停止的容器
    • docker-compose start 容器名称 启动指定容器
  • docker-compose down 停止并删除容器
  • docker-compose logs 输出所有容器的日子
  • docker-compose pull 镜像名称 拉取服务中的镜像
  • docker-compose restart 重启项目中的服务
    • docker-compose restart 容器名称 重启指定名称
  • docker-compose rm 删除所有停止状态的容器
    • docker-compose rm 容器名称 删除指定的容器
  • docker-compose pause 暂定容器
  • docker-compose unpause 恢复在暂定中的容器

后记

  • 命令都都是持续更新中...
  • 参考文档:菜鸟教程
posted @ 2020-07-23 09:57  __松子  阅读(173)  评论(0编辑  收藏  举报