Docker系列第04部分:查看容器+创建容器+启动容器+文件挂载+删除容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器

1 容器的创建和启动


1.1 虚拟机的生命周期



be02b52f83024ae8bd6a4f2abff4734d.png


1.2 容器的生命周期


1514242b7f5714c0d9cef6f4098c9a1a.jpg


2、容器操作


2.1 查看容器


  • 查看正在运行容器:


docker ps


  • 查看所有的容器(启动过的历史容器)


docker ps –a


56fd5a809ad3453b8c2e194154505854.png


  • 查看最后一次运行的容器:


docker ps -l


  • 查看停止的容器


docker ps -f status=exited


2.2 创建与启动容器


# 作用:
  利用镜像创建出一个Created 状态的待启动容器
# 命令格式:
  docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
创建容器常用的参数说明:
创建容器命令:docker run
   -i --interactive:表示运行容器
   -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
   --name :为创建的容器命名。
   -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
   -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
   -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
# 命令参数(COMMAND\ARG):
  COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
  ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
# 创建容器命令演示:
docker create --name test-container centos:centos7 ps -A
# 我们创建了一个容器,并指定在启动容器的时候执行:docker ps -a
docker create -ti --name test-container2 centos /bin/bash


2.2.1 创建交互式容器


创建一个交互式容器并取名为mycentos


docker run -it --name=mycentos centos:7 /bin/bash

cc8ac08ade7e4ca593d1e6a83aa6d555.png


开启另外一个终端来查看状态:


docker ps 
# 1.如果是一个夯在哪里得命令,则使用exit退出容器
# 2.如果不是则会自动退出容器

73a2ed4f82524526bd5025d85aa78ef4.png


退出当前容器:


exit

881f48e1c5e2486daeb70f22dd0de07a.png


然后用ps -a 命令查看发现该容器也随之停止:


2.2.2 守护式容器


创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器


命令如下(容器名称不能重复):


docker run -di --name=mycentos2 centos:7
# 当我们在后台启动的时候
1.比如:docker run -di --name=mycentos2 centos:7
2.这时他会自动启动一个 /bin/bash窗口
3.因为我们并没有关闭这个/bin/bash窗口,所以他会一直在后台运行  
4.我们在使用start或者直接run进入这个镜像的时候,就相当于运行的这个命令:/bin/bash,就进入了这个bash窗口,相当于进入了容器(其实不是进入了容器,可以把他看作是xshell一个远程连接,连接到这个容器。)这里我们看作是进入到了这个容器,当我们使用exit退出的时候,就相当于关闭了/bin/bash这个窗口。所以容器一直会在后台运行的原因就是这个/bin/bash窗口一直在启动这,没有关闭它


98bd154963a4483c9359c32e6779bc98.png


登录守护式容器:


docker exec -it container_name (或者container_id)/bin/bash(exit退出时,容器不会停止)


命令如下:


docker exec -it mycentos2 /bin/bash

121638555c7a4b5aa1485275dd698043.png

dbfd235e020644f40df6b81e7d3095d3.jpg


2.2.4 容器创建并启动 – docker run


# 创建并启动(run)
# 参数:
    -i:表示运行容器
    -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
    --name :为创建的容器命名。如果不写,会自动分配一个名字(英文人名)
    -v:表示目录映射关系(前者是宿主机目录,后者是容器目录,映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。(下述单独演示)
    -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 (下述单独演示)
# 例子:run
    docker run -it --name=myredis redis  # 这时就会启动redis容器并进去redis容器  
    docker run -id --name=oursql mysql  # 这时就不会进入mysql容器,再后台运行
# 注意,docker run  镜像 
使用该命令:如果本地没有,会先pull,再run


3 进入容器内部和退出容器


3.1 进入容器


# 方式1:
  1.查询机器上运行的容器
  docker ps
    2.进入容器
  docker exec -it 容器id/bin/bash
    docker exec -it 427 /bin/bash
# 第二种:ssh连接(容器内部装ssh服务端)(不常用)    

df3d27fd0cdb2e9c3c6d5d8dd1dfb16c.png


#  exec真正的作用是在容器内执行命令,而不是真正的进入到容器内部
1.因为 /bin/bash这个命令,就相当于与这个容器建立了连接,所以我们可以和容器做交互,当我们关闭这个连接的时候,就会自动结束掉这个容器。
2.执行exec命令:
  docker exec -it 容器id ls  # 查询根路径所有文件

06d1d597e47445e4a32199069ae02d44.png


# top 命令(容器内部执行查询进程)

2381833c046f1ba3cc7be25d4e4c8366.png


# 容器内部是纯净的空间,安装:vim 

029442e8e8501fe83d74f92ed4fb3c53.jpg


3.2 (-it 进入容器退出) 与 (-id 进入容器退出)区别


# -it 进入容器退出(前台容器自动结束【后台停止运行】)
1.在我们使用 -it 参数直接进入该容器的时候,使用exit退出的时候这个容器就会自动结束。
  - 此时后台就没有该运行中的容器。
# -id 进入容器退出(前台容器自动结束【后台正常运行】)    
2.如果使用 -id 后台运行容器的时候,使用 docker exec进入该容器,此时使用exit退出该容器的话,只是退出该容器,并没有从后台结束该容器,该容器还会在后台运行这。


4 停止与启动容器


  • 停止正在运行的容器:docker stop $CONTAINER_NAME/ID


docker stop mycentos2

9c627b2eee094bf39362208c8333b4ed.png


  • 启动已运行过的容器:docker start $CONTAINER_NAME/ID


docker start mycentos2


be983674545c48da9b9130beb58eae72.png


3  文件拷贝


3.1 如果我们需要将文件拷贝到容器内可以使用cp命令


docker cp 宿主机文件 容器id:容器路径
docker cp /home/a.txt 427:/home  


3.2 也可以将文件从容器内拷贝出来


docker cp 容器id:容器路径 宿主机路径(起别名)
docker cp 427:home/a.txt a.txt

81e197bdd8c10f62228fb985ddaf8681.jpg


解释:cp 当前目录下的a文件到 容器中的/usr/local/下的a文件


[root@localhost ~]# docker exec -it mycentos2 /bin/bash
[root@32400e14bea6 /]# cd /usr/local/
[root@32400e14bea6 local]# ll

04e498f7a18847e7bc59e529b2d8945b.png


4 目录挂载(映射)


可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器里所对应的目录。


4.1 创建容器 并挂载宿主机目录 到容器中的目录下


docker run -di --name=mycentos99 -v /宿主机要挂载目录:/容器要挂载路径 指定镜像
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
# -v  : 映射
# 挂载作用:
1.一旦挂载,以后宿主机目录内修改,同样影响容器内部
2.容器内修改同样影响宿主机


如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数--privileged=true来解决挂载的目录没有权限的问题。


docker run -di --privileged=true -v /root/test:/usr/local/test --name=mycentos4 centos:7

b908be94322246c88e04ba5bbf1e7f79.png


5 查看容器IP地址


我们可以通过以下命令查看容器运行的各种数据:


# 命令:
# 查看容器详细信息
  - docker inspect 容器id
# 只查看容器ip地址
  - docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/容器ID
docker inspect mycentos2


43b67e76977930893b17727082bb62e9.png


也可以直接执行下面的命令直接输出IP地址:


docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2


# 其实宿主机与容器之间是通过网关进行通信的
  - 查看网关
      # 容器内下载该命令:
      - 下载查看ip信息的命令:yum install net-tools
        - ifconfig:查看网络相关信息

3f33ed34b3614ae48e7825711e9f82bc.png


# 所以此时我们在连接redis的时候就有两种方式
  - 第一种:
      - 因为我们做了端口映射,所以我们可以通过:云服务器地址:6377连接
     - 第二种:
      - 此时我们已经知道了容器的ip地址,所以就可以通过: 容器的ip地址:6379 (此时端口号就是它本身的6379因为是直接通过它本身的ip建立的连接)
# 每个容器都有ip地址,每一个ip地址标志着一台唯一服务器,所以就实现了宿主与容器之间的隔离性,每一个容器就相当于一个虚拟机


6 删除容器


  • 删除指定的容器: 这个命令只能删除已经关闭的容器,不能删除正在运行的容器


docker rm $CONTAINER_ID/NAME


  • 删除所有的容器:


docker rm `docker ps -a -q`


或者:


[root@localhost ~]# docker rm $(docker ps -aq)


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
250 93
|
14天前
|
网络协议 API Docker
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
52 23
|
23天前
|
运维 应用服务中间件 nginx
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
106 28
|
14天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
225 15
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
180 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
69 17
|
1月前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
127 12
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
247 11
|
Ubuntu Docker 容器
介绍两种从 Docker 容器写入卷时的文件权限处理方式
容器常常用作原生安装工具的替代品。在主机上使用具有所需版本的容器要比使用过时的工具好的多。但是,只要容器与主机系统进行交互,文件会留下错误或损坏的权限。幸运的是,解决该问题的方法并不需要使用脚本。
3400 0
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
317 78