Docker容器

Docker容器

  • 容器相关概念
  • 容器命令
    • [docker create](#docker create)
    • [docker run](#docker run)
    • [docker ps](#docker ps)
    • [docker logs](#docker logs)
    • [docker attach](#docker attach)
    • [docker exec](#docker exec)
    • [docker start](#docker start)
    • [docker stop](#docker stop)
    • [docker restart](#docker restart)
    • [docker kill](#docker kill)
    • [docker top](#docker top)
    • [docker stats](#docker stats)
    • [docker container inspect](#docker container inspect)
    • [docker port](#docker port)
    • [docker cp](#docker cp)
    • [docker diff](#docker diff)
    • [docker commit](#docker commit)
    • [docker pause](#docker pause)
    • [docker unpause](#docker unpause)
    • [docker rm](#docker rm)
    • [docker export](#docker export)
    • [docker import](#docker import)
    • [docker rename](#docker rename)
    • [docker container prune](#docker container prune)
    • [docker update](#docker update)
  • 容器基本操作
  • 实战操作

容器相关概念

🚀之前分享过docker镜像,本质就是一个联合文件系统,它与docker容器之间的关系就如类和实例之间的关系一样,docker镜像是静态的,一旦运行起来就会成为一个docker容器。并且docker镜像这个多层次的联合文件系统是只读的,启动一个容器后会在这个文件系统的最上层创建一个容器层,可供容器修改的文件层。

容器的状态转换

  • created状态:
    通过docker create指令创建一个容器,但是不启动,此时就处于created状态
  • Running状态
    通过docker start将停止或者created状态的容器启动起来,或者直接docker run一个镜像得到的容器都是running状态
  • stopped状态
    由running状态变成stopped状态的途径有三种:1.docker kill 或者 docker stop 2.使容器内的进程退出3.容器由于内存占用过多被kill且没有设置restart属性
  • paused状态
    对运行的容器使用docker pause指令使得容器暂停

    使用docker unpause将暂停的容器继续运行
  • deleted状态
    对stopped状态的容器使用docker rm 或者docker container prune删除=>deleted状态

容器命令

docker create

🚀创建一个容器但是不启动。

bash 复制代码
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
#常用参数
-i : 以交互模式运行容器,通常与 -t 同时使用
-t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-P : 指定端口映射,格式为:主机(宿主)端口:容器端口 
-p : 随机端口映射
--name : 给容器起名字
-h : 指定容器的hostname
-e : 设置容器的环境变量
--cpuset-cpus : 绑定容器到指定的cpu运行
-m : 设置容器最大使用内存
--link : 添加链接到另一个容器
--rm : 容器退出后自动删除容器
--restart : 自动重启
--network : 指定容器的网络连接类型
-v :  绑定一个存储卷

docker run

🚀创建一个容器并执行一个命令。

bash 复制代码
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
#常用参数
-d : 后台运行容器
-i : 以交互模式运行容器,通常与 -t 同时使用
-t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-P : 指定端口映射,格式为:主机(宿主)端口:容器端口 
-p : 随机端口映射
--name : 给容器起名字
-h : 指定容器的hostname
-e : 设置容器的环境变量
--cpuset-cpus : 绑定容器到指定的cpu运行
-m : 设置容器最大使用内存
--link : 添加链接到另一个容器
--rm : 容器退出后自动删除容器
--restart : 自动重启
--network : 指定容器的网络连接类型
-v :  绑定一个存储卷

docker ps

🚀查看容器信息。

bash 复制代码
docker ps [OPTIONS]
# 常用选项
-a : 显示所有容器,包括未运行的容器
-f : 过滤条件
--format : 指定返回值的模板文件。(默认是table)/json
-l : 显示最新创建的容器
-n : 显示最新创建的n个容器
--no-trunc : 不截断的输出信息
-q : 静默模式,只显示容器id
-s : 显示容器文件大小,包括镜像文件(只读)和容器文件(可读写)

docker logs

🚀查看容器的日志信息。

bash 复制代码
docker logs [OPTIONS] CONTAINER 
# 常用参数
-f : 跟踪日志输出
-n : 显示最新的n条日志
-t : 显示时间戳
--since : 显示某个开始时间的所有日志

启动一个nginx容器观察其日志消息

  • docker logs

  • docker logs -f

    不加 -f 选项就是输出容器的日志然后退出,而-f选项是追踪容器日志输出如果没有产生日志就阻塞等待。

  • docker logs --since

  • docker logs -n

  • docker logs -t

docker attach

🚀连接到正在运行的容器,将本地的标准输入,标准输出,标准错误流附加到运行的容器上。

bash 复制代码
docker attach [OPTIONS] CONTAINER 
# 常用选项
--sig-proxy : 是否将所有的信号代理,默认是true,设置为false后退出并不会影响到容器。
  • docker attach

    使用Ctl + C退出,会导致容器也跟着退出

  • docker attach --sig-proxy=false

docker exec

🚀在容器中执行命令。

bash 复制代码
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
#常用选项
-d : 后台运行
-i : 以交互式运行
-t : 返回一个伪终端
-e : 设置环境变量
-u : 以某个用户去运行
-w : 设置工作目录
  • docker exec
  • docker exec -d
  • docker exec -it
  • docker exec -e
  • docker exec -u
  • docker exec -w

docker start

🚀启动一个容器或者多个容器。

bash 复制代码
docker start [OPTIONS] CONTAINER [CONTAINER...]
  • 启动一个创建好的容器

  • 启动一个停止状态的容器

docker stop

🚀停止掉一个或者多个容器。

bash 复制代码
docker stop [OPTIONS] CONTAINER [CONTAINER...]
#常用选项
-s : 指定一个信号发送给容器

docker stop停止一个容器,容器内的主进程会收到终止信号,可以对此信号做捕捉,收到此信号后清理自己的资源然后退出。

  • docker stop

    gracefully shutting down,清理完资源后退出

  • docker stop -s

docker restart

🚀重启一个或多个容器。

bash 复制代码
docker restart [OPTIONS] CONTAINER [CONTAINER...]
# 常用选项
-s : 发送一个指定信号给容器
  • docker restart

docker kill

🚀杀死一个或者多个容器。

bash 复制代码
docker kill [OPTIONS] CONTAINER [CONTAINER...]
# 常用选项
-s : 指定一个信号发给容器(默认是SIGKILL)
  • docker kill


    可以看到也可以使用docker kill 指定3号信号发给容器,相当于docker stop,容器会清理完资源后退出。如果是默认的SIGKILL信号容器会直接退出。

docker top

🚀查看容器内所有的进程信息。

bash 复制代码
docker top CONTAINER [ps OPTIONS]
  • docker top

docker stats

🚀查看容器使用资源的信息。

bash 复制代码
docker stats [OPTIONS] [CONTAINER...]
# 常用参数
-a : 显示所有容器,包括未运行的
--format : 返回指定的格式
--no-stream : 展示完当前状态直接退出,不再实时更新
--no-trunc : 不截断的输出
  • docker stats

    默认是实时更新的,使用--no-stream可以关闭实时更新,只展示一次

  • docker stats --format --no-stream

docker container inspect

🚀查看一个或者多个容器的详细信息。

bash 复制代码
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
# 常用选项
-s : 显示总体文件大小(镜像文件/容器文件)
--format : 返回指定格式的结果(默认使用json格式)

docker port

🚀查看容器的端口映射关系。

bash 复制代码
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
  • docker port
  • docker port tcp/udp

docker cp

🚀完成容器与宿主机之间的文件的拷贝。

bash 复制代码
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  • 将容器的文件拷贝到宿主机的指定目录下

  • 将宿主机的文件拷贝到容器的指定目录下

docker diff

🚀查看容器文件系统上文件或者目录的更改。

bash 复制代码
docker diff CONTAINER
# A -- add
# D -- delete
# C -- change
  • docker diff

docker commit

🚀根据当前运行的镜像对镜像文件的修改去创建一个新的镜像。

bash 复制代码
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 常用选项
--author : 指明指定容器的作者
-c : 使用dockerfile去构建镜像
-m : commit时的说明文字
-p : 提交时暂停容器
  • docker commit --author -m -p

docker pause

🚀暂停容器内所有的进程。

bash 复制代码
docker pause CONTAINER [CONTAINER...]
  • docker pause

docker unpause

🚀取消停止容器中的所有进程。

bash 复制代码
docker unpause CONTAINER [CONTAINER...]
  • docker unpause

docker rm

🚀删除容器。

bash 复制代码
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 常用选项
-f : 强制删除(如果容器正在运行将会给其发送SIGKILL信号)
-l : 删除指定链接 
-v : 删除与容器相关联的存储卷

docker export

🚀导出容器内容为tar文件。

bash 复制代码
docker export [OPTIONS] CONTAINER
# 常用选项
-o : 指定输出文件
  • docker export -o

docker import

🚀将tar文件导出为一个镜像。

bash 复制代码
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
#常用选项
-c : 将dockerfile指令应用到创建的镜像
-m : 提交时的说明文字
  • docker import

    由容器export导出的tar文件,会导致镜像的一些数据丢失

docker rename

🚀给容器重命名。

bash 复制代码
docker rename CONTAINER NEW_NAME

docker container prune

🚀删除所有已经停止的容器。

bash 复制代码
docker container prune [OPTIONS]
# 常用选项
--filter : 筛选条件
-f : 强制删除
  • docker container prune

docker update

🚀修改容器的配置信息。

bash 复制代码
docker update [OPTIONS] CONTAINER [CONTAINER...]

容器基本操作

批量操作容器

批量删除已经退出的容器

1.使用docker rm 逐个添加容器名称
2.使用docker rm 批量删除

容器自动重启

🚀重启策略一般都是用于生产环境,当发生意外情况如断电,断网时需要容器快速重启的情境下,正常的开发和测试环境通常不需要设置重启选项。默认的重启选项是关闭的。

  • docker --restart=on-failure
    当docker 容器退出码非0时就会重启容器,也可以设置重启次数 docker --restart=on-failure:n(重启n次)
  • docker --restart=always
    容器退出时总是重启
  • docker --restart=unless-stopped
    容器退出时,总是重启,但是不考虑docker守护进程启动时就已经停止的容器

使用docker stop 或者 docker kill停止的容器不会重新启动
容器收到某个信号退出时,会重启

容器环境变量设置

🚀在启动一个容器时,可以通过-e选项设置设置容器的环境变量,但是当需要设置很多环境变量时,这样显然是比较麻烦的,可以直接导入一个环境变量文件来完成。

--env-file=filepath


容器日志查看

🚀当使用docker logs查看容器的日志消息时,为了方便以后使用日志进行问题的追溯,可以将容器日志信息重定向到文件中。

实战操作

安装MySQL

🚀首先拉取MySQL的容器镜像

🚀启动MySQL容器
启动mysql服务器的时候通过设置MYSQL_ROOT_PASSWORD= 环境变量来设置登录mysql的密码

🚀登录MySQL

安装Redis

🚀拉取redis镜像

🚀启动redis容器

🚀登录redis

相关推荐
drebander2 小时前
Docker 与 Kubernetes(K8s)初探
docker
ccmjga5 小时前
升级 SpringBoot3 全项目讲解 — Spring Boot 3 中如何发Http请求?
java·spring boot·后端·docker·gradle·springboot·spring security
曹天骄11 小时前
Docker Compose Installation on CentOS 7.9
docker·eureka·centos
wgslucky12 小时前
docker 安装jenkins
docker·容器·jenkins
Karoku06612 小时前
【CI/CD】持续集成及 Jenkins
运维·ci/cd·docker·云原生·容器·kubernetes·jenkins
鸡鸭扣17 小时前
Docker:3、在VSCode上安装并运行python程序或JavaScript程序
运维·vscode·python·docker·容器·js
神秘_博士19 小时前
自制AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有iPhone
arm开发·python·物联网·flutter·docker·gitee
人工干智能20 小时前
科普:“Docker Desktop”和“Docker”以及“WSL”
运维·docker·容器
落笔画忧愁e21 小时前
FastGPT及大模型API(Docker)私有化部署指南
运维·docker·容器
一天八小时21 小时前
Docker学习进阶
学习·docker·容器