Docker:容器化技术

引言

传统部署环境逐渐不适应现在的企业开发,为了追求更加轻量,更加容易管理项目,引入了docker容器化技术去实现更加高效的部署环境。

一.docker风光下的内核功能和常用命令

1.docker容器和虚拟机的区别

我们在底层和应用层之间引入了一层docker engine 代替了 guest os ,同时Hypervisor会对硬 件资源进行虚拟化,docker直接使用硬件资源,所以资源利用率相对docker低

2.docker 的整体架构图

1. 镜像(Image : Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统
2. 容器(Container :容器是独立运行的一个或一组应用,是镜像运行时的实体
3. 客户端(client : Docker 客户端通过命令行或者其他工具使用 Docker SDK
( https://docs.docker.com/develop/sdk/) ) 与 Docker 的守护进程通信
4. 主机(host :一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
5. 注册中心(Registry : Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker
Hub( https://hub.docker.com) ) 提供了庞大的镜像集合供使用。
6. Docker Machine:Docker Machine 是一个简化 Docker 安装的命令行工具,通过一个简单的命令
行即可在相应的平台上安装 Docker 。

3.容器之间的隔离性

Docker 容器之间的隔离性体现在以下几个方面:

进程隔离:

每个容器内部运行的进程只属于该容器,容器之间的进程互不可见,互不影响。

文件系统隔离:

每个容器有独立的文件系统,默认情况下,容器之间无法直接访问对方的文件和数据。

网络隔离:

容器有独立的网络命名空间,IP、端口等互不冲突。容器之间默认不能直接通信,除非通过 Docker 网络(如 bridge、overlay)进行连接。

资源隔离:

可以为每个容器分配 CPU、内存等资源限制,防止资源争抢。

用户隔离:

容器内的用户和主机或其他容器的用户相互独立。
总结:

Docker 利用 Linux 的命名空间(namespace)和控制组(cgroup)技术,实现了进程、文件、网络、资源等多方面的隔离,保证了容器之间的安全和独立运行。

4 docker常用基础命令
复制代码
systemctl start docker //启动docker

docker --help //查看docker帮助文档

docker pull 镜像名字 //拉取镜像到本地

docker images  //显示docker pull的镜像资源

docker info  //显示 Docker 系统信息,包括镜像和容器数。

docker version   //显示 Docker 版本信息。

docker events   //从服务器获取实时事件

docker logs  //获取容器的日志

docker history   //查看指定镜像的创建历史。

docker create  //创建一个新的容器但不启动它

docker run :创建一个新的容器并运行一个命令

 docker run -it -d -p 81:80 --name nginx01 nginx //启动一个nginx服务
 #  -it    以互动方式启动
 #  -d     以后台方式启动
 #  --name 命名
 #  -p   端口号映射 本机端口号81隐射nginx服务端口号80

docker start 容器ID或者容器名字 //启动容器

docker restart 容器ID或容器名字 //重启容器

docker stop 容器ID或容器名字  //停止容器运行

docker kill 容器ID或容器名字 //强制杀死该容器

docker rm 容器ID或容器名字  //删除容器

docker logs 容器ID或容器名字 //查看容器日志信息

docker top 容器ID或容器名字 //查看容器运行的进程信息

docker inspect 容器ID或容器名字 //查看容器内部细节信息

//进入容器并交互
docker exec -it 容器ID或容器名字 bash 
docker attach 容器ID或容器名字

二.docker 镜像操作和容器管理

1.镜像是什么,镜像的原理是什么?为什么会有镜像?

镜像就好比一个类,容器就好比一个对象,镜像是构建容器的基础。
镜像拥有一个最底层,我们可以在最底层上面构造一层又一层的方法对它进行增加服务内容

2.镜像管理命令
复制代码
docker build    //命令用于使用 Dockerfile 创建镜像。

docker rmi  // 删除本地一个或多个镜像。

docker commit //从容器创建一个新的镜像。
3.dockerfile

dockerfile是构建镜像的文本文件,是一条条命令和参数所写的脚本
构建的三个步骤

①编写dockerfile文件

②docker build 命令构建镜像

③docker run 镜像运行容器实例
dockerfile的基础知识

①每条保留字指令都必须为大写字母且后面要跟随至少一个参数

②指令执行顺序从上到下,顺序执行

③#表示注释

④每条指令都会创建一个新的镜像并对镜像提交
关键字
FROM : 设置镜像使用的基础镜像
MAINTAINER: 设置镜像的作者 //已被弃用 用label代替
RUN: 编译镜像时运行的脚步
CMD : 设置容器的启动命令
LABEL : 设置镜像标签
EXPOSE : 设置镜像暴露的端口
ENV : 设置容器的环境变量
ADD : 编译镜像时复制上下文中文件到镜像中
COPY : 编译镜像时复制上下文中文件到镜像中
ENTRYPOINT : 设置容器的入口程序
VOLUME : 设置容器的挂载卷
USER : 设置运行 RUN CMD ENTRYPOINT 的用户名
WORKDIR : 设置 RUN CMD ENTRYPOINT COPY ADD 指令的工作目录
ARG : 设置编译镜像时加入的参数
ONBUILD: 设置镜像的 ONBUILD 指令
STOPSIGNAL: 设置容器的退出信号量

写一个简单的dockerfile例子

复制代码
FROM  ubuntu
LABEL name="lion" 

RUN apt-get update && apt-get install -y vim
RUN echo "hello World" > /hello.txt
RUN mkdir /app
CMD [ "bin/bash" ]

ENV MY_VAR=hello

EXPOSE 8080
WORKDIR /app


VOLUME [ "/data1","/data2" ]

docker build -t ubuntu01 -f dockerfile .
4.docker数据卷

数据据的命令介绍

复制代码
docker volume create  //创建数据卷

docker volume inspect //查看数据卷的信息
 
docker volume ls      //展示所有的数据卷
 
docker volume prune   //删除容器未使用的数据卷

docker volume rm      //删除指定的数据据

映射案例 在宿主机的文件修改会映射到容器内的文件

三.docker网络

1,docker 网络是什么,有什么作用?,解决了什么问题?

Docker 网络是容器间及与外部通信的虚拟网络。作用是让容器能互访、连外网、安全隔离。解决了容器间通信难、跨主机组网、动态分配 IP、流量隔离及负载均衡等问题,简化微服务网络管理。

2.docker网络的常用命令
复制代码
//连接一个容器到一个网络
docker network connect   //Connect a container to a network
//创建一个网络
docker network create   //Create a network
//将容器从一个网络中断开
docker network disconnect //Disconnect a container from a network
//查看网络的详细信息
docker network inspect //Display detailed information on one or more networks
//查看网络列表
docker network ls //List networks
//移除所有未使用的网络
docker network prune //Remove all unused networks
//移除一个或多个网络
docker network rm //Remove one or more networks

容器之间通信方式一

通过docker 自带的网桥

通过容器的ip地址可以ping通

但是通过容器名则不行

容器之间通信方式二

通过自己创立的network

通过容器的ip地址和容器名都可以ping通

四.docker容器编排

1.什么是docker容器编排

容器编排通俗来说一堆容器一起配合工作并且互不干扰
build: 构建或重新构建服务的镜像
config: 解析、解析并呈现规范格式的 compose 文件,即检查配置文件
cp: 在服务容器和本地文件系统之间复制文件 / 文件夹
create: 为服务创建容器
down: 停止并移除容器、网络
events: 从容器接收实时事件
exec: 在正在运行的容器中执行命令
images 列出创建的容器使用的镜像
kill: 强制停止服务容器
logs: 查看容器的输出
ls: 列出正在运行的 compose 项目
pause: 暂停服务
port: 打印端口绑定的公共端口
ps: 列出容器
pull: 拉取服务镜像
push: 推送服务镜像
restart: 重启服务容器
rm: 删除已停止的服务容器
run: 对服务运行一次性命令
start: 启动服务
stop: 停止服务
top: 显示运行的进程
unpause: 取消暂停
up: 创建并启动容器
version: 显示 docker compose 版本信息

2.dockercompose案例演示

dockerfile文件编写

复制代码
FROM gcc:latest
WORKDIR /app
COPY main.cc .
RUN g++ main.cc -o server
EXPOSE 8080
CMD [ "./server" ]

docker-compose.yml文件编写

复制代码
version: '3.8'
services:
  cpp-server:
    build: .
    ports:
      - "8080:8080"

  openresty:
    image: openresty/openresty:alpine
    ports:
      - "8081:80"
    volumes:
      - ./nginx:/etc/nginx/conf.d

openresty_conf文件编写

复制代码
server {
    listen 80;
    server_name localhost;
    location / {
        default_type text/html;
        content_by_lua_block {
            ngx.say("Hello from OpenResty!")
        }
    }
}

通过docker compose up --build命令执行

相关推荐
徐子宸38 分钟前
Docker面试题(1)
java·docker·容器
ivwdcwso1 小时前
构建安全与合规的Jenkins环境:全周期审计方案详解
运维·安全·ci/cd·jenkins·devops·审计
LitchiCheng1 小时前
RISC-V 开发板 MUSE Pi Pro USB 测试(3.0 U盘,2.0 UVC摄像头)
linux·运维·risc-v
sun03222 小时前
Jenkins的Pipline中有哪些区块,以及其它知识点整理
运维·jenkins
西阳未落3 小时前
Linux(7)——进程(概念篇)
linux·运维·服务器
领世达检测V133529092493 小时前
智能门锁为什么需要做欧盟网络安全 EN18031 标准检测认证
运维·服务器·网络
樂5024 小时前
Web 服务、 Nfs 服务器以及 Dns 服务器综合实验
运维·服务器
luckyext4 小时前
SQL SERVER常用聚合函数整理及示例
运维·服务器·数据库·sql·mysql·sqlserver·mssql
liulilittle4 小时前
Ubuntu 18.04 升级内核到 5.X(< 5.10)
linux·运维·服务器·ubuntu