个人博客欢迎访问
总结不易,如果对你有帮助,请点赞关注支持一下
微信搜索程序dunk,关注公众号,获取博客源码、数据结构与算法笔记、面试笔试题
虚拟机和容器都属于虚拟化技术
虚拟机是在一套硬件上,虚拟出一个完整的操作系统,在该系统上再运行所需的应用程序
容器不是虚拟出一个完整的操作系统,而是对进程的隔离
容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而虚拟机则是在硬件层面实现
Docker有着比虚拟机更少的抽象层
特性 | 虚拟机 | 容器 |
---|---|---|
量级 | 重量级 | 轻量级 |
性能 | 接近原生 | 弱于原生 |
启动时间 | 以分钟为单位 | 以毫秒为单位 |
硬盘使用 | 一般为 GB | 一般为 MB |
占用资源 | 占用更多的内存和CPU资源 | 占用较少的内存和CPU资源 |
隔离性 | 完全隔离,因此更安全 | 进程级隔离,可能不太安全 |
系统支持量 | 一般几十个 | 支持上千个容器 |
LXC(Linux Container):容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源
作为一种新兴的虚拟化技术,Docker 跟传统的虚拟机相比具有众多的优势
三个基本概念即生命周期
三个关键动作
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
push
命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull
下来就可以了注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务
这里主要说一下Docker为什么比VMware快
官网教程
卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
在新主机上首次安装 Docker Engine 之前,您需要设置 Docker 存储库。之后,您可以从存储库安装和更新 Docker
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io
启动docker
sudo systemctl start docker
测试是否安装成功
sudo docker run hello-world
卸载docker
卸载 Docker Engine、CLI 和 Containerd 包
sudo yum remove docker-ce docker-ce-cli containerd.io
主机上的映像、容器、卷或自定义配置文件不会自动删除。删除所有镜像、容器和卷
/var/lib/docker:默认工作路径
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
.配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://clcohfyf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
命令文档
docker version #docker版本信息
docker info #docker详细信息,镜像和容器的数量
docker [命令] --help #查看具体docker命令的解释
docker images
docker images #获取已下载镜像列表
Options:
-a, --all #列出本地所有镜像(包含中间映像层)
--digests #显示镜像摘要信息
-f, --filter filter #过滤
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet #只显示镜像 ID
--no-trunc #显示完整的镜像信息
RESPOSITORY
:镜像名;TAG
:镜像版本,latest
代表最新版;IMAGE_ID
:镜像唯一 ID;CREATED
:镜像的创建时间;SIZE
:镜像的大小。docker search
docker search #搜索镜像
-f, --filter filter:根据提供的条件过滤输出
#比如
docker search -f stars=3000 mysql #列出星数不小于3000的mysql镜像;
--no-trunc:显示镜像完整描述信息;
--limit int:最大搜索结果数(默认 25)
NAME
:镜像名称DESCRIPTION
:镜像描述STARS
:星数(点赞)OFFICAL
:是否是官方镜像AUTOMATED
:是否是自动构建的docker pull
docker pull [IMAGE_NAME]:[TAG] #下载镜像
#IMAGE_NAME:镜像名,TAG :标签,镜像版本,可选的,默认为 latest
docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
# 分层下载 结合联合文件系统
75646c2fb410: Pull complete
878f3d947b10: Pull complete
1a2dd2f75b04: Pull complete
8faaceef2b94: Pull complete
b77c8c445ec2: Pull complete
074029aeaa5f: Pull complete
5a1122545c6c: Pull complete
6c95ccd00139: Pull complete
60a719448fdb: Pull complete
f31898a387a3: Pull complete
bcf402a978dc: Pull complete
cf0bc7da512e: Pull complete
Digest: sha256:c35eb76bbccfd0138c8c68ccb9b4cffe42c488a27f64ddc31a2b5f65aa93fce6 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest 真实地址
docker rmi
docker rmi #删除镜像
docker rmi -f 镜像ID #删除指定镜像
#删除多个镜像
docker rmi -f ID ID ID
#删除所有镜像
docker rmi -f $(docker images -aq)
docker run [参数] image
#运行容器
docker run [参数] image
-- name #为容器起一个名称
-i #以交互方式运行容器,通常与 -t 搭配使用
-t #为容器重新分配一个伪输入终端,通常与 -i 搭配使用
-d #执行完这句命令后,控制台将不会阻塞,可以继续输入命令操作,不会阻塞,也就是启动守护式容器
-it #会进入启动容器的命令控制台,也就是启动交互式容器 退出使用exit
-P #随机端口映射
-p #指定端口映射
image-name #要运行的镜像名称
Ctrl + p + q #不会退出镜像
docker ps
docker ps [参数] #列出所有运行的容器
-a #查看所有容器,包括已停止运行的
-q #静默模式,只显示容器编号
-l #显示最近创建的容器
-n 3 #显示最近创建的 num(此处为 3)个容器
--no-trunc #不截断输出,显示完整信息
CONTAINER ID
:启动时生成的容器 ID;IMAGE
:该容器使用的镜像;COMMAND
:容器启动时执行的命令;CREATED
:容器创建时间;STATUS
:当前容器状态;PORTS
:当前容器所使用的端口号;NAMES
:启动时给容器设置的名称。docker stop
docker stop container-name/container-id #停止容器
docker kill
docker kill container-name/container-id #强制停止容器(类似强制关机)
docker start
docker start container-name/container-id #启动容器
docker run只有在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器的时候,只需要使用命令docker start就可以
docker run相当于执行了两步操作:将镜像(Image)放到容器(Container)中,这一步过程叫做docker create,然后将容器启动,使之变成运行时容器(docker start)
docker start的作用是:重新启动已经存在的容器。也就是说,如果使用这个命令,我们必须先要知道这个容器的ID、或者这个容器的名字,我们可以使用docker ps命令找到这个容器的信息
docker restart
docker restart container-name/container-id #重启容器
docker run -d存在的问题
启动后发现立刻停止掉了
docker 容器使用后台运行 ,就必须有一个前台进程 docker发现没用应用会立刻停止
通过Ctrl + p + q退出容器不会停止容器
docker logs container-id/container-name
docker logs #查看容器日志
参数含义
-t #加入时间戳
-f #跟随最新的日志打印
-n #显示最后多少条
docker logs -tf --tail 10 #容器id 显示指定行数的日志
docker logs -tf #容器id 显示所有日志
docker top
docker top #查看容器中运行的进程信息
docker inspect
docker inspect #查看镜像元数据
docker exec -it containerId
docker exec -it cId #进入正在运行的容器*(进入容器后,开启一个新的中断)
docker attach #容器id /bin/bash (进入正在运行的终端(当前中断))
命令 | 英文 | 中文 |
---|---|---|
attach | Attach to a running container | 当前 shell 下 attach 连接指定运行镜像 |
build | Build an image from a Dockerfile | 通过 Dockerfile 定制镜像 |
commit | Create a new image from a container changes | 提交当前容器为新的镜像 |
cp | Copy files/folders from the containers filesystem to the host path | 从容器中拷贝指定文件或者目录到宿主机中 |
create | Create a new container | 创建一个新的容器,同 run,但不启动容器 |
diff | Inspect changes on a container’s filesystem | 查看 docker 容器变化 |
events | Get real time events from the server | 从 docker 服务获取容器实时事件 |
exec | Run a command in an existing container | 在已存在的容器上运行命令 |
export | Stream the contents of a container as a tar archive | 导出容器的内容流作为一个 tar 归档文件[对应 import] |
history | Show the history of an image | 展示一个镜像形成历史 |
images | List images | 列出系统当前镜像 |
import | Create a new filesystem image from the contents of a tarball | 从 tar 包中的内容创建一个新的文件系统映像[对应 export] |
info | Display system-wide information | 显示系统相关信息 |
inspect | Return low-level information on a container | 查看容器详细信息 |
kill | Kill a running container | kill 指定 docker 容器 |
load | Load an image from a tar archive | 从一个 tar 包中加载一个镜像[对应 save] |
login | Register or Login to the docker registry server | 注册或者登陆一个 docker 源服务器 |
logout | Log out from a Docker registry server | 从当前 Docker registry 退出 |
logs | Fetch the logs of a container | 输出当前容器日志信息 |
port | Lookup the public-facing port which is NAT-ed to PRIVATE_PORT | 查看映射端口对应的容器内部源端口 |
pause | Pause all processes within a container | 暂停容器 |
ps | List containers | 列出容器列表 |
pull | Pull an image or a repository from the docker registry server | 从 docker 镜像源服务器拉取指定镜像或者库镜像 |
push | Push an image or a repository to the docker registry server | 推送指定镜像或者库镜像至 docker 源服务器 |
restart | Restart a running container | 重启运行的容器 |
rm | Remove one or more containers | 移除一个或者多个容器 |
rmi | Remove one or more images | 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除] |
run | Run a command in a new container | 创建一个新的容器并运行一个命令 |
save | Save an image to a tar archive | 保存一个镜像为一个 tar 包[对应 load] |
search | Search for an image on the Docker Hub | 在 docker hub 中搜索镜像 |
start | Start a stopped containers | 启动容器 |
stop | Stop a running containers | 停止容器 |
tag | Tag an image into a repository | 给源中镜像打标签 |
top | Lookup the running processes of a container | 查看容器中运行的进程信息 |
unpause | Unpause a paused container | 取消暂停容器 |
version | Show the docker version information | 查看 docker 版本号 |
wait | Block until a container stops, then print its exit code | 截取容器停止时的退出状态值 |
参考文献:
Docker 从入门到实践系列一 - 什么是Docker
《Docker从入门到实践》
官网文档