docker技术栈 一
自己总结
阿里镜像仓库登录
1、docker login --username=田田田哒哒哒哒 registry.cn-hangzhou.aliyuncs.com
重新打标记
将本地镜像推送到Registry镜像仓库
docker tag daocloud.io/library/mysql:5.7.5-m15 registry.cn-hangzhou.aliyuncs.com/mingqingxx/nginx:v1.2
上传到自己的仓库
1、docker push registry.cn-shanghai.aliyuncs.com/youngfit/nginx:1.1
镜像操作指令
2、docker run -it -p 80:80 nginx:latest /bin/bash #端口转发
4、docker pull #拉取镜像
1.1按星级搜索镜像
查找 star 数至少为 100 的镜像,默认不加 s 选项找出所有相关 centos 镜像:
1、docker search centos -s 100
或者
2、docker search ubuntu -f stars=100
1.2查看镜像详情
1、docker inspect +名称 或者id #查看详细信息
2、docker images #查看本地镜像
3、docker images -q #只查看所有镜像的id
4、docker rmi #删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id
参数解释:
rm Remove one or more containers ---移除一个或多个容器
rmi Remove one or more images ---删除一个或多个镜像
1.3删除所有镜像,慎用
1、docker rmi $(docker images -q)
2、docker rmi `docker images -q`
容器操作指令
1.4容器运行
1、docker run -it nginx:latest /bin/bash #启动容器,容器应用不运行
2、docker run -itd nginx:latest #启动容器,容器应用运行
3、docker run -it nginx:latest /bin/bash #运行容器 加名字 版本
4、docker start name #容器ID也可以 启动容器
5、docker stop name #关闭容器
6、docker rename mytest testmy #旧名称 新名称 修改容器名称
7、docker stats # 动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O
1.5查看容器的运行
1、docker ps #只查看运行状态的容器:
2、docker ps -a # 查看所有容器
3、docker ps -a -q #只查看所有容器id
1.6进入退出容器
1、docker exec -it +名称 或者id #进入容器
2、exit #断开与容器的连接,并且关闭容器
3、 快捷键:ctrl+p+q #断开和容器的连接而不关闭容器:
1.7监控容器
1、可以使用logs、top、wait这些子命令
2、docker logs -f nginx1
3、docker top nginx #容器ID也可以
4、docker wait 01d8aa #第二个终端操作
0
docker run 之后容器退出的状态码:
0,表示正常退出
非0,表示异常退出(退出状态码采用chroot标准)
125,Docker守护进程本身的错误
126,容器启动后,要执行的默认命令无法调用
127,容器启动后,要执行的默认命令不存在
1.8删除容器正确三步曲
1、先停止容器
2、然后删除容器
3、最后删除镜像
# docker rm 容器id或名称
要删除一个运行中的容器,添加 -f 参数 --慎用。先stop在删除
docker pause c7 #挂起
docker unpause c7 #恢复
pause :暂停容器中所有的进程
unpause:恢复容器内暂停的进程,与pause对应
1.9进入容器快捷指令
如果你想进入一个容器是不是需要 docker exec + 容器+ id /bin/bahs
这个方法是最直接的,有没有一种方法是可以直接进入的呢?回答是有
快速进入
cd /usr/bin/ 进入这个目录下面
vim de #名字自定义
docker exec -it $1 /bin/bash
chomd +x /usr/bin/de #给执行权限
测试
2.0容器之间相互COPY文件
1、docker cp 容器名:/test.sh /root/ #mytest是容器名称 里面的文件 拷贝到那
2、docker cp /root/test.sh 容器名:/ #拷贝进去外面的文件
2.1容器文件系统打包
第一种方式:
1、docker export -o centos6-1.tar 96e2b726
#前面自定义名称 后面是容器id或名称 -o --output
第二种方法,强烈建议使用第二种
2、docker export 容器名称或id > 镜像.tar
2.2上传容器tar包到docker
1、 docker import 镜像.tar 名称:版本号 #后面容器名称,版本号自定义
2.3容器创建本地镜像
将这个新建的文件提交到镜像中保存,生成新的镜像
第一种方法
1、docker commit 镜像id或名称 soso/test:v2 #后面容器名称,版本号自定义
第二种方法,强烈建议第二种
2、docker commit -m "my images version1" -a "soso" 108a85b1ed99 daocloud.io/ubuntu:v2
参数详解
-m 添加注释
-a 作者
108a85b1ed99 容器环境id
daocloud.io/ubuntu:v2 镜像名称:hub的名称/镜像名称:tag
-p,–pause=true 提交时暂停容器运行
镜像迁移
2.4镜像打包
save
将镜像打包,与下面的load命令相对应
1、docker save -o nginx.tar daocloud.io/library/nginx #强烈建议后面跟镜像名称
这里解释一下,为什么后面上跟,镜像名称,如果跟镜像id,你把镜像放到其他docker上面运行镜像,会造成一个现象,那就是不显示镜像名称,只显示镜像id,就会很迷惑
镜像上传
load
与上面的save命令相对应,将上面sava命令打包的镜像通过load命令导入,(实验环境中原来机器上面有镜像可以先删除掉。)
1、docker load < nginx.tar #上传本地镜像tar包到docker
参数详解
把容器导出成tar包 export import
把容器做成镜像 commit -a "" -m ""
把镜像保存为tar包 save load
2.5-Dockerfile创建镜像,重点中的重点
docker build语法:
1、docker build -t 名称/镜像名称:版本号 #docker镜像编写
参数详解
docker build 是docker创建镜像的命令
-t 是标识新建的镜像属于 soso的 bbauto镜像
:v2.1 是tag
"."是用来指明 我们的使用的Dockerfile文件当前目录的
2.6Dockerfile指令
详解图片一
详解图片二
dockerfile案例一 目录
新版本的docker 已经不区分 Dockerfile的大小写
1、vim Dockerfile #This is a comment
2、FROM daocloud.io/library/centos:7 #基于哪个基础镜像 最好是提前有,
3、MAINTAINER soso soso@docker-server #指定作者
4、RUN touch a.txt && mkdir /test #写到一层可以缩小镜像
5、RUN yum -y install vim wget
格式说明:
命令要大写,"#"是注解。 要写在第二行,新版本
每一个指令后面需要跟空格,语法。
FROM 命令是告诉docker 我们的镜像什么从哪里下载。
MAINTAINER 是描述 镜像的创建人。
RUN 命令是在镜像内部执行。就是说他后面的命令应该是针对镜像可以运行的命令。
dockerfile案例二-nginx
[root@docker-server nginx]# vim Dockerfile
FROM centos:7.8
MAINTAINER mingqing
RUN yum -y install epel-release && yum -y install nginx && yum clean all
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
创建镜像
命令:
# docker build -t mingqing/nginx:v2.
docker build 是docker创建镜像的命令
查看镜像
实战案例三 jenkins
将以下安装包拷贝至jenkins目录中,我们知道jenkisn,可以运行在tomcat里面
需要配置 三个安装包,都上传到这个目录下面
FROM centos:7.8
MAINTAINER mingqing
ENV JAVA_HOME /usr/local/java
ENV TOMCAT_HOME /usr/local/tomcat
ENV PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH
ADD apache-tomcat-8.5.46.tar.gz /usr/local/
ADD jdk-8u121-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/apache-tomcat-8.5.46 /usr/local/tomcat && mv /usr/local/jdk1.8.0_121 /usr/local/java && rm -rf /usr/local/tomcat/webapps/*
COPY jenkins.war /usr/local/tomcat/webapps
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
详解
资源限制
1.先将没有做限制的命令运行起来
docker run --rm -it progrium/stress --cpu 4
2.在开启一个终端,运行做了CPU限制的命令
docker run --rm -it -c 512 progrium/stress --cpu 4
因为默认情况下,容器的 CPU share 为 1024,所以这两个容器的 CPU 使用率应该大致为 2:1,下面是启动第二个容器之后的监控截图:
限制容器只能使用 1.5 核数 CPU
1、docker run --rm -it --cpus 1.5 progrium/stress --cpu 3
在容器里启动三个 stress 来跑 CPU 压力,如果不加限制,这个容器会导致 CPU 的使用率为 300% 左右(也就是说会占用三个核的计算能力)。实际的监控如下图:
CPU 绑定
限制容器运行在某些 CPU 核
案例:
假如主机上有 4 个核,可以通过 —cpuset 参数让容器只运行在前两个核上:
1、docker run --rm -it --cpuset-cpus=0,1 progrium/stress --cpu 2
这样,监控中可以看到只有前面两个核 CPU 达到了 100% 使用率。
容器卷
docker run -it --name testnginx -v /test:/test2 daocloud.io/library/nginx /bin/bash
端口转发
使用端口转发解决容器端口访问问题
-p:创建应用容器的时候,一般会做端口映射,这样是为了让外部能够访问这些容器里的应用。可以用多个-p指定多个端口映射关系。