zoukankan      html  css  js  c++  java
  • Docker学习

    Docker入门

      我们用的传统虚拟机如VMwareVisualBox之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

      而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

      容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。

    特性容器虚拟机
    启动 秒级 分钟级
    硬盘使用 一般为MB 一般为GB
    性能 接近原生 弱于
    系统支持量 单机支持上千个容器 一般是几十个

    Docker中包括三个基本的概念

    Image(镜像)Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
    Container(容器) 容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
    Repository(仓库) Docker 仓库是集中存放镜像文件的场所。仓库又可以分为两种形式:public(公有仓库)、private(私有仓库)

    docker常用命令

     拉取镜像:docker pull image_name
     拉取某个版本的镜像:docker pull centos:latest
     查看镜像:docker images
     查看运行中的启动:docker ps
     启动容器:docker start container_name/container_id
     重启容器:docker restart container_name/container_id
     关闭容器:docker stop container_name/container_id
     进入容器:docker run container_name/container_id
     删除镜像:docker rmi image_name

    Dockerfile

      Dockerfile是自动构建docker镜像的配置文件, 用户可以使用Dockerfile快速创建自定义的镜像。

      Dockerfile 是由一行行命令语句组成,并且支持已 # 开头的注释行。

      一般来说,我们可以将 Dockerfile 分为四个部分:

    • 基础镜像(父镜像)信息指令FROM

    • 维护者信息指令MAINTAINER

    • 镜像操作指令RUN、EVN、ADD和WORKDIR等

    • 容器启动指令CMD、ENTRYPOINT和USER等

      多少多少

    Dockerfile常用指令

      FROM

      FROM是用于指定基础的images,一般格式为FROM <image> or FROM <image>:<tag>,所有的Dockerfile都用该以FROM开头,FROM命令指明Dockerfile所创建的镜像文件以什么镜像为基础,FROM后面的所有指令都会在FROM的基础上进行创建镜像。可以在同一Dockerfile中多次使用FROM命令创建多个镜像。比如我们要指定python2.7的基础镜像,如:FROM python:2.7;

      MAINTAINER

      MAINTAINER是用于指定镜像创建者和联系方式,一般格式为MAINTAINER<name>。如:MAINTAINER HC<hc@mi.com>

      COPY

      COPY是用于复制本地主机的<src>(为Dockerfile所占的相对路径)到容器中的<dest>

    当使用本地目录为源目录时,推荐使用COPY。一般格式为COPY <src><dest>。例如我们要拷贝当前目录到容器的/app目录下,命令为COPY . /app

      WORKDIR

      WORKDIR用于配合RUN、CMD、ENTRYPOINT命令设置当前工作路径。可以设置多次,如果是相对路径,则相对当前工作路径。可以设置多次,如果是相对路径,则相对前一个WORKDIR命令。默认路径为/。一般格式为WLRKDIR /path/to/work/dir。例如我们设置/app路径,命令为WORKDIR /app

      RUN

      RUN用于容器内部执行命令。每个RUN命令相当于在原有的镜像基础上添加了一个改动层,原有的镜像不会有变化。一般格式为RUN <command>。例如我们要安装python依赖包,命令为RUN pip install -r requirements.txt

      EXPOSE

      EXPOSE命令用来指定对外开放的端口。一般格式为EXPOSE <port> [<port>...],例如EXPOSE 5000

      ENTRYPOINT

      ENTRYPOINT可以让你的容器变得像一个可执行程序一样。一个Dockerfile中只能有一个ENTRYPOINT,如果有多个,则最后一个生效。

      ENTRYPOINT命令也有两种格式:

        1、ENTRYPOINT["executable","param1","param2"]:推荐使用的exex形式

        2、ENTRYPOINT command param1 param2:shell形式

      例如,我们要讲python镜像变成可执行的程序,命令为:ENTRYPOINT ["python"]

      CMD

      CMD命令用于启动容器时默认执行的命令,CMD命令可以包含可执行文件,也可以不包含可执行程序,不包含可执行文件的情况下就要用ENTRYPOINT指定一个,然后CMD命令的参数就会作为ENRTYPOINT的参数。

      CMD命令有三种格式:

        1、CMD ["executable","param1","param2"]:推荐使用的exec形式

        2、CMD ["param1","param2"]:无可执行程序形式

        3、CMD command param1 param2:shell形式

      一个Dockerfile中只能有一个CMD,如果有多个,则最后一个生效。而CMD的shell形式默认调用/bin/sh -c执行命令。CMD命令会被Docker命令行传入的参数覆盖:docker run busybox /bin/echo Hello Docker会把CMD里的命令覆盖。例如我们要启动/app,我们可以用如下命令实现:CMD ["app.py"]

    构建Dockerfile

     mkdir static_web
     cd static_web
     touch Dockerfile
     vim Dockerfile
     ------
     FROM nginx
     MAINTAINER Angel_Kitty <angelkitty6698@gmail.com>
     RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
     ------

      在Dockerfile文件所在目录执行:docker build -t angelkitty/nginx_web:v1 .; -t是为新镜像设置仓库和名称,其中angelkitty为仓库名,nginx_web为镜像名,:v1为标签(不添加为默认latest)。

      构建完成后,使用docker images命令查看所有镜像,如果存在 REPOSITORYnginxTAGv1 的信息,就表示构建成功。

      启动容器:docker run --name nginx_web -d -p 8080:80 angelkitty/nginx_web:v1,访问localhost:8080,页面返回Hello Docker!即成功。

    安装相关

      安装docker 

     安装一些必要的系统工具:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
     添加软件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     更新 yum 缓存:sudo yum makecache fast
     安装 Docker-ce:sudo yum -y install docker-ce
     启动 Docker 后台服务:sudo systemctl start docker

    安装mysql 

    下载:docker pull mysql:5.6
    启动mysql并指定root用户的密码:docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.6

    安装redis

     下载:docker pull  redis:3.2
     启动:docker run -p 6379:6379 -v $PWD/data:/data  -d redis:3.2 redis-server --appendonly yes
     查看redis运行的id:docker ps
     启动redis客户端:docker exec -it 1bab7f78eccc redis-cli

    安装ES

     下载:docker pull elasticsearch:2.4.4
     启动:docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch elasticsearch:2.4.4
     ​
     9300是tcp通讯端口,集群间和TCPClient都走的它,9200是http协议的RESTful接口

     

  • 相关阅读:
    pymysql 查询大量数据导致内存使用过高优化方案
    docker-compose文件
    Flask关于request一些方法和属性的整理
    gitignore 文件中忽略项不起作用的解决方法
    Django 时区
    django-apscheduler定时任务
    结队-贪吃蛇游戏-项目进度
    团队-科学计算器-开发环境搭建过程
    《团队-科学计算器-设计文档》
    《结对-贪吃蛇-设计文档》
  • 原文地址:https://www.cnblogs.com/hucheng1997/p/11552547.html
Copyright © 2011-2022 走看看