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

相关推荐
想学习java初学者9 分钟前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
微刻时光2 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验
陈小肚2 小时前
k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储
docker·容器·kubernetes
A陈雷2 小时前
springboot整合elasticsearch,并使用docker desktop运行elasticsearch镜像容器遇到的问题。
spring boot·elasticsearch·docker
小扳3 小时前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
weixin_438197384 小时前
K8S创建云主机配置docker仓库
linux·云原生·容器·eureka·kubernetes
南猿北者11 小时前
docker Network(网络)
网络·docker·容器
sam-12312 小时前
k8s上部署redis高可用集群
redis·docker·k8s
Fanstay98513 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
death bell14 小时前
Docker基础概念
运维·docker·容器