1. Docker介绍
go语言编写,源代码在github。
docker.io
build,ship,run
2. 应用场景
1. 简化配置;2.开发效率;3.服务整合;4.多客户;5.代码管理;6. 应用隔离;7.开发调试;8.快速部署
面向产品测试、开发、运维全方位的使用。
3. 容器和镜像
docker有像github的仓库。
可以使用docker search centos 来搜索镜像。
镜像一类是官方的,一类是用户创建的。
docker pull centos
docker images #查看本地镜像文件
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命令
启动退出的容器:docker start ID
docker run -d --name docker1 centos
后台运行容器
停止容器:docker stop ID
目前没有提供批量停止、删除容器的办法。
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
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 /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,
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
内存限制
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] 举报,一经查实,本站将立刻删除。