微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

云计算与自动化运维实践

1. Docker介绍

go语言编写,源代码在github。

image

docker.io

build,ship,run

image

image

2. 应用场景

image

1. 简化配置;2.开发效率;3.服务整合;4.多客户;5.代码管理;6. 应用隔离;7.开发调试;8.快速部署

面向产品测试、开发、运维全方位的使用。

3. 容器和镜像

docker有像github的仓库。

可以使用docker search centos 来搜索镜像。

镜像一类是官方的,一类是用户创建的。

docker pull centos

docker images #查看本地镜像文件

image

docker rmi 后面跟镜像ID

docker run centos /bin/echo ‘Hello world’

运行镜像,执行/bin/echo ‘Hello world’

docker ps -a #查看容器

NAMES 容器的名字,运行时不声明名字的话会在名称库里起一个名字。

docker run --name mycentos -it centos /bin/bash

--name 为容器起个名字, -i 交互式 -t 伪终端绑定到标准输入上

可以直接运行,镜像不存在的话会自动从镜像库下载。

容器运行时会分配一个ip地址,分配一个文件系统。可以写文件

ip ad li,无ifconfig命令

运行一个指定的一个程序,如/bin/bash

退出程序后容器也退出

启动退出的容器:docker start ID

docker run -d --name docker1 centos

后台运行容器

运行的容器不能删除,或加上-f参数。

停止容器:docker stop ID

目前没有提供批量停止、删除容器的办法。

image

docker exec | docker attach 进入容器

docker attach ID 进入容器,一些容器进入会有问题,ctrl+c,然后容器会停止。

nsenter 进入容器,这个是访问另外一个进程的命名空间的命令。

没有这个命令的话需要安装一下。

yum install -y util-linux

docker start ID

docker inspect --format “{{.State.Pid}}” myNginx/ID

获取容器的PID

nsenter --target PID --mount --uts --ips --net --pid

进入容器

可以装ssh,直接登录进入,但是不建议。

这种方式进入容器退出后不会影响容器的运行。

可以把这种办法写成一个脚本。

4. 进入容器和访问网络

cat in.sh

#!/bin/bash

AME=$1

ID=$(docker inspect --format “{{.State.Pid}}” $CNAME)

nsenter --target “$CPID” --mount --uts --ips --net --pid

#./in.sh myNginx

使用脚本进入容器

访问容器:

brctl show

进入容器ping baidu.com,可以看到能上网。

ip ro li 查看路由

docker run -d -P --name myNginx Nginx

随机映射的映射好处是端口不会冲突,也可以指定端口。

可以指定多个端口。

5. Docker数据管理

两种数据保存方法

-v /data 创建data的数据卷

docker run -it --name test1 -h Nginx -v /data centos

-h 指定主机名。

-v 方式直接写入数据。

docker inspect -f {{.Volumes}} test1

查看映射的目录,也就是数据保存在物理主机的目录。

在物理主机目录里写数据在容器里也可以看到。

-v src:dst 指定物理主机的目录挂载到容器里。

-v src:dst:ro 只读,让容器只读文件

--volumes-from

docker run -it --name test4 --volume-from test3 centos

挂载另外一个容器的卷,即使那个容器停止。

可以让一个容器充当挂载的功能

6. Docker镜像构建

进入centos容器

安装相关的依赖包。

docker run --name Nginx-man -it centos

yum install -y wget gcc gcc-c++ make opssl-devel

wget http://Nginx

wget http://pcre

mv *.gz /usr/local/src

tar zxvf *.gz

useradd -s /sbin/nologin -M www

./configure --prefix=/user/local/Nginx --user=www group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/pcre/pcre-8.3.7

make

make install

vi /etc/rc.d/rc.local

/usr/local/Nginx/sbin/Nginx

添加以上脚本不可以,需要放到前台执行。

修改配置文件,让它在前台运行:

vi /usr/local/Nginx/conf/Nginx.conf

添加:daemon off;

然后退出,进入物理机。

docker commit -m “myNginx” ID luotuo/my-Nginx:v1

返回一个ID

doker images

可以看到有一个刚才创建的镜像。

可以运行:

docker run -d -p 80:80 luotuo/myNginx:v1 /user/local/Nginx/sbin/Nginx

7. Dockerfile

物理机:mkdir /opt/docker-file/Nginx

vi Dockerfile

# This is My first Dockerfile.

# Version 1.0

# Author: luotuo

#Base

FROM centos

#MAINTAINER

MAINTAINER LuoTuo

#ADD

ADD pcre-8.3.7.tar.gz /usr/local/src

ADD Nginx-1.9.3.tar.gz /usr/local/src

#RUN

RUN yum install -y wget gcc gcc-c++ make openssl-devel

RUN useradd -s /sbin/nologin -M www

#workdir

workdir /usr/local/src/Nginx-1.9.3

RUN ./configure --prefix=/user/local/Nginx --user=www group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/pcre/pcre-8.3.7 && make && make install

RUN echo “daemon off”; >> /usr/local/Nginx/conf/Nginx.conf

#EXPOSE PORT

EXPOSE 80

ENV PATH /usr/local/Nginx/sbin:$PATH

CMD [“Nginx”]

构建:docker build -t Nginx-goujian:v1 /opt/docker-file/Nginx

构建时每一步都是一层。

8. 资源隔离和限制

使用到LXC Kernel namespace

资源隔离:namespace的类型:PID,NET,cpu,IPC,MNT,UTS,USER,

资源限制:cgroup:cpu,RAM,disK还做不到。

stress 压力测试工具

yum install -y stress

mkdir stress && cd stress

wget http://../epel-7.repo

vi stress-dockerfile

FROM centos

ADD epel-7.repo /etc/yum.repos.d/

RUN yum -y install stress && yum clean all

ENTRYPOINT [“STRESS”]

#docker build -t stresss .

#docker run --help

-c, --cpu-shares=0 配额,认每个容器有1024个配额。

配额是相对的,相对于物理机来讲,多个容器的情况下每个容器会平均分配。

docker run -it --rm stress --cpu 1 #rm,容器退出自动删除

docker run -it --rm -c 512 stress --cpu 1

--cpuset-cpus=

内存限制

docker run -it --rm -m 128m stress --vm 1 --vm-bytes 120m --vmhang 0

9. 网络和Registry

网络模式,认是桥接模式。bridge

host模式

使用另外一个容器的host模式

ifconfig 可以看到docker0

docker run --help

brctl show

docker run registry

启动一个docker registry。5000端口。

docker tag es 192.168.199.200:5000 test/es:v1

docker push 192.168.199.200:5000/text/es:v1

可以指定仓库,进行pull,认使用github仓库。

docker-compose

10. Dashboard

webui:shipyard

docker server重启的时候容器会down。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐