Linux 容器(Linux Containers,LXC)不是模拟一个完整的操作系统,而是对进程进行隔离。
Docker 把应用程序及其依赖,打包在 image 文件(容器的模板)里面。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。Docker Hub
image 文件生成的容器实例,本身也是一个文件,称为Container容器文件。
优点: 启动容器相当于启动本机的一个进程,而不是启动一个操作系统。Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。 (1)提供一次性的环境;(2)提供弹性的云服务;(3)组建微服务架构。
Docker 容器(类似 对象)通过 Docker 镜像(类似 类)来创建。
Client --> Docker daemon --> Registry --> Images --> Container
--> Images --> Container
--> Images
Client: docker build, docker pull, docker run
DOCKER-HOST: Docker daemon, Images, Container
一个 Docker Registry可包含多个 Docker仓库(类似Maven仓库中某jar包路径),每个仓库可包含多个镜像标签(类似Maven仓库中的jar包版本号),每个标签对应一个 Docker镜像。
sudo docker pull tomcat:latest
# 根据指定路径下的dockerfile文件,创建自命名的tag的镜像
docker build -f ${PATH/dockerfile} -t ${name:tag} .
注意: docker build 最后的 .
号,其实是在指定镜像构建过程中的上下文环境的目录给Docker引擎(服务端守护进程)。
docker rmi ${image-id}
docker rmi ${image-alias}
# 某些环境需要先 docker login 进行验证
# 当不指定tag的时候,系统会自动补上latest的tag,然后去匹配
docker tag ${name:old-tag} ${PATH/name:new-tag}
docker push ${PATH/new-name:tag}
docker run
, docker start
, docker create
如果本地不存在该名称的镜像(: 后面可以加版本号), Docker 就会自动从 Docker Hub 下载镜像并启动一个 Docker 容器。
1.1 容器重命名
docker rename $(old-name) $(new-name)
1.2 启动
docker run
只在第一次运行时使用,将镜像放到容器中;docker start
的作用是,重新启动已存在的镜像;docker create
创建一个容器,并处于停滞状态。
# -d 后台运行
# -p 宿主机端口:容器端口,开放容器端口到宿主机端口
# --name="${docker-name}": 为容器指定一个名称;
# 描述:使用docker镜像${image-name:version}以后台模式启动一个容器,将主机的端口1映射到容器的端口2,主机的目录1映射到容器的目录2,并命名为${container-name}
docker run -it --name=${container-name} -p ${host-prot}:${container-port}
-v ${host-PATH}:${container-PATH} -d ${image-name:version}
# -i: 以交互模式运行容器,通常与 -t 同时使用;
# -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
docker run -it ${image-name:tag} /bin/bash
# --restart=always:–restart标志会检查容器的退出码来决定容器是否重启容器
docker ps
# -a :显示所有的容器,包括未运行的。
# -f :根据条件过滤显示的内容。
# -l :显示最近创建的容器。
# -n :列出最近创建的n个容器。
# -q :静默模式,只显示容器编号。
docker ps
# 列出最后创建的2个容器
docker ps -n=2
docker stop
, docker kill
将容器退出。
docker stop ${container-id}
docker stop ${container-name}
发送SIGKILL信号来强制停止容器。
docker kill ${container-id}
# 查看容器所有信息
docker inspect ${container-id}
# 查看容器日志
docker container logs ${container-id}
# 查看容器里的进程
docker top ${container-id}
# ==推荐==
# docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器
docker container exec -it ${container-id} /bin/bash
# 删除容器
docker rm ${container-id}
(1)容器的创建与运行
# 根据指定目录的dockerfile创建容器
docker build -f ${dockerfile-path} -t ${name}:${tag} .
# 临时创建交互式容器
# -t:在新容器内指定一个伪终端或终端;-i:允许你对容器内的标准输入 (STDIN) 进行交互。
docker images
docker run -it ${image-id} bash
# 后台模式以进程形式启动,可通过docker ps查询
# 命名为${docker-name},绑定宿主机和容器的端口和路径
docker run --name ${docker-name} -p ${host-port}:${docker-port} -v ${host-path}:${docker-path} -d ${REPOSITORY}:${TAG}
# 在容器内使用docker logs命令,查看容器内的标准输出,使用ID和NAMES都可以
(2)容器删除
# 无法删除已存在容器的镜像时
docker ps -a
docker rm ${container-id}
docker rmi ${images-id}
docker rmi -f ${images-id}
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统