一、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

centos7下docker1.12.5学习笔记的更多相关文章

  1. CS229 - MachineLearning - 12 强化学习笔记

    Ng的机器学习课,课程资源:cs229-课件    网易公开课-视频 问题数学模型: 马尔科夫过程五元组{S.a.Psa.γ.R},分别对应 {状态.行为.状态s下做出a行为的概率.常数.回报}. 一 ...

  2. MFC下的aero效果学习笔记

    最近想在MFC中用下aero 首先参考了 http://blog.csdn.net/polytechnic/article/details/5696797 中的一系列的步骤,进行了初步学习 但是对于其 ...

  3. 用mescroll实现无限上拉增加数据,下拉刷新数据 (学习笔记)

    最近自己做一个web app需要用到上拉查询下页数据,网上看了很多很多帖子,发现并不能快速的套用,总是会出现各种问题无法使用,于是无奈自己跑去看了官方api文档,终于做了出来,至此做个笔记,以后用到可 ...

  4. 20135202闫佳歆--week3 课本1-2章学习笔记

    第一章 Linux内核简介 一.Unix Unix是一个强大.健壮和稳定的操作系统. 简洁 绝大部分东西都被当做文件对待.这种抽象使对数据和对设备的操作都是通过一套相同的系统调用借口来进行的:open ...

  5. linux环境下的GUN make学习笔记(一)

    第一章:概述 1.1:make概述 在linux环境下使用make工具能够比较容易的构建一个属于自己的工程,整个工程的编译只需要一个命令就可以完成编译.连接以至于最后的执行.不过我们需要投入一些时间去 ...

  6. linux下的IO模型---学习笔记

    1.linux文件系统和缓存 文件系统接口 文件系统-一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问. 存储层次 文件系统缓存 主存(通常时DRAM)的一块区域 ...

  7. Mac下Shell脚本使用学习笔记(二)

    参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 (7)Shell echo命令: 命令格式:echo string ①显示普通字符串:echo "It is a ...

  8. 4月12日学习笔记——jQuery操作属性和样式

    区分 DOM 属性和元素属性 <img src="images/image.1.jpg" id="hibiscus" alt="Hibiscus ...

  9. 1-2 maven学习笔记(7-8章)

    一,生命周期和插件 1.除了坐标.依赖和仓库之外,maven的另外两个核心概念就是声明周期和插件. 生命周期和插件协同工作,密不可分. 清理 初始化 编译 测试 打包 集成测试 验证 部署 站点生成 ...

随机推荐

  1. ReactiveX 学习笔记(8)错误处理和 To 操作符

    Error Handling Operators Operators to Convert Observables 本文的主题为对 Observable 进行错误处理的操作符以及转换 Observab ...

  2. Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)

    Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

  3. Shell函数使用方法

    Shell函数是一组命令集或语句组成一个可用块.利用函数可以简化脚本编写.函数要求先定义再使用,调用函数时直接使用函数名即可.这里主要介绍shell编程中函数定义.调用.获取函数参数以及获取函数返回值 ...

  4. [ SHELL编程 ] 数组、关联数组和awk数组

    本文主要对shell编程中常用的数组.关联数组和awk数组定义.操作以及注意事项做个总结,并提供具体案例. 数组 数组定义:一对圆括号表示数组,数组元素之间用空格符号分割. Array=(val1 v ...

  5. KVM虚拟化技术(一)虚拟化简介

    一 .虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模 拟多CPU并行,允许一个平台同时运行多个 ...

  6. 三种文本特征提取(TF-IDF/Word2Vec/CountVectorizer)及Spark MLlib调用实例(Scala/Java/python)

    https://blog.csdn.net/liulingyuan6/article/details/53390949

  7. linux 内核根文件系统

    参考: http://blog.csdn.net/guopeixin/article/details/5962482 http://www.yunweipai.com/archives/1184.ht ...

  8. zookeeper 集群配置采坑 Connection refused WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@584] - Cannot open channel to 3 at election address slave2/192.168.127.133:3888

    坑一: Cannot open channel to at election address slave1/ java.net.ConnectException: Connection refused ...

  9. Centos6.5 防火墙设置详解

    vim /etc/sysconfig/iptables #丢弃所有进入请求 INPUT DROP [0:0] #丢弃所有转发请求 FORWARD DROP [0:0] #允许所有的output请求 O ...

  10. overflow属性的用法

    <style type="text/css">div{ background-color:#00FFFF; width:150px; height:150px; ove ...