Docker入门及架构详解

一、了解Docker

Docker 是一种容器化平台,可以轻松地将应用程序及其依赖项打包为容器,以便在不同的环境中运行。

那么,容器和虚拟机VM有什么区别?

传统的虚拟机有 VMware, VirtualBox ,它们需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦开启,预分配给它们的资源将全部被占用。每一台虚拟机包括应用,必要的运行库,以及一个完整的用户操作系统。

而容器技术是与宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核,在宿主机操作系统之上以分离的进程运行。

对比如下图所示:

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里。运行这个文件,就会生成一个虚拟容器,程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样,有了 Docker,就不用担心环境问题。

二、Docker架构

主要包含下面几个部分:

1、Docker Daemon

Docker Daemon 是 Docker 架构中最重要的组件之一。它是在 Docker 主机上运行的后台进程,负责管理 Docker 容器的生命周期和容器运行时环境。Docker Daemon 还负责管理 Docker 镜像和 Docker 网络。

2、Docker Client

Docker Client 是 Docker 架构中的另一个关键组件。它是与 Docker Daemon 通信的主要方式。使用 Docker Client,您可以从 Docker Hub 中搜索和下载 Docker 镜像,创建和管理 Docker 容器,以及管理 Docker 网络和存储。

3、Docker Registry

Docker Registry 是一个存储和分发 Docker 镜像的中央存储库。它可以是公共存储库,如 Docker Hub,也可以是私有存储库,如 Docker Trusted Registry。您可以使用 Docker Client 从 Docker Registry 中搜索和下载 Docker 镜像。

4、Docker Images

Docker Images(镜像)是 Docker 容器的基础。它是一个只读的模板,用于创建 Docker 容器。Docker 镜像包括操作系统、应用程序和所有依赖项。您可以使用 Dockerfile 或从 Docker Hub 中下载 Docker 镜像来创建自己的 Docker 镜像。

5、Docker Containers

Docker Containers(容器)是基于 Docker 镜像创建的运行时实例。每个 Docker 容器都是相互隔离的,可以在其自己的命名空间中运行。Docker 容器包括应用程序、运行时环境和所有依赖项。

除此之外,还有一些Docker管理的工具:

  • Docker Compose:Docker Cmpose 是一个工具,可以使用 Docker Compose 文件将多个 Docker 容器组合在一起。Docker Compose 文件定义了所有容器的配置,包括容器之间的依赖关系和网络配置。
  • Docker Swarm:Docker Swarm 是 Docker 的内置集群管理器。它可以将多个 Docker 主机组合在一起,以形成一个单一的虚拟主机。Docker Swarm 可以自动化容器的部署、伸缩和故障转移。

三、Docker常用指令

1、启动类

(1)启动 docker

systemctl start docker

(2)关闭 docker

systemctl stop docker

(3)重新启动 docker

systemctl restart docker

(4) docker 设置自启动

systemctl enable docker

(5)查看 docker 运行状态

systemctl status docker

(6) 查看 docker 版本号等信息

docker version

或者

docker info

(7)docker 帮助

docker --help // 查看总体文档
docker run --help // 查看docker run 的帮助文档

2、镜像类

(1)查看镜像

docker images

(2)搜索镜像

docker search [OPTIONS] 镜像名字
docker search mysql

(3)拉取镜像

docker pull
docker pull mysql #没有制定版本则默认最新版 

(4)运行镜像

docker run
docker run tomcat

运行镜像后可以按 ctrl+c 退出

(5)删除镜像

docker rmi  镜像名/镜像ID #若镜像在运行则会报错
docker rmi -f 镜像名/镜像ID #强制删除一个
docker rmi -f mysql
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID #删除多个 其镜像ID或镜像用用空格隔开即可 
docker rmi -f mysql redis
docker rmi -f $(docker images -aq)
#删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID

(6)加载镜像

docker load -i 镜像保存文件位置
docker load -i myimage.tar

(7)保存镜像

docker save 镜像名/镜像ID -o 镜像保存位置和名字
docker save tomcat -o /myimage.tar

3、容器类

(1)查看正在运行的容器

docker ps
docker ps -a # 查看所有容器
#加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

(2)创建容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数:
--name=NAME   #为容器指定名字为NAME,不使用的话系统自动为容器命名
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);

-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
也即启动交互式容器(前台有伪终端,等待交互,一般连用,即-it);

-P: 随机端口映射,大写P
-p: 指定端口映射,小写p
# 创建并允许 Nginx 容器
docker run -d --name nginx -p 80:80 nginx

(3) 启动守护式容器(后台运行)

docker run -d 容器名
docker run -d redis:6.0.8

(4)停止容器

docker stop 容器名
docker stop nginx

(5)启动容器

docker start 容器名
docker start nginx
docker restart 容器名
docker restart nginx

(6)进入正在运行的容器

docker exec -it 容器名 bashshell
docker exec -it nginx /bin/bash```

(7)停止容器

docker stop 容器名
docker stop nginx

(8)强制停止容器

docker kill 容器名
docker kill nginx

(9)删除容器

#删除一个
docker rm 容器ID  
docker rm nginx
docker rm -f 容器ID  #强制删除
docker rm -f nginx

#删除多个
docker rm -f $(docker ps -a -q)
或
docker ps -a -q | xargs docker rm

(10)查看容器日志

docker logs 容器名
docker logs nginx

(11)查看容器内运行的进程

docker top 容器名
docker top nginx

(12)查看容器内部细节

docker inspect 容器名
docker inspect nginx

(13)创建容器数据卷挂载

# 创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

(14) 查看数据卷

docker volume ls

(15)查看数据卷详情

docker volume inspect 数据卷名
docker volume inspect html

(16)删除数据卷

docker volume rm 数据卷名
docker volume rm html

4、网络类

(1)查看网络

docker network ls

(2)创建网络

docker network create 网络名
docker network create hmall

(3)查看网络数据源

docker network inspect 网络名
docker network inspect hmall

(4)删除网络

docker network rm 网络名
docker nerwork rm hmall

四、Docker compose 常用指令

假设docker run 部署 mysql命令如下:

docker run -d \
 --name mysql \
 -p 3306:3306 \
 -e TZ=Asia/Shanghai \
 -e MYSQL_ROOT_PASSWORD=123 \
 -v ./mysql/data:/var/lib/mysql \
 -v ./mysql/conf:/etc/mysql/conf.d \
 -v ./mysql/init:/docker-entrypoint-initdb.d \
 --network hmall
 mysql

那么用docker-compose.yml 文件定义就是:

version: "3.8"
services:
 mysql:
   image: mysql
   container_name: mysql
   ports:
     - "3306:3306"
   environment:
     TZ: Asia/Shanghai
     MYSQL_ROOT_PASSWORD: 123
   volumes:
     - "./mysql/conf:/etc/mysql/conf.d"
     - "./mysql/data:/var/lib/mysql"
   networks:
     - new
networks:
 new:
   name: hmall

(1)查看帮助

docker-compose -h

(2)启动所有服务

docker-compose up
docker-compose up -d # 后台运行

(3)停止并删除容器、网络、卷、镜像。

docker-compose down

(4)进入容器实例内部

docker-compose exec  yml里面的服务id

(5)展示容器

docker-compose ps

(6)展示进程

docker-compose top

(7)查看容器输出日志

docker-compose logs  yml里面的服务id

(8)检查配置

docker-compose config
docker-compose config -q # 检查配置,有问题才有输出

(9)启动服务

docker-compose start

(10)重启服务

docker-compose restart

(11)停止服务

docker-compose stop

 

参考资料:

1、docker | Docker Docs

2、Docker 常用命令大全!!_docker常用命令-CSDN博客

—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花