欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker 简介 安装 启动 常用命令

程序员文章站 2024-03-11 19:48:19
...

简介

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

yum -y install docker

启动

systemctl enable docker # 开机自动启动docker
systemctl start docker # 启动docker
systemctl restart docker # 重启dokcer

常用命令

1. 镜像(IMAGES)

1.1 获取镜像

docker pull NAME[:TAG]
例:
docker pull centos:latest

1.2 查看镜像信息

docker images # 列出本机上所有映像

1.3 搜索镜像

docker search ImageName
例:
docker search centos

1.4 删除镜像

docker rmi 标签/ID

1.5 保存镜像

docker save -o xxx.tar ImageName

1.6 读取镜像

docker load --input xxx.tar
docker load < xxx.tar

1.7 上传镜像

docker push ImageName

2. 容器(CONTAINER)

参数说明:
-t 让Docker分配一个伪终端并绑定到容器的标准输入上
-i 让容器的标准输入保持打开

2.1 创建容器

docker create -it centos #创建一个基于centos镜像的容器

2.2 启动容器

docker start CONTAINERID 
docker restart CONTAINERID #重启容器

2.3 新建并启动容器

docker run -it centos
docker run -it --name mycentos centos #指定容器名称为mycentos

2.4 守护态运行容器

docker run -d tomcat #后台运行tomcat镜像的容器

2.5 停止容器

docker stop CONTAINERID 
docker kill CONTAINERID #强行停止

2.6 删除容器

docker rm CONTAINERID 

2.7 进入容器

docker attach CONTAINER_NAME #通过容器名来进入容器 使用Ctrl+P Ctrl+Q来退出
docker exec -ti CONTAINERID /bin/bash #根据容器ID进入容器并启动bash

使用 NSENTER 进入容器 脚本:

#!/bin/bash
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid

使用:

./in.sh CONTAINER_NAME/ID

2.8 查看容器

docker ps    #列出正在运行的容器
docker ps -a #列出所有容器
docker ps -l #列出最新创建的容器
docker inspect CONTAINERID #列出容器的详细信息(JSON格式)
其中 inspect 可以使用 -format 参数指定显示JSON中的某项信息 例:
docker inspect -f "{{.State.Pid}}" c4a2097de5c1 #获取容器PID

2.9 设置容器名称

docker run -it --name mytomcat tomcat

3. 网络

docker run -d -P --name mytomcat tomcat
使用 -P (大写) 参数时,会将容器内端口映射到主机的随机端口上
docker run -d -p 80:8080 --name mytomcat tomcat
使用 -p (小写) 参数时,冒号(:)左边为主机端口,右边为容器端口 即
将容器的8080端口映射到主机的80端口上

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 目录为只读
docker run -d -P -volumes-from mytomcat --name tom1 tomcat
tom1容器或mytomcat容器任何一方对/data目录的修改都会互相看到

5. 日志(LOGS)

docker logs [-f][-t][--tail] CONTAINER_NAME
-f --follows=true | false 默认false 是否一直跟踪日志变化并返回结果
-t --timestamps=true | false 默认false 是否在返回的结果上加上时间戳
--tail="all" 返回结尾处多少数量的日志;不指定默认返回所有日志
例: --tail 10 #只显示最新的10条日志

6. 查看容器进程

docker top CONTAINER_NAME/ID