Docker常用操作
- 一、简介
- 二、架构
- 三、镜像/镜像仓库操作
- 四、容器操作
- 1. 新建并启动容器
- 2. 列出容器
- 3. 停止容器
- 4. 其他操作
- 五、工作中常用命令
docker源码解析
一、简介
Linux 容器(Linux Containers,LXC)不是模拟一个完整的操作系统,而是对进程进行隔离。
Docker 把应用程序及其依赖,打包在 image 文件(容器的模板)里面。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化设置而生成。Docker Hub
image 文件生成的容器实例,本身也是一个文件,称为Container容器文件。
优点: 启动容器相当于启动本机的一个进程,而不是启动一个操作系统。Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。 (1)提供一次性的环境;(2)提供弹性的云服务;(3)组建微服务架构。
二、架构
Docker 容器(类似 对象)通过 Docker 镜像(类似 类)来创建。
代码语言:javascript复制Client --> Docker daemon --> Registry --> Images --> Container
--> Images --> Container
--> Images
Client: docker build, docker pull, docker run
DOCKER-HOST: Docker daemon, Images, Container
- Docker daemon( Docker守护进程) Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker Client与之通信。
- Client( Docker客户端) Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。
- Images( Docker镜像) Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。
- Container(容器) 容器是镜像的可运行实例,可通过 Docker API 或者 CLI 命令来启停、移动、删除容器。
- Registry(仓库) Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,可借助 Docker Registry来避免镜像的手动复制。
一个 Docker Registry可包含多个 Docker仓库(类似Maven仓库中某jar包路径),每个仓库可包含多个镜像标签(类似Maven仓库中的jar包版本号),每个标签对应一个 Docker镜像。
安装方式推荐 使用方法推荐
三、镜像/镜像仓库操作
- 拉取最新的 tomcat 镜像到本地
sudo docker pull tomcat:latest
- 基于 Dockerfile 创建镜像文件 dockerfile可以帮助我们创建自定义的镜像,比较简单直接基于最新的tomcat镜像,当然tomcat镜像也可以自定义(tomcat版本、jdk版本)。
# 根据指定路径下的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}
四、容器操作
1. 新建并启动容器
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标志会检查容器的退出码来决定容器是否重启容器
2. 列出容器
docker ps
- CONTAINER_ID:表示容器 ID。
- IMAGE: 表示镜像名称。
- COMMAND:表示启动容器时运行的命令。
- CREATED:表示容器的创建时间。
- STATUS:表示容器运行的状态。UP表示运行中, Exited表示已停止。
- PORTS: 表示容器对外的端口号。
- NAMES: 表示容器名称。该名称默认由 Docker自动生成,也可使用 docker run 命令的–name选项自行指定。
# -a :显示所有的容器,包括未运行的。
# -f :根据条件过滤显示的内容。
# -l :显示最近创建的容器。
# -n :列出最近创建的n个容器。
# -q :静默模式,只显示容器编号。
docker ps
# 列出最后创建的2个容器
docker ps -n=2
3. 停止容器
docker stop
, docker kill
将容器退出。
docker stop ${container-id}
docker stop ${container-name}
发送SIGKILL信号来强制停止容器。
代码语言:javascript复制docker kill ${container-id}
4. 其他操作
代码语言:javascript复制# 查看容器所有信息
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)容器的创建与运行
代码语言:javascript复制# 根据指定目录的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)容器删除
代码语言:javascript复制# 无法删除已存在容器的镜像时
docker ps -a
docker rm ${container-id}
docker rmi ${images-id}
docker rmi -f ${images-id}
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统