基础概念:
1.基于LXC 技术,基于内核虚拟化,kvm是硬件虚拟化,基本启动过程:构建-传输-运行,三大组件:镜像 容器 仓库
对比vm:vm基于Guest os docker基于LXC
docker使用不建议启动ssh:不要当成虚拟机用
2.docker带来的改变
面向产品: 产品交付 面向开发:简化环境配置 面向测试:多版本测试 面向运维:环境一致性 面向架构:自动化扩容-微服务
相关命令记录:
安装:yum install -y docker
启动: systemctl start docker
下载基础镜像并保存 docker pull centos docker save centos >/opt/centos.tar.gz docker load 启动容器:docker run
查看启动容器docker ps -a
docker run --name mydocker -t -i centos /bin/bash //运行容器 选择镜像 运行命令
docker start 容器名 //启动 docker attach 容器名 //进入容器 docker inspect --format "{{.State.pid}}" 容器名
nsenter (yum install util-linux) nsenter -t pid -u -i -n -p (编写脚本)
docker rm 容器名 (-f 直接删除正在运行的容器) docker run --rm centos /bin/bash/ "hehe"
docker ps -a -q //正在运行的容器
brctl show //端口映射 docker logs 镜像名 //查看日志
docker run -it --name data-test1 -v /data centos
dcoker run -it -v /opt:/opt:rw centos
docker run -it --volumes-from /data centos
docker logs --tail 0 -f 容器id 查看日志
镜像管理:
1.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
2.查看当前有些什么images
docker images
3.删除images,通过image的id来指定删除谁
docker rmi
想要删除untagged images,也就是那些id为的image的话可以用
docker rmi $(docker images | grep "^" | awk "{print $3}")
要删除全部image的话
docker rmi $(docker images -q)
启动一个nginx容器
docker run -it centos --name mynginx
rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm yum install -y nginx //退出后
docker commit -m "my-nginx" 05e1e23eebe4 linge/nginx:v1 //生成镜像
//启动镜像 docker run -d -it --name nginx-v1 linge/nginx:v1
dockerfile 构建
四部分: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令
from:基础镜像
MAINTAINER:维护者信息
RUN: 运行命令 ADD :增加文件 相当于copy WORKDIR:cd 某个目录 VOLUME:目录挂载 EXPOSE:端口 RUN 进程要一直运行下去
docker build -t linge/nginx:v1-build /srv/dockerfile/
#version 1 #Author: gelin #Base image From linge/tomcat-basic:v4
#Maintainer MAINTAINER [email protected] ENV LANG C.UTF-8
ENV PATH /usr/bin:$PATH #Commands RUN mv /srv/tomcat/tomcat8/ /srv/tomcat/tomcat_account ADD ROOT.war /srv/tomcat/tomcat_account/webapps/ EXPOSE 8080 EXPOSE 20902 ENTRYPOINT ["/srv/tomcat/tomcat_account/bin/catalina.sh", "run" ] |
docker 仓库
docker pull registry 下载仓库镜像
docker run -d -p 5000:5000 -v /srv/docker-registry:/tmp/registry registry 启动仓库 本地挂载目录存储镜像数据
echo "ADD_REGISTRY='--add-registry 192.168.1.203:5000'" >> /etc/sysconfig/docker
echo "INSECURE_REGISTRY='--insecure-registry 192.168.1.203:5000'" >> /etc/sysconfig/docker //禁用https访问 需要重启docker
docker commit 容器id,name 192.168.1.203:5000/reg-nginx
docker tag linge/nginx:v1-touch 192.168.1.203:5000/reg-nginx //将本地某一个镜像打tag 也可以使容器id
docker push 192.168.1.203:5000/reg-nginx //上传镜像到仓库
jenkins+docker+ansible
Jenkins 拉去远端源码 —— git
实现应用打包 —— jenkins本地
把应用程序打包进Docker镜像 —— Dockerfile
镜像上传到Docker私有仓库 —— shell或者 Docker相关的Jekins插件
删除老的Docker容器,运行新的Docker容器 —— shell脚本
限制资源
设置-m,--memory-swap=b,且b > a
给-m设置一个参数 a,给--memory-swap设置一个参数 b。a 时容器能使用的内存大小,b是容器能使用的 内存大小 + swap 分区大小。所以 b 必须大于 a。b -a 即为容器能使用的 swap 分区大小。
docker run -it --rm --cpus=2 u-stress:latest /bin/bash 限制cpu能使用的核数,1.13后的版本,也可以设置权重,指定固定的cpu