docker基础
docker 的使用场景
1.使用docker容器开发、测试、部署服务。
2.创建隔离的运行环境。
3.搭建测试环境。
4.构建多用户的平台即服务(PaaS)基础设施。
5.提供软件即服务(SaaS)应用程序。
6.高性能、超大规模的宿主机部署。
docker images 镜像
容器的基石
层叠的只读文件系统 bootfs引导文件系统 rootfs root文件系统 add联合加载文件系统 可写层
docker registry 仓库
共有库 docker hub
私有库 自己架设自己的私有仓库
docker 依赖的Linux内核特性
namespaces 命名空间 :提供了系统资源隔离 实现轻量级虚拟化
process ID 进程隔离 (PID)
NET管理网络接口
IPC(InterProcess Communication)管理跨进程通信的访问
MNT (mount)文件系统隔离
UTS (Unix Timesharing System) 隔离内核和版本标识
ControlGroups 控制组:用来分配管理资源
资源限制
优先级设定
资源计量
资源控制
docker容器的能力:
文件系统隔离:每个容器都有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的细腻网络接口和IP地址都是分开的
资源隔离和分组:使用cgroup将CPU和内存之类的资源独立分配给每个docker容器
容器的基本操作:
启动容器:docker run IMAGE [COMMAND] [ARG...]
启动交互式容器:docker run -i -t IMAGE [shell 环境:/bin/sh /bin/bash]
-i --interactive=true | false 默认是false
-t --tty = true | false 默认是false
查看容器: docker ps [-a] [-l]
-a 列出所有的容器
-l 列出最新创建的容器
查看容器详细信息: docker inspect CONTAINER ID / NAMES
自定义容器名字: docker run --name= 自定义名字
重新启动停止的容器:docker start [-i] 容器名字
删除docker已经停止的容器:docker rm CONTAINER ID / NAMES
docker 守护式容器
- 能够长期运行
- 没有交互式会话
- 适合运行应用程序和服务
使用run命令加参数-d 来启动守护式容器
在一个交互式容器 退出时使用Ctrl+P Ctrl+Q 退出,容器会在后台运行。
附加到运行中的容器:
docker attach CONTAINER ID / NAMES
查看容器的日志:
docker logs [-f] [-t][--tail] 容器名/id
-f --follows=true | false 默认为false 跟随日志的变化
-t --timestamps=ture | false 默认为false 在返回的日志上加上时间戳
--tail =“all”
查看容器内进程
docker top 容器名字\ID
在运行中的容器内启动新的进程:
docker exec [-d] [-i] [-t] 容器名\ID [COMMAND ] [ARG...]
停止运行中的容器
docker stop 容器名、ID docker 等待容器停止信号
docker kill 容器名、ID 不等待容器停止 直接杀死容器
容器的端口映射
run [-P] [-p]
-P ,--publish-all = ture | false 默认为false
docker run -P -i -t ubuntu /bin/bash
使用大些的P将会为容器所有暴露的端口进行映射
-p , --publish = []
containerPort 只指定容器的端口,随机映射宿主机的端口
docker run -p 80 -i -t ubuntu /bin/bash
hostPort:containerPort 同时指定宿主机和容器的端口
docker run -p 8080:80 -i -t ubuntu /bin/bash
ip::containerPort 指定ip和容器的端口
docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash
ip:hostPort:containerPort指定ip宿主机端口和容器端口
docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash
使用docker port NAME/ID 查看容器端口映射情况
使用docker top NAME/ID 查看容器内进程情况
在停止后启动或者重启容器时,容器的ip地址和随机映射的端口号会自动发生变动。
容器的镜像存储在/usr/lib/docker
也可以通过docker info 来查看镜像存放详情。
列出镜像
docker images [OPTSIONS] [REPOSITORY]
-a , --all=false
-f , --filter=[]
--no-trunc=false 不使用截断形式去显示容器ID
-q , --quiet=false 是否只显示容器的唯一ID,其他内容不显示出来。
使用inspect查看镜像的详细信息
docker inspect [OPTIONS] CONTAINER | IMAGE [CONTAINER|IMAGE...]
删除镜像
docker rmi [OPTIONS] IMAGE[IMAGE...]
-f , --force=false 强制删除镜像
--no-prune=false 保留被删除中被打标签的副镜像
查找镜像
docker search [OPTIONS] TERM
--automated=false Only show automated builds
只会显示自动化构建出来的镜像
--no-trunc=false Don't truncate output
不限制镜像描述长度
-s , --starts=0 Only displays with at least X starts
只输出starts等级为参数上的镜像
最多返回25个结果
拉取镜像
docker pull [OPTIONS] NAME [:TAG]
--a ,--all-tags=false Download all tagged images in the repository
所有匹配到的镜像全部下载到本地
推送镜像
docker push DOCKERID/REP IMAGENAME
构建docker镜像,自定义镜像将环境和服务打包。
1.docker commit 通过容器构建镜像
2.docker build 通过dockerfile文件构建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a , --author='' '' Author 指定镜像的作者
-m, --message="" commit message 描述镜像的信息
-p, --pause=true . Pause container during commit
在上传镜像是会暂停镜像的运行,指定-p 可以不暂停正在执行的容器
使用dockerfile 文件构建镜像
docker build [OPTIONS] PATH |URL| -
--force-rm=false
--no-cache=false
--pull=false
-q,--quiet=false 构建时不显示构建的过程
-rm=true
-t,--tag="" 构建后镜像名字