Docker 容器创建使用进入容器多种方法删除容器

容器介绍

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

创建容器

在 Docker 中,真正对外提供服务的还是容器,本小节咱们来创建一个容器。

创建容器的格式:docker run [option] image [cmd]

[root@laser ~]# docker run -d -p 8000:80 --name nginx nginx:1.19.2
69d70ddfe7109400b9585bd6870a74cf0953960e94be41779208b376a6c4329d
查看容器
[root@laser ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
69d70ddfe710        nginx:1.19.2        "/docker-entrypoint.…"   3 seconds ago       Up 1 second         0.0.0.0:8000->80/tcp      nginx

容器启动参数
参数信息
-d以守护进程方式运行
-p指定映射端口
-P随机映射端口
-i保持标准输入打开
-t分配一个伪终端
-v设置挂载文件到主机上
–rm当容器关闭时自动删除
–name为启动的容器设置一个名字
–network指定使用哪个网络
-e设置容器中的环境变量
–link链接到另一个容器
-h指定容器内的主机名
停止容器

docker 终止容器是首先向容器发送 SIGTERM 信号,等待一段时间超时后(默认 10 秒),再发送 SIGKILL 信号 来终止容器。

查看正在启动的容器
[root@laser ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                               NAMES
69d70ddfe710        nginx:1.19.2        "/docker-entrypoint.…"   3 seconds ago       Up 1 second         0.0.0.0:8000->80/tcp                                nginx
7dfaef013910        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:32771->3306/tcp, 0.0.0.0:32770->33060/tcp   mysql1


停止
[root@laser ~]# docker stop nginx
nginx

重新启动
[root@laser ~]# docker start nginx

可见,NGINX 容器已经被我们终止了。这个时候我们也可以重新启动这个容器。

进入容器

四种方式进入容器

在使用容器的过程中,我们难免需要进入容器进行排查问题。下面我们就来介绍进入容器的集中方式。

- attach

attach 是最早 docker 官方推出的进入容器的命令了,不过使用该命令有一个问题。当多个窗口同时使用该命令 进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作,当所有窗 口退出时,容器结束。

[root@laser ~]# docker attach nginx
- exec

既 attach 之后,exec 是官方推出的有一个新的进入容器的命令,这个命令相当于在容器中执行一个命令。

[root@laser ~]# docker exec -it nginx /bin/bash   
- nsenter

需要配合 docker inspect 来使用(早期没有 exec 命令时,企业当中最长用的方式之一),Docker 是用 golang 语言开发,所以它也支持 go 语言的摸版语法。

root@laser ~]# nsenter --target $( docker inspect -f {{.State.Pid}} nginxv1 ) --mount --uts --ipc --net --pid
- ssh

在生产环境中排除了使用 docker attach 命令进入容器之后,相信大家第一个想到的就是 ssh。在镜像(或容器) 中安装 SSH Server,这样就能保证多人进入容器且相互之间不受干扰了,相信大家在当前的生产环境中(没有 使用 Docker 的情况)也是这样做的。但是使用了 Docker 容器之后不建议使用 ssh 进入到 Docker 容器内。

总结

进入 docker container 中一般情况下有 4 种方式,最常用的是 exec 和 nsenter 这两种。

Nsenter 和 exec 之间的区别?

  • Exec 是 docker 自带的命令,Nsenter 是 Linux 提供的命令。
  • Exec 相当于在容器内执行一个命令,而 Nsenter 是仅仅进入容器之中而已。
删除容器

可以使用 docker rm 命令来删除处于终止或退出状态的容器,命令格式为:docker rm container。

[root@laser ~]# docker rm nginx
或 docker rm $(docker ps -qa)
强制删除

强制删除一个正在运行的容器

[root@laser ~]# docker rm -f nginx
或  docker rm -f $(docker ps -qa)
查看容器详细信息

查看容器详情可以使用 docker container inspect [OPTIONS] CONTAINER [CONTAINER ... ]子命令。

[root@laser ~]# docker inspect ae0658fdbad5
[
    {
        "Id": "sha256:ae0658fdbad5fb1c9413c998d8a573eeb5d16713463992005029c591e6400d02",
        "RepoTags": [
            "mysql:5.7"
        ],
        "RepoDigests": [
            "mysql@sha256:8e2004f9fe43df06c3030090f593021a5f283d028b5ed5765cc24236c2c4d88e"
        ],
        "Parent": "",
...

容器命令详解

复制命令

复制命令类似于 Linux 系统中的 scp 命令,是将宿主主机上的内容上传到容器中,也可能是将容器中的文件 下载到宿主主机中。复制必须是已经启动的容器

样式: docker cp 镜像ID:镜像内路径 本机路径 , 主机导入镜像则反之

# 将容器中的内容复制到宿主主机  nginx
[root@laser ~]# docker cp 69d70ddfe710:/usr/share/nginx/html/ .
[root@laser ~]# ls | grep start
Start
#将宿主主机中的文件复制到容器中
[root@laser ~]# docker cp start 726b695a337c:/root

[root@laser ~]# docker exec 726b695a337c ls /root start

docker网络

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值