Docker 是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在 Linux 操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。 Docker 利用 Linux 核心中的资源分离机制,例如 cgroups,以及 Linux 核心名字空间,来创建独立的容器。
Docker的优势:
- 能更高效的利用系统资源:
- 更快速的启动时间:与传统虚拟化相比,docker容器的启动时间以秒计算。
- 一致的运行环境:可以避免因为主机操作系统、软件安装的不同导致程序BUG,不能及时找出问题。
Docker安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #安装docker
systemctl start docker #启动docker
systemctl enable docker #设置docker开机启动
Docker 镜像常用命令:
* docker search 镜像名 #搜索镜像
* docker pull 镜像名 #拉取镜像
* docker images #查看镜像信息
* docker rmi 镜像名或者ID #删除镜像
* docker rmi -f 镜像名或ID #删除虚悬镜像,例如: docker rmi -f docker.io/centos
* docker rmi $(docker images -q -f dangling=true) #删除所有未打 dangling 标签的镜像
* docker build -t #构建镜像
* docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] #镜像打标签,例如:docker tag centos centos:v1
* docker export 容器ID/容器名称 > xxx.tar #导出容器为tar文件
* docker save [images] [images] > xxx.tar #导出多个镜像合并成一个tar包
* docker load < xxx.tar #导入容器
Docker容器管理:
* docker run -itd --restart=always --name -h hostname [<镜像名>] [CMD命令]
* docker run -itd -P nginx
解释:
* -d #后台运行容器,并返回容器ID
* -i #以交互模式运行容器,通常与 -t 同时使用;
* -P #(大写P)随机端口映射,容器内部端口随机映射到主机的高端口
* -p #(小p)指定端口映射,格式为:主机(宿主)端口:容器端口
* -t #为容器重新分配一个伪输入终端,通常与 -i 同时使用;
* -h nginx #指定容器的hostname;
* --link= 原容器的ID或名字:容器自己 #添加链接到另一个容器;
* -v 主机位置:容器内部位置 #绑定一个卷(目录不可以为相对路径)
* --name nginx-gyl #为容器指定一个名称;
* --restart=always #当docker重启时,容器也随之重启
* nginx #镜像的名称
* docker stop 容器ID/容器名称 #停止容器
* docker ps -a -l #查看容器
* docker exec -ti 容器ID/容器名称 /bin/bash #进入容器
* docker cp (容器ID/容器名称):/usr/lws.logs /root #容器的lws.log 拷贝到宿主机 /root目录下
* docker rm #删除容器
* docker port (容器ID/容器名称) #查看容器映射的端口
* docker logs (容器ID/容器名称) #查看容器日志
* docker ps #查看当前在运行的容器
* docker ps -a #查看所有容器(所有容器,无论是否在运行的容器)
* docker stop $(docker ps -a -q) #停止所有正在运行的容器(或者:docker stop `docker ps -a -q`)
* docker kill $(docker ps -a -q) #杀死所有正在运行的容器
* docker rm $(docker ps -a -q) #删除所有容器(只有先停止才可以删除)
* docker rm -f container_id/container_name #删除正在运行的容器(危险,不给任何提示直接删除)
#批量停止、删除所有容器
* docker ps -a | awk '{print $1}'| egrep -v CONTAINER |xargs docker stop
* docker ps -a | awk '{print $1}'| egrep -v CONTAINER |xargs docker rm
#强制删除所有容器
* for i in `docker ps -a | sed '1d' | awk '{print $NF}'`;do docker rm -f $i;done