zoukankan      html  css  js  c++  java
  • centos7下docker1.12.5学习笔记

    一、Docker简介

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    Docker组成 Docker Client 和 Docker Server
    Docker组件 镜像(Image) 容器(Container) 仓库(Repository)

    二、Docker应用场景

    1. 简化配置
    2. 代码流水线(Code Pipeline)管理
    3. 提高开发效率
    4. 隔离应用
    5. 整合服务器
    6. 调试能力Docker
    7. 多租户环境
    8. 快速部署

    三、Docker安装
    请更新自已的yum源,避免安装超时

    http://mirrors.aliyun.com/help/centos
    http://mirrors.163.com/.help/centos.html
    
    > yum install docker-engine

    或者如下(老式写法)

    > yum install docker-io
    > yum install docker.io

    添加开机启动

    > chkconfig docker on
    > chkconfig --list docker

    启动docker

    > systemctl start docker.service

    停止docker

    > systemctl stop docker.service

    四、Docker镜像
    查看版本号

    > docker version

    查看docker层面信息,images,containers数等

    > docker info

    搜索centos镜像

    > docker search centos

    下载镜像

    > docker pull centos

    如果下载时出现超时,请换如下,详细请看http://get.daocloud.io/

    > docker pull daocloud.io/library/centos:latest

    查看镜像

    > docker images
    
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    daocloud.io/library/centos   latest              67591570dd29        4 weeks ago         191.8 MB

    删除镜像

    > docker rmi 镜像ID

    五、Docker容器
    创建一个容器,并运行/bin/echo程序

    > docker run daocloud.io/library/centos /bin/echo "hello world"

    查看所有容器

    > docker ps -a

    --name给容器起个名称
    -i开启输入终端,-t表示使用终端
    该命令通过centos镜像来创建一个mydocker容器,然后运行指定的一个程序,程序退出那容器也退出。

    > docker run --name mydocker -it daocloud.io/library/centos /bin/bash

    退出容器

    > exit

    重新启动原有容器,98c6f96292c1表示容器ID

    > docker restart 98c6f96292c1

    让容器在后台运行,如果镜像没有下载,会自动帮我们下载nginx镜像

    > docker run -d --name mynginx daocloud.io/library/nginx:1.7.1 nginx

    删除容器

    > docker rm 容器ID

    停止容器

    > docker stop 容器ID

    进入容器(不建议)

    > docker attach 容器ID

    获取容器的PID

    > docker inspect --format "{{.State.Pid}}" 容器名称

    通过容器PID进入容器

    > nsenter --target 容器PID --mount --uts --ipc --net --pid

    如果nsenter没有需要安装

    > yum install -y util-linux

    六、Docker网络
    查看主机网桥信息

    > brctl show

    如果提示没有此命令请安装

    > yum install bridge-utils

    在容器中查看路由表

    > ip ro li

    随机映射(把容器中的端口随机映射到主机端口)

    > docker run -d -P --name mynginx2 daocloud.io/library/nginx:1.7.1 nginx

    把容器80端口映射到主机88端口

    > docker run -d -p 88:80 --name mynginx2 daocloud.io/library/nginx:1.7.1 nginx
    

    映射端口的方式:

    -p 主机端口:容器端口
    -p ip:主机端口:容器端口
    -p ip::容器端口
    -p 主机端口:容器端口 -p 主机端口:容器端口

    七、Docker数据管理
    1、数据卷
    主机创建数据卷并挂载到容器/data下

    > docker run -it --name 111 -v /data daocloud.io/library/centos

    把主机的/data挂载到容器的/data2下

    > docker run -it --name 222 -v /data:/data2 daocloud.io/library/centos

    如果发现容器中/data2无法写入文件,请关闭selinux。

    只读

    > docker run -it --name 333 -v /data:/data2:ro daocloud.io/library/centos

    查看数据卷创建在哪了

    > docker inspect -f {{.Mounts}} 容器名
    > docker inspect -f {{.Config.Volumes}} 容器名

    以下写法是老式写法

    > docker inspect -f {{.Volumes}} 容器名
    

     
    2、数据卷容器
    把一个容器当作数据容器来挂载

    > docker run -it --name 444 --volumes-from 容器名 daocloud.io/library/centos
    

     
    八、手动构建Docker镜像
    我们如何自已创建一个nginx镜像?

    首先创建一个centos空容器

    > docker run -it --name mynginx daocloud.io/library/centos

    安装一些必要的库

    > yum install wget gcc gcc-c++ make openssl-devel

    下载pcre和nginx源码

    > wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
    > wget http://mirrors.sohu.com/nginx/nginx-1.10.3.tar.gz

    把源码移动到/usr/local/src下并解压

    > mv *.gz /usr/local/src
    > tar xf pcre-8.39.tar.gz
    > tar xf nginx-1.10.3.tar.gz

    创建用户

    > useradd -s /sbin/nologin -M nginx

    进入nginx目录

    > ./configure --prefix=/usr/local/nginx 
    --with-pcre=/usr/local/src/pcre-8.39 
    --user=nginx 
    --group=nginx 
    --with-http_ssl_module 
    --with-http_realip_module 
    --with-http_stub_status_module
    > make && make install

    让nginx在前台运行(不能让nginx在后台运行)

    > vi /usr/local/nginx/conf/nginx.conf
    daemon off;
    

    提交我们自已创建的镜像

    > docker commit -m "my nginx" 容器ID lackone/mynginx:1
    

    我们来使用我们创建的镜像

    > docker run -d -p 99:80 --name 666 lackone/mynginx:1 /usr/local/nginx/sbin/nginx

    然后我们通过主机IP:99就可以访问容器内的nginx服务器了。


    九、Docker的Dockerfile

    1.基础镜像信息
    2.维护者信息
    3.镜像操作指令
    4.容器启动时执行指令

    创建一个目录

    > mkdir /data/dockerfile
    > cd /data/dockerfile

    创建一个Dockerfile文件,首字母大写

    > vi Dockerfile
    
    #This is Dockerfile
    #Version 1.0
    #Author: lackone
    
    #基础镜像
    FROM daocloud.io/library/centos
    
    #维护者信息
    MAINTAINER lackone
    
    #COPY文件,如果是压缩包会自动解压
    #注意压缩包必须与Dockerfile同目录
    ADD pcre-8.39.tar.gz /usr/local/src
    ADD nginx-1.10.3.tar.gz /usr/local/src
    
    #执行命令
    RUN yum install wget gcc gcc-c++ make openssl-devel
    RUN useradd -s /sbin/nologin -M nginx
    
    #当前工作目录
    WORKDIR /usr/local/src/nginx-1.10.3
    
    #执行命令
    RUN ./configure --prefix=/usr/local/nginx 
    --with-pcre=/usr/local/src/pcre-8.39 
    --user=nginx 
    --group=nginx 
    --with-http_ssl_module 
    --with-http_realip_module 
    --with-http_stub_status_module
    RUN make && make install
    RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
    
    #目录挂载
    #VOLUME
    
    #端口
    EXPOSE 80
    
    #声明环境变量
    ENV PATH /usr/local/nginx/sbin:$PATH
    #运行nginx,进程要一直运行下去
    CMD ["nginx"]

    构建镜像

    > docker build -t 名称:标识 /data/dockerfile/
    

     
    十、Docker资源隔离和限制(cgroup)

    首先我们创建一个压力测试镜像

    > mkdir /data/stress
    > wget http://mirrors.aliyun.com/repo/Centos-7.repo
    > wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz
    > vi Dockerfile
    
    FROM daocloud.io/library/centos
    ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
    ADD stress-1.0.4.tar.gz /usr/local/src
    RUN yum makecache
    RUN yum install -y make automake autoconf gcc gcc-c++
    WORKDIR /usr/local/src/stress-1.0.4
    RUN ./configure --prefix=/usr/local/stress
    RUN make && make install
    ENV PATH /usr/local/stress/bin:$PATH
    #CMD与ENTRYPOINT的区别在于执行docker run时参数传递的方式不同
    ENTRYPOINT ["stress"]

    #构建stress镜像

    > docker build -t stress:1 .

    创建容器并测试
    --rm表示容器退出自动删除

    > docker run -it --rm --name test stress:1 --cpu 1

    -c是docker限制的cpu使用份额
    --cpu是传递给stress的参数

    > docker run -it --rm -c 512 --name test stress:1 --cpu 1

    --cpuset-cpus=0表示第一颗CPU

    > docker run -it --rm --cpuset-cpus=0 --name test stress:1 --cpu 1

    -m 128m表示docker限制的内存大小
    --vm-bytes表示stress测试使用的内存大小

    > docker run -it --rm -m 128m --name test stress:1 --vm-bytes 128m --vm-hang 0
    

     
    十一、Docker网络
    1、桥接模式
    默认docker网络使用的是桥接模式
    当docker启动时会创建一个docker0的虚拟网桥,创建容器时会创建一个网桥接口,通过网桥转发。

    > brctl show
    
    bridge name    bridge id        STP enabled    interfaces
    docker0        8000.0242c41e7d80    no        vethaa35584
                                                  vethbd1676b

    2、host模式
    容器与主机共用一个Network Namespace,共享主机网络信息。
    3、container复用方式
    与另一个容器共用一个Network Namespace,而不是和宿主机共享。
    4、none方式
    容器拥有自已的Network Namespace,但不进行任何网络配置,没有网卡,IP,路由信息。

    十二、Docker的Registry

    把Registry下载下来

    > docker pull daocloud.io/library/registry:0.5.9

    创建容器并运行,启动了一个私有的仓库,主机监听6666端口

    > docker run -d -p 6666:5000 daocloud.io/library/registry:0.5.9

    首先创建一个tag,指定仓库的IP、端口、目录和容器名

    > docker tag 镜像ID 192.168.1.233:6666/test/mynginx:1

    查看镜像

    > docker images

    push镜像到本地仓库

    > docker push 192.168.1.233:6666/test/mynginx:1

    如果无法push成功请修改下面配置,因为要走https

    > vi /etc/sysconfig/docker

    去掉下面的#号,并修改如下,改成自已的IP和端口

    INSECURE_REGISTRY='--insecure-registry 192.168.1.233:6666'

    然后重启服务

    > systemctl restart docker.service

    现在我们就可以把我们push的镜像下载下来了

    > docker pull 192.168.1.233:6666/test/mynginx:1
    

     
    十三、Docker的WEB管理工具

    Shipyard

    > curl -s https://shipyard-project.com/deploy | bash -s

    Shipyard默认访问端口是8080,默认用户名和密码是admin和shipyard

  • 相关阅读:
    连接ACCESS数据库[原创]
    破解金山词霸2007
    上班族饮食十大“夺命”恶习
    C#3.0 新特性速览(1) (2)
    抽象工厂模式(AbstractFactory)创建型模式
    委托创建小记
    八个笑话,八个人生哲理
    自定义对话框[原创]
    一个数字键盘的自定义控件[原创]
    男人绝对需要红颜知己
  • 原文地址:https://www.cnblogs.com/jkko123/p/6379526.html
Copyright © 2011-2022 走看看