简介
Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制[1]。Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担[2]。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、内存、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上运行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以运行,无论是公有云、私有云、单机等。”
安装(Centos中)
切换到root
启动
1
2
3
| systemctl enable docker # 开机自动启动docker
systemctl start docker # 启动docker
systemctl restart docker # 重启dokcer
|
常用命令
1. 镜像(IMAGES)
1.1 获取镜像
1
2
3
| docker pull NAME[:TAG]
例:
docker pull centos:latest
|
1.2 查看镜像信息
1
| docker images # 列出本机上所有映像
|
1.3 搜索镜像
1
2
3
| docker search ImageName
例:
docker search centos
|
1.4 删除镜像
1.5 保存镜像
1
| docker save -o xxx.tar ImageName
|
1.6 读取镜像
1
2
| docker load --input xxx.tar
docker load < xxx.tar
|
1.7 上传镜像
2. 容器(CONTAINER)
参数说明:
-t 让Docker分配一个伪终端并绑定到容器的标准输入上
-i 让容器的标准输入保持打开
2.1 创建容器
1
| docker create -it centos #创建一个基于centos镜像的容器
|
2.2 启动容器
1
2
| docker start CONTAINERID
docker restart CONTAINERID #重启容器
|
2.3 新建并启动容器
1
2
| docker run -it centos
docker run -it --name mycentos centos #指定容器名称为mycentos
|
2.4 守护态运行容器
1
| docker run -d tomcat #后台运行tomcat镜像的容器
|
2.5 停止容器
1
2
| docker stop CONTAINERID
docker kill CONTAINERID #强行停止
|
2.6 删除容器
2.7 进入容器
1
2
| docker attach CONTAINER_NAME #通过容器名来进入容器 使用Ctrl+P Ctrl+Q来退出
docker exec -ti CONTAINERID /bin/bash #根据容器ID进入容器并启动bash
|
使用 NSENTER 进入容器 脚本:
1
2
3
4
| #!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid
|
使用:
1
| ./in.sh CONTAINER_NAME/ID
|
2.8 查看容器
1
2
3
4
5
6
| docker ps #列出正在运行的容器
docker ps -a #列出所有容器
docker ps -l #列出最新创建的容器
docker inspect CONTAINERID #列出容器的详细信息(JSON格式)
其中 inspect 可以使用 -format 参数指定显示JSON中的某项信息 例:
docker inspect -f "{{.State.Pid}}" c4a2097de5c1 #获取容器PID
|
2.9 设置容器名称
1
| docker run -it --name mytomcat tomcat
|
3. 网络
1
2
| docker run -d -P --name mytomcat tomcat
使用 -P (大写) 参数时,会将容器内端口映射到主机的随机端口上
|
1
2
3
| docker run -d -p 80:8080 --name mytomcat tomcat
使用 -p (小写) 参数时,冒号(:)左边为主机端口,右边为容器端口 即
将容器的8080端口映射到主机的80端口上
|
4. 数据卷
1
2
3
4
| docker run -d -P -v /home/ning/data:/data --name mytomcat tomcat
将 /home/ning/data映射到容器 /data 上
docker run -d -P -v /home/ning/data:/data:ro --name mytomcat tomcat
加上 :ro 参数 使容器/data 目录为只读
|
1
2
| docker run -d -P -volumes-from mytomcat --name tom1 tomcat
tom1容器或mytomcat容器任何一方对/data目录的修改都会互相看到
|
5. 日志(LOGS)
1
2
3
4
5
| docker logs [-f][-t][--tail] CONTAINER_NAME
-f --follows=true | false 默认false 是否一直跟踪日志变化并返回结果
-t --timestamps=true | false 默认false 是否在返回的结果上加上时间戳
--tail="all" 返回结尾处多少数量的日志;不指定默认返回所有日志
例: --tail 10 #只显示最新的10条日志
|
6. 查看容器进程
1
| docker top CONTAINER_NAME/ID
|
文章作者
itning
上次更新
2018年03月30日 21:04:43
许可协议
CC BY-NC-ND 4.0