Docker学习笔记

目录

介绍:

Docker和VM区别

Docker安装

Docker常用命令

帮助命令

镜像命令

容器命令

其他常用命令:

实战:

部署tomcat

可视化

Docker镜像

介绍

获取镜像:

联合文件系统UFS

commit镜像

容器数据卷

操作:

法1:直接使用命令来挂载(双向绑定)

法2:DockerFile

DockerFile

介绍:dockerfile是用来构建docker镜像的文件,命令参数脚本。

构建步骤:

 基础知识:

常用命令:

实战

小结:

docker网络

原理:

自定义网络:

网络连通:

Docker-compose

介绍

核心概念

YAML语法

基础结构(yaml结构)

核心命令

注意:


介绍:

Docker 是一种容器化技术,它可以让开发者将应用及其依赖环境“打包”成一个轻量级、可移植的容器,从而实现“一次构建,随处运行”。

核心概念:镜像(Image),容器(Container),仓库(Registry)

docker默认工作路径:/var/lib/docker

Docker和VM区别

特性

Docker 容器

虚拟机

隔离级别

进程级隔离(共享内核)

硬件级隔离(独立内核)

启动速度

毫秒级

分钟级

资源占用

低(MB 级内存,共享镜像)

高(GB 级内存,独立镜像)

性能损耗

接近原生

较高(虚拟化开销)

典型应用

云原生应用、微服务、DevOps

传统应用、多操作系统环境

Docker安装

1.卸载残留docker

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

3.添加阿里镜像源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

4.安装docker

yum install -y docker-ce

5.启动 Docker 并设置开机自启

systemctl start docker
systemctl enable docker

6.配置镜像加速器

编辑 /etc/docker/daemon.json 文件内容

vim /etc/docker/daemon.json
{
 
"registry-mirrors": [

    "https://registry.docker-cn.com",

    "http://hub-mirror.c.163.com",

    "https://docker.mirrors.ustc.edu.cn",

    "https://dockerhub.azk8s.cn",

    "https://mirror.ccs.tencentyun.com",

    "https://registry.cn-hangzhou.aliyuncs.com",

    "https://docker.mirrors.ustc.edu.cn",

    "https://docker.1panel.live",

    "AtomHub 已下线",

    "uuuadc.top",

    "https://docker.anyhub.us.kg",

    "https://dockerhub.jobcher.com",

    "https://dockerhub.icu",

    "https://docker.ckyl.me",

    "https://docker.awsl9527.cn"

]

}

systemctl daemon-reload

systemctl restart docker

Docker常用命令

帮助命令

 docker version         # 显示docker的版本信息

 docker info              # 显示docker的系统信息,包括镜像和容器的数量

 docker 命令 --help   # 帮助命令

 docker  stats             查看cpu使用情况

镜像命令

 查看本地所有镜像:

    docker images 

            常用参数:-a 列出所有镜像,-q 只显示镜像id

 搜索镜像 :

    docker search 镜像名

    常用参数: --filter 过滤信息

下载镜像:

    docker pull  镜像名[:tag](tag:版本)

    返回信息:分层下载,docker image的核心联合文件;签名; 真实地址

 删除镜像:

   docker rmi -f  镜像/id

   删除全部镜像:docker rmi -f $(docker image -aq)

容器命令

有镜像才可以创建容器

新建容器并启动:

   docker  run [可选参数]  image

   进入交互式centos:docker run -it centos /bin/bash

   常用参数:

   --name=‘Name’  容器名字,用来区分容器

   -d       后台方式运行

   -it       使用交互方式运行,进入容器查看内容

   -p       指定容器端口

四种指定方式

-p ip:主机端口:容器端口

-p 主机端口:容器端口(常用)

-p 容器端口

容器端口

  -P         随机指定端口

  -e         环境配置

列出所有的运行的容器

docker ps [参数]

        无参          列出当前正在运行的容器

-a             列出历史运行过的容器

-n=?        显示最近创建的容器

-q            只显示容器的编号

退出容器:

exit   直接停止容器并退出

Ctrl+P+Q       容器不停止退出

删除容器:

 docker  rm  容器id       删除指定的容器,不能删除正在运行的容器,可以rm -f 强制删除

 docker rm -f $(docker ps -aq)      删除所有容器

 docker   ps  -aq |xargs docker rm          删除所有容器

启动和停止容器的操作:

docker start 容器id              启动容器

docker restart 容器id           重启容器

docker stop 容器id              停止当前正在运行的容器

docker kill  容器id                强制停止当前容器

其他常用命令:

后台运行进程

 docker run -d centos

 当使用docker ps时,发现centos停止。docker容器使用后台运行,需要有一个前台进程,docker发现没有应用,则会停止。

 解决:启动一个服务进程;

docker run -d centos /bin/bash -c "while true; do echo '心跳信号'; sleep 1; done"

这个命令会在容器内启动一个无限循环,让 bash 进程持续运行,从而保证容器不会停止

查看日志

 docker  logs  [参数]   容器id

 参数:

-tf                             显示日志

--tail  number          显示的日志条数

查看容器中进程信息

 docker  top  容器id

查看镜像元数据

 docker inspect  容器id

进入当前正在运行的容器

法1:进入容器后开启一个新的终端,可以在里面操作:

 docker exec -it 容器id  bash

法2:进入容器正在执行的终端,不会启动新的进程:

 docker attach  容器id

从容器内拷贝文件到主机(反之)

 docker cp 容器id:容器内文件路径   主机路径

实战:

部署tomcat

 获取镜像:docker pull tomcat

 启动容器:docker run -d --name=tomcat1 -p 3355:8080 tomcat

 进入容器:docker exec -it tomcat1 /bin/bash

 cp   webapps.dist/*    webapps/

可视化

安装Portainer面板

拉取镜像:docker pull portainer/portainer-ce

启动容器:

docker run -d \

  --name portainer \

  -p 9000:9000 \

  -v /var/run/docker.sock:/var/run/docker.sock \

  -v portainer_data:/data \

  --restart always \

  portainer/portainer-ce:latest

Docker镜像

介绍

镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含运行某个软件所需的内容,包括代码,

库,环境变量和配置文件,所有应用直接打包成docker镜像,就可以直接跑起来。

获取镜像:

远程仓库下载;拷贝;自己制作DockerFile

联合文件系统UFS

联合文件系统(UnionFS)是一种将多个独立文件系统或目录层透明叠加为单一视图的技术。

Boots(基础层)

  • 定义
    只读的基础镜像层(如操作系统镜像),提供系统运行所需的核心文件。
  • 特点

不可修改,多个容器共享以节省存储。

Roots(可写层)

  • 定义
    容器运行时生成的读写层(容器层),保存对基础层的修改(如新增文件、配置变更)。
  • 特点

通过写时复制(CoW) 机制动态生成。

容器删除后,该层数据通常被清除。

commit镜像

docker commit  提交容器成为一个新的副本

docker commit  -m=“提交的描述信息” -a=“作者” 容器id    目标镜像名:[TAG]

容器数据卷

容器的持久化和同步操作,容器间也是可以数据共享的

卷技术:目录的挂载,将我们容器内的目录,挂载到linux上。

适应场景:当容器内缺少vim/vi,命令但是想操作,可以挂到主机上

操作:

法1:直接使用命令来挂载(双向绑定)

docker run -it  -v  主机目录:容器目录  容器

实战:mysql数据持久化

绑定宿主机目录

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='Aa!123456' --name mysql1 mysql

注意:/home/mysql/data下不可以有内容,否则MySQL无法启动。

容器间数据共享(共享):

注意:需要先设置共享卷,才可以使用--volumes-from共享数据

docker run -d -p 3310:3306  -e MYSQL_ROOT_PASSWORD='Aa!123456' --name mysql2

 --volumes-from  mysql1  mysql

扩展:

改变读写权限:容器目录:ro/rw

ro只读,这个路径只能通过宿主机来操作,容器内部是无法操作的

rw读写,可读可写

具名和匿名挂载

docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxx/_data

匿名挂载

-v   容器目录;在-v时只写容器内目录,不写主机目录

具名挂载

-v  卷名:容器目录

创建卷

docker volume create

查看所有volume的情况

docker volume  ls

查看卷具体情况

docker  volume  inspect  卷名

法2:DockerFile

构建dockerfile文件:

FROM      centos

# 定义volume1,volume2挂载卷

VOLUME      ["volume1","volume2"]

CMD     echo "------ok-------"

CMD     /bin/bash

DockerFile

介绍:dockerfile是用来构建docker镜像的文件,命令参数脚本。

构建步骤:

编写一个dockerfile文件

构建成为一个镜像:

docker build -f <Dockerfile文件名> -t <镜像名> <上下文路径>

运行镜像:docker  run

发布镜像:docker  push

 基础知识:

1.指令必须都是大写字母

2.执行顺序是从上到下

3.# 表示注释

4.每个指令都会创建一个新的镜像层,并提交

dockerFile:构建文件,定义了一切步骤和源代码

dockerImages:通过dockerFile构建生成的镜像,最终发布和运行的产品

docker容器:容器就是镜像运行起来提供服务器

常用命令:

FROM                                       # 基础镜像,一切从这里开始构建

MAINTAINER                          # 镜像来源 ,姓名+邮箱

RUN                                         # 镜像构建时需要运行的命令

ADD                                         # 支持解压压缩包或从 URL 下载文件

WORKDIR                               # 设置后续命令的工作目录(类似 cd

VOLUME                                 # 定义匿名卷(建议运行时通过 -v 显式挂载)。

EXPOSE                                   # 暴露端口配置(需通过 -p 映射到宿主机)。

CMD                                        # 指定容器启动时要运行的命令。当执行run,带命令时,dockerfile中命令被替代

ENTRYPOINT                          # 指定容器启动时要运行的命令,当执行run,带命令时,dockerfile中追加命令

ONBUILD                                # 当构建一个被继承的dockerfile时运行onbuild的指令,触发指令

COPY                                       # 类似ADD,复制本地文件到镜像

ENV                                         # 构建的时候设置环境变量

实战

安装vim到centos7

dockerfile:

FROM centos:7

MAINTAINER NY<666>

ENV MYPATH /usr/local

WORKDIR $MYPATH

# 将容器内的yum源换为阿里源

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

RUN yum makecache

RUN yum -y install vim

EXPOSE 80

CMD echo $MYPATH

CMD echo "----end----"

CMD /bin/bash

构建镜像 docker build -f dockerfile01 -t dockerfile01 .

小结:

docker网络

原理:

  1.每启动一个docker容器就会分配一个ip,只要安装了docker,就会有一个网卡docker0桥接,使用veth-pair技术

  2.Docker 容器通过 veth-pair 连接到宿主机的 docker0 网桥,实现容器间、容器与外部网络的通信。

    将一个接口(如 veth0)放入容器的网络命名空间;另一个接口(如 veth1)留在宿主机的默认命名空间;

    数据通过这对接口在容器和宿主机之间传输。

    容器A(veth0) <--> 宿主机(veth1) <--> docker0网桥 <--> 宿主机物理网卡

自定义网络:

查看所有docker网络:docker  network  ls

网络模式:bridge;host;none;container

定义网络:

docker network create    --driver 网络模式   --gateway 网关 --subnet 子网   自定义网络

注意:子网不要与虚拟级子网相同

实例:docker network create --driver bridge --subnet 192.168.0.0/24  --gateway 192.168.0.1 mynet1

查看定义网络的具体信息:

docker network inspect 自定义网络

使用网络(添加容器到网络):

--net  自定义网络

实例:docker run -it -d  --name centos1 --net mynet1 centos /bin/bash

测试网络

docker exec -it centos1 ping centos2

网络连通:

容器连接到网络:docker network  connect  [参数] 网络  容器

实例: docker network connect mynet1 centos3

Docker-compose

介绍

容器编排工具:通过 YAML 文件定义和管理多容器应用,简化容器生命周期管理。

与 Dockerfile 的关系

Dockerfile:定义单个容器镜像的构建规则。

docker-compose.yml:定义多容器应用的组合、网络、存储等。

核心概念

服务(Service) :对应一个容器实例

项目(Project) :由一组服务组成的应用

YAML语法

image: 指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉去这个镜像。

ports: 暴露端口信息。使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

volumes: 卷挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。

net: 设置网络模式。使用和 docker client 的 --net 参数一样的值。

links: 链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 ([SERVICE:ALIAS](service:ALIAS)) 格式都可以。

command: 覆盖容器启动后默认执行的命令。

基础结构(yaml结构)

version: '3'  # 指定 Compose 版本
services:
   service1:  # 服务名称
       image: nginx:1.21  # 使用镜像

       container_name:   # 自定义容器的名称

       ports:
           - "80:80"  # 端口映射
       volumes:
           - ./html:/usr/share/nginx/html  # 挂载目录

       environment:  # 设置环境变量
  
        - NGINX_ENV=production

       networks:          # 添加关联网络
           - mynet1

       restart: always  # 容器重启策略,always 表示无论何时停止都会重启
       depends_on:  # 定义服务依赖关系,确保当前服务启动前依赖的服务已启动

        volumes:
           data:  # 定义命名卷
        networks:
           app-net:  # 自定义网络

       driver: #网络模式

核心命令

命令

作用

docker-compose up

启动所有服务(-d 后台运行,-f指定文件)

docker-compose down

停止并删除容器、网络、卷

docker-compose build

重新构建服务镜像

docker-compose ps

查看运行中的容器状态

docker-compose logs

查看服务日志(-f 实时跟踪)

docker-compose exec

进入运行中的容器执行命令

docker-compose pull

拉取服务所需镜像

docker-compose config

验证配置文件语法

注意:

docker-compose [全局选项] <命令> [命令选项]

全局选项:如 -f(指定文件)、-p(项目名称)等,必须放在命令(如 up、down)之前

命令选项:如 -d(后台运行)、--build(重新构建镜像)等,必须放在命令之后。

实例:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值