【杂项】Docker

  • ~2.61K 字
  1. 1. 基本概念
  2. 2. 常用命令
  3. 3. Dockerfile
  4. 4. Docker网络
    1. 4.1. 桥接模式
    2. 4.2. Host模式
  5. 5. Docker Compose

基本概念

Docker给每个程序封装一套独立的运行环境,每套环境称为容器,运行在的机器称为宿主机,各个容器共用同一内核

镜像是容器的模板,容器是实际的软件,类似于类和实例的关系,镜像可以存放放在镜像仓库中

docker使用的是linux内核中自带的功能实现的容器化:

  • Cgroups:可以隔离和限制进程的资源使用
  • Namespace:用来隔离进程的资源视图

每个容器类似于一个独立的linux环境

常用命令

  • docker pull 地址:拉取镜像

    --platform=xxx可以指定拉取特定架构的镜像

    地址的命名格式如下:docker仓库的注册表地址/命名空间/镜像名:版本号

    • 注册表地址表示在哪个仓库下载,如果是docker.io表示是官方仓库,可省略
    • 命名空间表示作者,如果是官方仓库则为library,可省略
    • 版本号不写默认为latest
  • docker images:查看拥有的镜像

  • docker rmi 名字/id :删除镜像

  • docker rm 名字/id :删除容器

  • docker create 名字/id:创建容器不启动

  • docker run 名字/id:使用镜像创建并运行容器

    • flags -d可以以分离模式后台运行
    • flags -p可以用于宿主机到容器的端口转发,宿主机端口:容器内端口
    • flags -v可以将宿主机与容器的文件目录绑定,两者互相影响,这种目录称为挂载卷,可以用于持久化保存数据,宿主机目录:容器目录,若直接指定目录,称为绑定挂载,若使用docker volume创建命名卷,用其挂载则称为命名卷挂载,第一次使用时会将两边目录同步
    • flags -e可以往容器里传环境变量
    • flags --name可以自定义容器名
    • flags -it可以让终端进入控制台交互
    • flags --rm可以在容器停止时将容器删除
    • flags --restart容器停止时的策略,常用的有always:停止后立即重启,unless-stopped:除非手动停止不然重启
    • 若不pull直接run会自动获取镜像再运行
  • docker ps:查看当前执行的容器,-a可以查看所有的

  • docker volume create :创建一个卷

  • docker volume inspect 名字 :显示指定卷的信息

  • docker volume list :查看创建的卷

  • docker volume rm :删除一个卷

  • docker volume prune -a :删除所有没有容器在用的卷

  • docker start/stop 名字/id:启动/停止一个容器

  • docker inspect id:查看容器详细信息

  • docker logs id:查看容器日志,-f可以追踪输出

  • docker exec id/名字 linux命令:在容器内执行Linux命令

    如:docker exec -it id/名字 /bin/sh可以直接在容器内交互

  • docker build:创建一个镜像,-t自定义名字

Dockerfile

制作镜像的图纸,创建一个Dockerfile,无后缀,可以有以下的参数使用:

命令 说明
FROM 指定基础镜像,用于后续的指令构建
LABEL 添加镜像的元数据,使用键值对的形式
RUN 在构建过程中在镜像中执行命令
CMD 指定容器创建时的默认命令(可以被覆盖)
ENTRYPOINT 设置容器创建时的主要命令(不可被覆盖)
EXPOSE 声明容器运行时监听的特定网络端口
ENV 在容器内部设置环境变量
ADD 将文件、目录或远程URL复制到镜像中
COPY 将文件或目录复制到镜像中
VOLUME 为容器创建挂载点或声明卷
WORKDIR 设置后续指令的工作目录
USER 指定后续指令的用户上下文
ARG 定义在构建过程中传递给构建器的变量,可使用 “docker build” 命令设置
ONBUILD 当该镜像被用作另一个构建过程的基础时,添加触发器
STOPSIGNAL 设置发送给容器以退出的系统调用信号
HEALTHCHECK 定义周期性检查容器健康状态的命令
SHELL 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令

Docker网络

桥接模式

docker网络默认是桥接模式,所有容器默认连接到该网络,在同一个网络中容器间可以互相访问,但宿主机和容器网络是隔离的

docker network create 名字创建子网,可以让容器加入不同子网,同一子网中的容器可以互相访问,且只需要使用容器名字访问(自带DNS机制)

docker network remove 名字删除子网

run的时候--network 可以指定子网

Host模式

docker容器在这种模式下可以直接共享宿主机的网络,而且端口无需映射,可以直接用宿主机的端口

run的时候--network host可以更改到这个模式

Docker Compose

如果一个项目需要多个docker镜像,则可以使用docker compose这个容器编排技术,它使用yml文件管理多个容器,定义了容器如何创建,如何协作

多个docker命令和一个compose文件对应关系如下:

  • service表示一个服务,容器别名直接是服务名
  • image定义了镜像名
  • environment定义了环境变量
  • volumes定义了挂载卷
  • ports定义了端口映射
  • depends_on表示依赖关系,可以定义容器启动顺序
  • 一个docker-compose文件自动处于一个子网下

使用docker compose up/down即可运行/停止容器并删除

使用docker compose start/stop可以开始/停止容器而不删除

使用-f 指定非标准配置文件名

赞助喵
非常感谢您的喜欢!
赞助喵