Docker是一个开源项目,诞生与2013年,最初四dotCloud的一个内部业余项目,后来家人Linux,遵从了Apache2.0协议,GitHub上维护。

Docker

1. Docker简介

1. 什么是Docker

​ Docker是一个开源项目,诞生与2013年,最初四dotCloud的一个内部业余项目,后来家人Linux,遵从了Apache2.0协议,GitHub上维护。基于go语言。

​ Docker目标是:实现轻量级操作系统虚拟化解决方案。Docker基础是Linux容器技术(LXC)。

使用Docker语言

  1. 上手快

    ​ 用户只需要几分钟,便可把自己程序Docker化。Docker依赖于写时复制(copy on write)模型,使得修改应用程序非常迅速。

    ​ Docker启动快,拥有很高性能,可充分利用系统资源。

  2. 职责逻辑分类

    ​ 使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需关心如何管理容器。Docker设计的目的就是加强开发人员生产环境与部署环境的一致性,从而减少因生产、部署环境不一致而导致的问题。

  3. 快速高效的开发生命周期、

    ​ Docker目标之一就是缩短开发、测试、部署的周期,让程序更具有可以移植性,易于构建。

  4. 鼓励面向服务的架构

    ​ Docker鼓励面向服务的体系结构和微服务架构。

2. 容器与虚拟机的比较

​ 容器在层面上实现虚拟化,直接复用本地的OS。

​ 虚拟机则是在硬件层面上。

​ 因此容器启动速度快,占用体积小。

3. 容器组件

  1. Docker服务器与客户端

    ​ Docker是C/S架构程序。Docker客户端只需向Docker服务器或守护进程发起请求,服务器或守护进程将完成所有工作并返回结果。

  2. Docker镜像与容器

    ​ 镜像:构建Docker基石。可以通过一个镜像构建多个不同的容器。

    ​ 容器:容器基于镜像启动,一旦容器启动完成,可以登录容器安装自己需要的软件后服务。

  3. 注册中心

    ​ Docker用注册中心保持用户镜像,分为共有和私有。DockerHub是Docker运营的公共的Registry。

    https://hub.docker.com

2. Docker安装与启动

1. 安装Docker

​ Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。

​ 下面以Centos7.x安装为例

  1. yum包更新到最新

    1
    sudo yum update
  2. 装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

    1
    sudo yum install -y yum-utils device-mapper-persistent-data 1vm2
  3. 设置yum源为阿里云

    1
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4. 安装docker

    1
    sudo yum install docker-ce ## docker-ce是社区版
  5. 查看docker安装版本

    1
    docker -v

2. 设置USTC镜像

​ ustc是老牌的linux镜像服务提供者,ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。https://lug.ustc.edu.cn/wiki/mirrors/help/docker

安装好docker之后,编辑配置文件

1
vi /etc/doceker/daemon.json

在文件中添加以下内容

1
2
3
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

3.Docker 启动与停止

systemctl:系统服务管理器命令

启动docker

1
systemctl start docker

停止docker

1
systemctl stop docker

重启docker

1
systemctl restart docekr

查看docker状态

1
systemctl status docker

开机启动

1
systemctl enable docker

查看docker概要

1
docker info

查看docker帮助文档

1
docker --help

4. 常用命令

1. 镜像相关

  1. 查看镜像

    1
    docker images

    REPOSITORY:镜像名称

    TAG:镜像标签

    IMAGE ID:镜像ID

    CREATED:镜像创建日期

    SIZE:大小

    镜像都是存在Docker宿主机的**/var/lib/docker**目录下

  2. 搜索镜像

    1
    docker search 镜像名称

    NAME:仓库名称

    DESCRIPTION:镜像描述

    STARS:和GitHub的类似

    OFFICIAL:是否官方

    ATOMATED:自动构建,表该镜像由Docker Hub自动构建流程创建的

  3. 拉取镜像

    从中央仓库拉取镜像

    1
    docker pull 镜像名称
  4. 删除镜像

    根据id删除

    1
    docker rmi 镜像ID

    删除所有

    1
    docker rmi `docker images -q`

2. 容器相关

  1. 查看容器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 查看正在运行的容器
    docker ps

    # 查看所有容器
    docker ps -a

    # 查看最后一次运行的容器
    docker ps -l

    # 查看停止的容器
    docker ps -f status=exited
  1. 创建与启动容器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 创建容器命令
    docker run

    -i :表示运行容器
    -t :表容器启动会进入其命令行。
    --name : 为容器指定名
    -v :表示目录映射关系,前者宿主机目录、后者映射到宿主机的目录
    -d :创建守护式容器在后台运行(不会自动登录)
    -p :端口映射, 宿主机端口 容器端口

1)交互式创建容器

1
docker run -it --name=容器名称 镜像名称:标签 /bin/bash

2)守护式创建容器

1
2
3
4
docker run -di --name=容器名称 镜像名称:标签

# 退出当前容器
exit

登录守护式创建容器

1
docker exec -it 容器名称、容器id /bin/bash
  1. 停止与启动容器

    1
    2
    3
    4
    5
    # 停止容器
    docker stop 容器名称

    # 启动容器
    docker start 容器名称
  1. 文件拷贝

    1
    2
    3
    4
    5
    # 文件:宿主机-->容器
    docker cp 需要拷贝的文件或目录 容器名称:容器目录

    # 文件:容器-->宿主机
    docker cp 容器名称:容器目录 需要拷贝的文件或目录
  1. 目录挂载

    1
    2
    3
    # 将宿主机的myhtml目录与容器的xxx/myhtml命令解析映射
    # 修改任意一方,另外一方就会改变
    docker run -di -v /usr/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

    如果你共享的是多级的目录,可能会出现权限不足的提示。

    这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 –privileged=true 来解决挂载的目录没有权限的问题

  1. 查看容器IP地址

    1
    2
    3
    4
    5
    # 查看容器运行的各种数据
    docker inspect 容器名称

    # 直接输出容器的IP地址
    docker inspect --format='{{.NetworkSettings.IPAddress}}'
  1. 删除容器

    1
    2
    # 删除指定容器
    docker rm 容器名称

5. 应用部署

1. MySQL

  1. 拉取mysql镜像

    1
    docker pull centos/mysql-57-centos7
  2. 创建容器

    1
    docker run -di --name=ownmysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7

    -p 端口映射

    -e 添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码

  3. 远程登录

    连接宿主机的ip、端口为33306

2. tomcat部署

  1. 拉取镜像

    1
    docker pull tomcat:7-jre7
  2. 创建容器

    1
    docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

3. Nginx部署

  1. 拉取镜像

    1
    docker pull nginx
  2. 创建nginx容器

    1
    docker run -di --name=mynginx -p 80:80 nginx

4. Redis部署

  1. 拉取

    1
    docker pull redis
  2. 部署

    1
    docker run -di --name=myredis -p 6379:6379 redis

待更新

评论