Docker常用操作

2022-10-25 15:55:50 浏览数 (2)

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镜像。

安装方式推荐 使用方法推荐

三、镜像/镜像仓库操作

  1. 拉取最新的 tomcat 镜像到本地
代码语言:javascript复制
sudo docker pull tomcat:latest
  1. 基于 Dockerfile 创建镜像文件 dockerfile可以帮助我们创建自定义的镜像,比较简单直接基于最新的tomcat镜像,当然tomcat镜像也可以自定义(tomcat版本、jdk版本)。
代码语言:javascript复制
# 根据指定路径下的dockerfile文件,创建自命名的tag的镜像
docker build -f ${PATH/dockerfile} -t ${name:tag} .

注意: docker build 最后的 . 号,其实是在指定镜像构建过程中的上下文环境的目录给Docker引擎(服务端守护进程)。

  1. 删除镜像
代码语言:javascript复制
docker rmi ${image-id}
docker rmi ${image-alias}
  1. 将镜像推送到指定环境
代码语言:javascript复制
# 某些环境需要先 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 容器重命名

代码语言:javascript复制
docker rename $(old-name) $(new-name)

1.2 启动 docker run只在第一次运行时使用,将镜像放到容器中;docker start的作用是,重新启动已存在的镜像;docker create创建一个容器,并处于停滞状态。

代码语言:javascript复制
# -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选项自行指定。
代码语言:javascript复制
# -a :显示所有的容器,包括未运行的。
# -f :根据条件过滤显示的内容。
# -l :显示最近创建的容器。
# -n :列出最近创建的n个容器。
# -q :静默模式,只显示容器编号。
docker ps

# 列出最后创建的2个容器
docker ps -n=2

3. 停止容器

docker stop, docker kill 将容器退出。

代码语言:javascript复制
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)应用程序的开源系统

0 人点赞