Docker常用命令

1、什么是Docker?优点是什么?有哪些核心概念?

Docker 是一个开源的应用容器引擎 ,是一款快速构建、运行、管理应用 的工具。容器完全使用沙盒机制 ,互相之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖任何语言、框架或包装系统

  1. 优点:Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用;
  2. 镜像:将应用所需要的函数库、依赖、配置等与应用一起打包得到的就是镜像。
  3. 容器:根据镜像的应用进程创建的隔离环境就是容器。
  4. 镜像仓库:存储和管理镜像的服务就是镜像仓库。(最大的镜像仓库:DockerHub)

2、镜像操作命令有哪些?

  1. 搜索:docker search 镜像名称
  2. 拉取:docker pull
  3. 推送:docker push
  4. 查看(所有)镜像:docker images [-q]
  5. 删除:docker rmi 镜像名称
  6. 删除所有:docker rmi 'docker images -q'
  7. 制作镜像:docker build -t 镜像名称 .
  8. 导出镜像:docker save -o 镜像名称.tar 镜像名称
  9. 加载镜像:docker load -i 镜像名称.tar
  10. 容器转为镜像:docker commit 容器名称 镜像名称

3、容器操作命令有哪些?

  1. 查看(正在运行的):docker ps [-a]
  2. 删除(强制):dockers rm [f] 容器名称
  3. 删除所有:docker rm -f $(docker ps -a)
  4. 创建容器:docker create -d --name=容器名称 -p宿主机端口:容器内端口 镜像名称
  5. 创建并运行容器:docker run -d --name=容器名称 -p宿主机端口:容器内端口 镜像名称
  6. 启动容器:docker start 容器名称
  7. 停止容器:docker stop 容器名称
  8. 重启容器:docker restart 容器名称
  9. 暂停容器:docker pause 容器名称
  10. 恢复容器:docker unpause 容器名称
  11. 进入容器:docker exec -it 容器名称 /bin/bash
  12. 查看容器信息:docker inspect 容器名称或容器id
  13. 创建容器相关设置:
    • 自启动:restart=always
    • 挂载数据卷:-v es-data(数据卷名称):/usr/share/elasticsearch/data(容器内)
    • 创建网络:docker network create es-net(网络名称)
    • 加入网络:-- network es-net(网络名称)
    • 端口映射:-p 宿主机端口:容器内端口
  1. 修改容器设置语法:docker update --restart=no(相关设置) 容器id

4、数据卷操作命令有哪些?

  1. 创建数据卷:docker volume create 数据卷名称 (位于/var/lib/docker/volume目录)
  2. 查看当个数据卷详情:docker volume inspect 数据卷名称
  3. 查看数据卷列表:docker volume ls
  4. 删除数据卷:docker volume rm 数据卷名称
  5. 删除未使用的数据卷:docker volume prune
  6. 创建容器时挂载数据卷:
    • 挂载数据卷(会自动创建数据卷):docker run -v 数据卷名称:容器内目录路径
    • 挂载指定目录(要自己创建):docker run -v 绝对路径:容器内目录路径
  1. (补充)docker 网络:
    • 删除网络:docker network rm 网络名
    • 查看所有网络:docker network lss
    • 将容器连接到指定网络:docker network connect 网络名称 容器名称
    • 断开容器的网络:docker network disconnect 网络名称 容器名称

5、docker如何自定义镜像?docker file的语法是什么样的?

一、创建一个空目录,在这个空目录中创建一个文件,命名为 DockerFile,最后将 java 项目打包成 jar 包,放到这个目录中;

二、编写 Dockerfile 文件

主要编写以下信息:

  1. 基于 java:8-alpine 作为基础镜像
  2. 将 app.jar 拷贝到镜像中
  3. 暴露端口
  4. 编写入口 ENTRYPOINT

Ps:Dockerfile的第一行必须是FROM;从一个基础镜像来构建基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

# 指定基础镜像
FROM java:8-alpine
 
# 拷贝 java 项目包
COPY ./docker-demo.jar /tmp/app.jar
 
# 暴露端口
EXPOSE 8090
 
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar使用 docker build 构建为一个镜像

三、使用 docker build 构建为一个镜像

  • -t 表示设置镜像名和版本号(自定义)
  • . 表示 Dockerfile 所在目录,因为刚刚我是将 Dockerfile 放在了当前文件目录下,所以就用 . 来表示当前目录

通过 docker images 就可以看到刚刚构建好的镜像

四、使用 docker run 运行镜像

这时候你就可以根据服务器 IP 和自己配置的镜像映射端口号以及项目地址就可以访问了(注意:如果需要访问,别忘了开放云服务器的端口号的防火墙)。

DockerFile 本质就是一个文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

6、docker compose是干嘛的?语法是什么样的?

1 、Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!相当于批量的docker run。

**2、**Docker-Compose 将所管理的容器分为三层

工程 (project):一个工程包含多个服务
服务 (service):一个服务当中可包括多个容器实例
容器 (container)

Docker-Compose 运行目录下的所有文件(docker-compose.yml、extends文件 或 环境变量文件等)组成一个工程,若无特殊指定 工程名即为当前目录名。

Docker Compose 的核心就是其配置文件,采用 YAML 格式,默认为 docker-compose.yml 。

在这里插入图片描述

一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。

一个服务当中可包括多个容器实例,但是:Docker-Compose 并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul 技术。

Docker-Compose 的工程配置文件默认为 docker-compose.yml,可通过环境变量 COMPOSB_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一组相关联的应用容器为一个项目 (project)。

相关推荐
MonkeyKing_sunyuhua20 分钟前
ubuntu22.04 docker-compose安装postgresql数据库
数据库·docker·postgresql
追风林1 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
€☞扫地僧☜€2 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
茶馆大橘2 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
全能全知者3 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
阿尔帕兹5 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
ZHOU西口6 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
景天科技苑9 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge10 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇10 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决