• 快速上手Docker


    一、Docker介绍

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

    容器与虚拟机比较:
    容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面上实现。与传统虚机相比,Docker优势体现为启动速度快、占用体积小。
    在这里插入图片描述
    Docker服务器与客户端:
    C/S架构软件,Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具以及一整套RESTful API。可以在同一台宿主机上运行Docker客户端和守护进程,也可以从本地Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
    在这里插入图片描述
    Docker镜像与容器:
    当成iso文件---->装到不同的虚拟机上---->开机(进入了操作系统)---->一个容器就是一个操作系统

    Docker安装:
    Windows:一路下一步即可。
    Centos(Redhat,遵循GNU协议)为例:

    # 下载安装
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install docker-ce
    # 查看版本
    docker -v
    # 启动docker
    systemctl start docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    二、Docker基本操作

    镜像操作
    1.查询镜像(去哪查的hub.docker,官方镜像仓库)
    输入命令:docker search centos # 一般不用
    直接在仓库里搜:官方镜像仓库地址

    2.下载镜像

    docker pull 镜像名字:标签
    docker pull centos:centos7
    
    • 1
    • 2

    3.查看镜像

    docker images
    
    • 1

    4.删除镜像

    docker rmi 镜像id 或 镜像名字:tag
    docker rmi `docker images -q`  # 删除所有镜像
    
    • 1
    • 2

    容器操作
    1.查看容器

    # 查看正在运行的容器
    docker ps
    # 查看所有容器(包括停止的)
    docker ps –a
    
    • 1
    • 2
    • 3
    • 4

    2.创建与启动容器(创建并运行)

    docker run -di --name=centos7 -p 3306:3306 -v /root/s18:/root/s18
    
    • 1

    -i:表示运行容器
    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端,一旦退出,容器也就退出了。
    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    –name=名字 给容器起个别名,如果不写,随机起一个名字。
    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。
    -v: 目录挂载 宿主机目录:容器目录。

    # 从宿主机进入到容器内部
    docker run -di --name=centos7 centos:centos7
    docker exec -it 34fe /bin/bash   # 进入到容器内部
    # 在容器上运行 /bin/bash  给我一个伪终端,在伪终端里直接操作容器
    
    • 1
    • 2
    • 3
    • 4

    3.停止/启动/删除容器

    # 停止容器
    docker stop 容器id
    #启动容器
    docker start 容器id
    # 删除容器
    docker rm 容器id
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.文件拷贝
    由于没有做目录映射,把宿主机的文件copy到容器内

    docker cp 需要拷贝的文件或目录 容器名称:容器目录
    docker cp  /root/s18/lqz.txt  mysql:/root
    
    • 1
    • 2

    把容器内的文件copy到宿主机上(在宿主机上执行)

    docker cp 容器名称:容器目录 宿主机文件或目录
    
    • 1

    三、应用部署

    1.部署mysql

    docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
    • 1

    2.部署redis(目录挂载)

    docker pull redis
    
    • 1

    准备文件redis.conf

    vi redis.conf
    
    • 1
    bind 0.0.0.0   
    daemonize NO
    protected-mode yes   # 使用保护模式,连接需要密码
    requirepass 123456   
    
    • 1
    • 2
    • 3
    • 4

    启动docker容器,执行redis-server /etc/redis/redis.conf命令

    docker run -p 6379:6379 --name redis_6379 -v /root/s18/redis/conf/redis.conf:/etc/redis/redis.conf -v /root/s18/redis/data:/data -d redis redis-server /etc/redis/redis.conf
    
    • 1

    3.部署nginx(如果镜像不存在,会自动下载,并运行)

    docker run -di --name=mynginx -p 8080:80 nginx
    docker run -di --name=mynginx -v /root/s18/www:/usr/share/nginx/html -p 8080:80 nginx
    
    • 1
    • 2

    四、迁移备份

    1.容器保存为镜像

    docker commit 容器名 镜像名
    docker commit centos7777 centos7_vim
    # 运行容器
    docker run -di --name lqz centos7_vim
    
    • 1
    • 2
    • 3
    • 4

    2.把镜像打成压缩包

    docker save -o centos_vim.tar centos7_vim
    # 基于压缩包恢复回镜像
    docker load -i centos_vim.tar
    
    • 1
    • 2
    • 3

    五、自定义镜像

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

    常用命令:

    命令作用
    FROM image_name:tag定义了使用哪个基础镜像启动构建流程
    MAINTAINER声明镜像的创建者
    ENV key value设置环境变量(可以写多条)
    RUN command是Dockerfile核心部分(可以写多条)
    ADD source_dir/file_dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
    COPY source_dir/file_dest_dir/file和ADD相似,但是如果有压缩文件并不能压缩
    CMD指定容器创建时的默认命令(可以被覆盖)
    ENTRYPOINT设置容器创建时的主要命令(不可被覆盖)
    EXPOSE声明容器运行时监听的特定网络端口
    VOLUME为容器创建挂载点或声明卷

    Dockerfile案例1---->在centos7上安装vim:

    vim Dockerfile
    
    • 1
    FROM centos:centos7
    MAINTAINER lqz
    ENV password 123456
    RUN yum install vim -y
    ADD ./lqz.txt /lqz.txt
    COPY ./lqz.txt /lqz.txt
    WORKDIR /home
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    把dockerfile文件编译成镜像

    docker build -t='vim2_img' .
    
    • 1

    Dockerfile案例2---->运行django项目:

    FROM python3.6
    MAINTAINER lqz
    COPY ./req.txt /req.txt
    RUN pip install -r req.txt
    RUN mkdir lqz
    COPY ./项目 /soft/项目
    CMD ["python","/soft/项目/manage.py","runserver 0.0.0.0:8080"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    六、容器编排

    docker-compose:对单机情况下多个容器的编排
    k8s:多机情况下的容器编排

    Docker Compose是一个能一次性定义和管理多个Docker容器的工具。
    可以对django、mysql、redis、前端、nginx等容器编排。

    下载安装:

    curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    • 1
    chmod +x /usr/local/bin/docker-compose  # 加执行权限
    
    • 1

    案例---->小型web服务项目搭建:
    第一步:编写Dockerfile

    FROM python:3.6
    COPY . /app
    WORKDIR /app
    RUN pip install flask redis
    EXPOSE 5000
    CMD [ "python", "app.py" ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第二步:编写docker-compose.yml

    version: "3"
    services:
      redis:
        image: redis
      web:
        build:
          context: .
          dockerfile: Dockerfile
        ports:
          - 8080:5000
        environment:
          REDIS_HOST: redis
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    第三步:编写app.py

    from flask import Flask
    from redis import Redis
    import os
    import socket
    
    app = Flask(__name__)
    redis = Redis(host='redis', port=6379)  # 写容器名称,自动找到redis
    
    
    @app.route('/')
    def hello():
        redis.incr('hits')
        return '你好! 查看 %s 次, hostname 是 %s.\n' % (redis.get('hits'),socket.gethostname())
    
    
    if __name__ == "__main__":
        app.run(host="0.0.0.0", port=5000, debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    第四步:运行

    docker-compose up
    
    • 1
  • 相关阅读:
    HTML网页设计结课作业——11张精美网页 html+css+javascript+bootstarp
    Milvus 简介与核心特性
    thinkphp6(TP6)访问控制器报404(Nginx)
    Python【控制台输出案例2】
    SpringBoot实现IP地址归属地查询
    【Java SE】数据类型常见错误及字符串拼接与转换
    【Android】Android Framework系列---CarPower深度睡眠STR
    五种多目标优化算法(MOJS、MOGWO、NSWOA、MOPSO、NSGA2)性能对比(提供MATLAB代码)
    Unity C# 网络学习(十)——UnityWebRequest(一)
    阿里面试(持续更新)
  • 原文地址:https://blog.csdn.net/BLee_0123/article/details/133326331