docker--容器管理

容器管理

创建容器

首先,查看当前有多少正在运行的容器

[root@master ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
  1. 创建容器
    运行一个最简单的容器
[root@master ~]# docker run centos
[root@master ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@master ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
7fa5fe6deb26   centos    "/bin/bash"   5 seconds ago   Exited (0) 4 seconds ago             exciting_volhard

这里创建了一个容器,容器ID为 300e4455d19b ,容器名因为没有设置所以是随机产生的名字为
exciting_volhard,所使用的镜像为 centos,容器里运行的进程为 /bin/bash (也就是CMD指定的) docker
ps看不到,docker ps -a 可以看到,状态为 Exited ,说明容器是关闭状态。容器运行一瞬间就关闭了。

  1. 容器的生命周期
    图
    上面为容器和进程之间的关系

只有容器里的进程正常运行,容器才可以正常运行,容器的进程挂了,则容器也就挂了。因为没有终端的存在,/bin/bash就像执行 ls 命令一样一下就执行完了,所以容器生命周期也就到期了。

Docker 容器的生命周期涵盖了从创建到销毁的整个过程,这个过程包含了多个关键阶段,每个阶段都有其特定的目标和操作。以下是容器生命周期的主要阶段及其描述:

创建:这是容器的第一个关键阶段。在这个阶段,用户选择适当的 Docker 镜像作为容器的基础,并使用 Docker 命令(如 docker run 或 docker create)来创建容器实例。在这个阶段,容器的配置选项和环境变量设置也会完成。

启动:一旦容器被成功创建,它就会进入启动阶段。在启动阶段,Docker 引擎会启动容器并运行其内部的应用程序。容器会进入运行状态,并开始执行其内部的指令。

运行:这是容器的核心阶段。在这个阶段,容器内部的应用程序正在执行,处理用户请求并提供所需的服务。容器的运行状态可以持续一段时间,直到应用程序完成其任务或遇到故障。

暂停:在某些情况下,可能需要暂停容器的运行而不是完全停止它。暂停容器会冻结其状态,包括应用程序的进程。这有助于在需要时快速恢复容器的状态,同时避免完全关闭和重新启动容器带来的开销1。

停止与重启:当容器需要停止时,可以使用 docker stop 命令优雅地停止容器,该命令会发送信号让容器执行必要的清理操作并退出。如果需要立即停止容器,可以使用 docker kill 命令。而容器的重启可以通过 docker restart 命令实现。

删除:当容器不再需要时,可以使用 docker rm 命令将其删除。在删除容器之前,必须确保容器已经停止运行。
  1. 删除容器
#删除容器的语法:
[root@master ~]# docker rm 容器ID/容器名
#如果需要删除正在运行的容器,可以使用 -f 选项:
[root@master ~]# docker rm -f 容器ID/容器名
#删除刚才的容器。
[root@master ~]# docker rm -f 7fa5fe6deb26

  1. 创建容器
#运行 Docker 容器的基本命令格式是 docker run ,它可以接受多个选项来配置容器的行为。下面是一个常见的格式模板
#基本格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#选项和参数说明
OPTIONS:可选参数,用于配置容器的行为。
IMAGE:要运行的镜像名称或 ID。
COMMAND:在容器启动后要执行的命令(可选)。
ARG...:传递给 COMMAND 的参数(可选)。


#下面为创建容器时的一些参数
-t: 模拟一个终端
-i: 可以让用户进行交互,否则用户看到一个提示符之后就卡着不动了。
-it: 通常用于交互式会话。
示例:docker run -it ubuntu /bin/bash

-e / --env: 设置环境变量
格式:<key>=<value>
示例:docker run -e MY_ENV_VAR=my_value nginx

-d / --detach: 创建完容器,不自动进入容器里,直接返回容器ID

-p / --publish: 把容器内部端口映射到主机端口上
格式:<host_port>:<container_port>
示例:docker run -p 8080:80 nginx

--restart=always:  加上--restart=always 退出容器后就不会自动关闭了

--name: 为容器指定一个名称
示例:docker run --name my_nginx nginx

--rm: 容器退出时自动删除容器
示例:docker run --rm ubuntu

--restart: 设置容器的重启策略
选项包括 no(默认),on-failure,always,unless-stopped。
示例:docker run --restart unless-stopped nginx


-v / --volume: 挂载主机目录或卷到容器中
格式:<host_path>:<container_path>
示例:docker run -v /my/data:/data nginx

-u / --user: 指定容器内运行的用户。
示例:docker run -u 1000:1000 nginx

-w / --workdir: 设置容器内的工作目录。
示例:docker run -w /app my_image

--memory: 限制容器可以使用的内存量。
示例:docker run --memory="512m" nginx

#综合示例
假设你想要运行一个名为 my_app 的容器,使用的镜像是 my_image,容器启动时运行 /app/start.sh 脚本,并且需要以下配置:
#后面加上了对应参数
1.后台运行			-d
2.将主机的 5000 端口映射到容器的 5000 端口			-p
3.设置环境变量 ENV=production			-e
4.挂载主机目录 /my/app/config 到容器目录 /app/config			-v
5.限制 CPU 使用量为 2			--cpus
6.限制内存使用量为 1GB			--meory
7.容器名称为 my_running_app			--name

#对应的命令如下:
docker run -d -p 5000:5000 -e ENV=production -v /my/app/config:/app/config --cpus="2" --memory="1g" --name my_running_app my_image /app/start.sh

#启动一个mysql容器
[root@master ~]# docker run -d --name=db --restart=always -e MYSQL_ROOT_PASSWORD=redhat -e MYSQL_DATABASE=blog-p 3306:3306 mysql:latest --default-authentication-plugin=mysql_native_password
[root@master ~]# mysql -h 127.0.0.1 -P 3306 -uroot -predhat
......
MySQL [(none)]>

[root@master ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS                                        NAMES
82448b77ebe0   mysql:latest   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   db
  1. 管理容器的命令
在这里创建一个容器为之后的实验使用
[root@master ~]# docker run -it -d --name test centos:latest

#在容器里执行指定的命令
语法为:
docker exec 容器名 命令
#查看容器test 的 IP 如果容器内没有这条命令则会报错
[root@master ~]# docker exec test ip a

#容器与物理机传输文件, 例:
[root@master ~]# docker cp /root/test test:/root  #把物理机的/root/test文件传输到容器的/root/下
[root@master ~]# docker cp test:/root/test /root/  	#把容器/root/test文件传输到物理机的/root/下

#关闭,启动,重新启动容器
[root@master ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
1ead1f85820f   centos:latest   "/bin/bash"   7 minutes ago   Up 2 seconds             test
[root@master ~]# docker stop test   	#关闭容器
test
[root@master ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS                     PORTS     NAMES
1ead1f85820f   centos:latest   "/bin/bash"   7 minutes ago   Exited (0) 3 seconds ago             test
[root@master ~]# docker start test   #启动容器
test
[root@master ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS        PORTS     NAMES
1ead1f85820f   centos:latest   "/bin/bash"   7 minutes ago   Up 1 second             test

[root@master ~]# docker restart test  	#重新启动容器
[root@master ~]# docker top test    #查看容器内的进程
[root@master ~]# docker logs test    #查看容器的日志
[root@master ~]# docker inspect test 	#查看容器的属性

  1. 挂载卷 #挂载在上面说过了 这里细说一下挂载的原理以及使用

创建出一个容器后,容器会映射到物理机上一个目录上(相当于容器里的东西全部都在这个文件里),在容器里创建的文件都是存在于物理机的这个文件里的,当容器被删除后这个文件也会被删除
在这里插入图片描述

挂载是为了把容器里的内容保存下来,如上图,把容器里的目录 a 挂载到物理机的 b 目录,当往容器目录 a 里存放数据时,相当于在往 b 目录里存放。当容器被删除时,b 目录并不会被删除。

#用法为
-v / --volume: 挂载主机目录或卷到容器中
格式:<host_path>:<container_path>
示例:docker run -v /ss/data:/data nginx

[root@master ~]# docker run -itd --name ss1 --restart=always -v /ss/:/data centos     #创建一个名为ss1 的容器,把容器的/data 目录挂载到物理机的 ss 目录下
[root@master ~]# docker inspect ss1 | grep -A5 Mounts		#查看容器容器的挂载详情
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/ss",
                "Destination": "/data",
                "Mode": "",

#其中Source指的是物理机目录,Destination为容器的目录

#还有在创建时候加 ro(只读)方式挂载
[root@master ~]# docker run -itd --name ss1 --restart=always -v /ss/:/data:ro centos    #在挂载后面加 ro
  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江上清风至

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值