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

  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/jkko123/p/6379526.html
Copyright © 2011-2022 走看看