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

    docker入门学习

    docker是什么?

    1.linux下容器技术有很多,docker是做的最杰出的一款

    2.docker能够支持阿里双十一,可见安全和并发都没问题

    3.docker容器很容易被大规模创建

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。
    Docker 使用 Google 公司推出的 Go 语言 进行开发实现。
    docker是linux容器的一种封装,提供简单易用的容器使用接口。它是最流行的Linux容器解决方案。
    docker的接口相当简单,用户可以方便的创建、销毁容器。
    docker将应用程序与程序的依赖,打包在一个文件里面。运行这个文件就会生成一个虚拟容器。
    程序运行在虚拟容器里,如同在真实物理机上运行一样,有了docker,就不用担心环境问题了

    4.docker能够解决什么问题?

    ocke用场景

    web应用的自动化打包和发布
    自动化测试和持续集成、发布
    在服务型环境中部署和调整数据库或其他应用

    5.每一个docker容器,安装一个app

    6.docker如同在os的进程上,接着一个马甲,其实还是运行在一个单独linux系统上

    7.让开发人员最头疼的就是,环境配置问题,运行一个crm,可能要解决很多的依赖 关系,才能运行,

    保证操作系统一致性,你本地是windows,服务器可能是centos/ubuntu

    你本地开发的是python3,也得保证服务器是python3

    还得解决pip依赖包

    8.有没有一种办法,能把本地的开发代码,全部切换到服务器上呢?

    解决办法1:vmware 虚拟机模板克隆

    解决办法2:docker容器技术

    将你的应用程序,和代码,全部打包在一个系统镜像内,(docker image 容器镜像),镜像就是一个操作的压缩文件。

    基于系统镜像可以运行操作系统

    基于docker镜像,运行出容器镜像

    如果开发,把crm代码,和pip3程序的依赖,全部打包在一个镜像内

    9.docker能够保证服务器的环境一致性

    10.docker的生命周期

    基于镜像,安装出系统

    基于docker镜像,运行出实例

    容器:就像类的实例化

    镜像:就像class

     

    docker的三大概念

    容器:container 基于镜像,运行出的容器实例

    镜像:image 电脑城,老板卖的光盘,只要系统环境一致性

    仓库:存放镜像的地方

     

    #托管代码的平台,叫做GitHub

    #托管docker镜像的平台,叫做docker hub

     

    配置一个人docker加速器

    curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io

    把配置文件逗号去掉:vim /etc/docker/daemon.json

    重启docker:sudo systemctl restart docker

     

    docker的安装方式:

    1.yum安装,必须指定yum源,yum源大致分为centos官方的源,阿里云这样的第三方源,官方源(生产环境配置它最正确)

    获取docker社区版

    社区ce缩写

    企业版是EE缩写

    官方教程如下,最正确安装docker姿势

    1.卸载旧版本
    sudo yum remove docker
                    docker-client
                    docker-client-latest
                    docker-common
                    docker-latest
                    docker-latest-logrotate
                    docker-logrotate
                    docker-selinux
                    docker-engine-selinux
                    docker-engine

    2.设置存储库
    sudo yum install -y yum-utils
    device-mapper-persistent-data
    lvm2

    sudo yum-config-manager
      --add-repo
      https://download.docker.com/linux/centos/docker-ce.repo

    3.安装docker社区版
    sudo yum install docker-ce
    4.启动关闭docker
    systemctl start docker

    2.选择阿里云的安装方式配置好阿里云yum源

    安装:yum install docker-server docker 或yum install docker -y

    3.启动docker服务端

    启动:systemctl start docker 查看状态:systemctl status docker

    4.学习docker命令

    开发人员需要管理,容器的启停,创建,足以

    对docker容器,和镜像的增删改查

     

    获取一个docker镜像,获取一个基础的ubuntu镜像

    获取一个hello-world镜像

    docker search hello-world #搜索docker镜像

    docker pull hello-world # 下载镜像,就如同骑车去电脑城买光盘,目的为了获取一个镜像文件

    #基于镜像,运行出容器实例

    docker run hello-world #运行hello-world镜像文件

     

    #下载ubuntu的镜像文件,一个微型的ubuntu系统

    docker pull ubuntu

    #运行ubuntu的系统,基于微型的ubuntu系统,运行一个容器实例,里面是ubuntu微型操作系统

    docker run ubuntu

    #交互式的运行一个ubuntu系统,可以进行命令交互,并且

    docker run -it ubuntu /bin/bash

    查看系统:cat /etc/os-release

    参数解释

    -i交互式的运行

    -t开启一个终端 termenl

    /bin/bash 就是linux的shell解释器

    什么是linux的shell解释器

    python解释器是用来解释且执行python代码

    shell解释器是用来解释且执行shell代码,我们输入ls cd都是通过shell进行翻译,linux才认识

     

    运行一个后台有进程的容器,活着的容器

    docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"

    参数解释

    docker run 运行镜像

    -d daemonize 后台运行

    centos 镜像名

    /bin/sh 指定shell的sh解释器

    -c 指定一段shell代码

    "while true;do echo hello centos; sleep 1;done" # 是循环,打印hello centos

    运行一个自定义名字的容器记录

    docker run --name s18foleng -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"

     

     

     

    docker rm 容器id前三位

    docker rm f3a

    一次性删除所有容器记录

    docker rm docker ps -aq

    删除镜像记录

    docker rmi 镜像id

    # 删除所有容器记录

    docker rmi -f docker images -aq #-f强制删除

     

    进入正在运行容器空间内

    docker exec -it 容器id /bin/bash

    修改docker镜像名字

    docker tag 镜像id 新的镜像名

    docker tag cc2b20124a01 kevins

     

     

     

    #查询当前机器拥有的镜像文件

    docker image ls # 列出镜像文件

    docker images #同上,版本升级,命令也就升级了

    #运行过镜像后,会产生一个容器记录,容器进程的查看

    docker ps #查看正在运行的容器记录,容器必须有后台运行的进程,否则容器挂掉

    docker ps -a # 显示所有运行过的容器进程记录

     

    查询容器内日志信息

    docker logs 容器id #一次性打印日志

    docker logs -f 容器id #不间断打印容器日志

     

    容器创建非常简单,每次创建,都是新的容器记录,和之前没有关系

    #基于镜像,可以很随意运行容器实例

     

     

    构建自己的docker镜像,提交本地的docker容器

    1.运行一个centos基础镜像,默认没有vim,在容器空间内安装vim

    docker run -it centos /bin/bash

    2.安装vim

    yum install vim -y

    3.退出容器空间

    exit

    4.提交这个容器记录,生成一个新的镜像文件

    查看容器id:docker ps -a

    docker commit 容器id 镜像名

    docker commit 9dd7870654a6 kevins/s18-vim

    5.导出这个镜像,成为一个压缩文件,我就可以给大家发送下去

    docker save 镜像id > /opt/mydocker.tar.gz

    docker save cc2b20124a01 > /opt/mydocker.tar.gz

    6.导入docker镜像

     docker load < /opt/mydocker.tar.gz 

     

    外部访问容器,是在容器空间内,暴露一个端口,供给外部客户去访问

    容器内的端口映射

    docker run -d -P training/webapp python app.py

    #参数解释

    -d 后台运行容器

    -P 大写p 随机端口映射 宿主机端口:容器内端口

    -p 小写p 指定端口映射 8080:8000

    training/webapp 这个是镜像的名字

    python app.py 容器要执行的命令

    指定端口映射,暴露宿主机的7000,指定映射到容器的5000,这个5000是在容器代码内控制

    docker run -d -p 7000:5000 training/webapp python app.py

    docker run 如果运行不存在的镜像,默认会先去docker pull

    启停docker容器

    docker start 容器id

    docker stop 容器id

     

    登陆dockerhub个人主站,托管docker镜像的网址

    https://hub.docker.com/

    1.下载dockerhub上的镜像

    docker pull yunchao163/s13-hello-docker-world

    2.在linux登陆docker hub ,然后推送镜像到公网

    账号:kevinss

    密码:kevinssid

    登陆:docker login

    3.修改本地镜像的名字,为docker hub的仓库id

    docker tag 镜像id dockerhubID/镜像名

    4.推送镜像到hub

    docker push dockerhubID/镜像名

    docker push kevinss/s18-hello-world

     

    dockerfile的学习

    指令如下

    #你的项目依赖什么操作系统,这里就指定什么操作系统
    FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
    FROM centos #使用base image
    FROM ubuntu:14.04 #带有tag的base image

    #label标签,告诉别人,这个dockerfile谁写的
    LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
    LABEL maintainer=“yc_uuu@163.com"

    #对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
    RUN yum update && yum install -y vim
      Python-dev #反斜线换行
    RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”

    WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
    WORKDIR /test #如果没有就自动创建
    WORKDIR demo #再进入demo文件夹
    RUN pwd     #打印结果应该是/test/demo

    #ADD是可以将本地代码,添加到容器空间内
    ADD and COPY
    ADD hello / #把本地文件添加到镜像中,吧本地的hello可执行文件拷贝到镜像的/目录
    ADD test.tar.gz / #添加到根目录并解压

    WORKDIR /root
    ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
    COPY hello test/ #等同于上述ADD效果

    ADD与COPY
      - 优先使用COPY命令
      -ADD除了COPY功能还有解压功能
    添加远程文件/目录使用curl或wget

    ENV #环境变量,尽可能使用ENV增加可维护性
    ENV MYSQL_VERSION 5.6 #设置一个mysql常量
    RUN yum install -y mysql-server=“${MYSQL_VERSION}”
    ------这里需要稍微理解一下了-------中级知识---先不讲
    VOLUME and EXPOSE

    dockerfile实战,构建自己的flaks镜像

    1.创建文件夹 :mkdir s18dockerfile

    cd s18dockerfile文件目录中。建立两个文件

    touch Dockerfile

    touch s18-Flask.py

    在 s18-Flask.py写入

    #coding:utf8
    from flask import Flask
    app=Flask(__name__)
    @app.route('/')
    def hello():
      return "hello docker"
    if __name__=="__main__":
      app.run(host='0.0.0.0',port=8080)

    2.编写dockerfile

    FROM centos #指定centos基础镜像 COPY CentOS-Base.repo /etc/yum.repos.d/ #拷贝宿主机的文件,到容器空间下 COPY epel.repo /etc/yum.repos.d/ #拷贝宿主机的文件,到容器空间下 RUN yum clean all #执行清空yum缓存的命令 RUN yum install python-setuptools -y #想安装python依赖工具 RUN easy_install flask #想让docker自动安装python2的flask模块 COPY s18-Flask.py/opt/ #把本地代码拷贝到容器内的opt目录下 WORKDIR /opt #进入到opt目录下 EXPOSE 8080 #暴露容器8080端口。供给外部宿主机访问 CMD ["python"," s18-Flask.py"] #cmd代表你要执行的命令

    3.构建build这个dockerfile

    cp /etc/yum.repos.d/CentOS-Base.repo ./

    cp /etc/yum.repos.d/epel.repo ./

    确保文件都准备好了,如下所示

    [root@localhost s18dockerfile]# ls CentOS-Base.repo Dockerfile epel.repo s18-Flask.py

    4.构建dockerfile

    docker build .

    5.通过自己构建的镜像,运行一个flask程序

    docker run -d --name flask -p 5555:8080 s18-Flask.py

    6.通过浏览器去访问宿主机 5555端口,即可访问flask程序

     

    搭建私有仓库

    1.搭建一个私有仓库镜像,官方提供的

    docker pull registry

    2.修改docker的配置文件,让他支持非https的方式推送,安全的方式推送倒私有仓库中

    vim /etc/docker/daemon.json

    {"registry-mirrors": ["http://95822026.m.daocloud.io"] ,"insecure-registries":["192.168.91.128:5000"]: }

    3.修改docker的service配置文件,让他加载/etc/docker/daemon.json

    修改如下配置文件

    vim /lib/systemd/system/docker.service

    只需写入到[service]代码块中如下:

    EnvironmentFile=-/etc/docker/daemon.json

    4.重启docker的服务

    systemctl daemon-reload
    systemctl restart docker

    5.运行这个镜像,生成一个容器实例

    docker run -d 
        -p 5000:5000 
        -v /opt/data/registry:/var/lib/registry 
        registry
        # -v  宿主机的文件夹目录映射容器内的文件夹目录
        -p 端口映射
        #--privileged=true  docker容器的安全机制:设置特权级运行的容器

    6.推送发到hub

    docker push 192.168.91.128:5000/s18-hello-world

    7.检查docker私有仓库的api地址,检查json数据

    http://192.168.91.128:5000/v2/_catalog

    8.尝试下载私有仓库的镜像(在局域网里面下载)

    docker pull 192.168.91.128:5000/s18-hello-world

  • 相关阅读:
    1053: 正弦函数
    1052: 数列求和4
    1051: 平方根的和
    1050: 阶乘的累加和
    POJ 1321 棋盘问题(搜索的方式)
    HDU 1176 免费馅饼
    BZOJ 2423 (求LCS的长度和种类数)
    HDU 2612 (2次BFS,有点小细节)
    POJ 1088 滑雪(模板题 DFS+记忆化)
    HRBUST 1186 青蛙过河 (思路错了)
  • 原文地址:https://www.cnblogs.com/wukai66/p/12142122.html
Copyright © 2011-2022 走看看