看啥

导航

六、docker容器

docker容器

容器就是对外提供服务的一个实例。
容器启动的必要条件:容器内至少有一个进程运行在前台

创建容器的格式:docker run [option] image [cmd]
docker run [参数] [镜像名称] [运行容器的启动命令]

  • 参数
    -d : 以守护进程的方式运行一个容器
    --name : 指定容器的名称
    -p : 指定端口映射
    docker run -d -p 宿主主机端口:容器内端口 [镜像名称] [cmd]
    -P :随机端口映射
    docker run -d -P [镜像名称] [cmd]
    -i : 打开标准输出
    -t : 创建一个伪终端
    docker run -it [镜像名称] [cmd]
    -v : 挂载目录到容器中
    docker run -v 宿主主机目录:容器内目录 [镜像名称] [cmd]
    --rm : 容器生命周期结束时立即删除
    docker run --rm [镜像名称] [cmd]
    -e : 在容器中创建一个环境变量
    docker run -e NAME=Centos -d [镜像名称] [cmd]
    --link : 连接上一个容器,实现网络互通
    docker run --link 被连接的容器的名称:连接别名 [镜像名称] [cmd]
    -h : 设置容器主机名
    docker run -h "主机名" [镜像名称] [cmd]

1、创建容器

docker run -d --name nginx -p 80:80 nginx
# docker run 运行流程
1、检查本地是否用指定镜像,如果没有则去对应的仓库下载镜像
2、启动容器,如果指定了命令则使用指定的命令,如果没有则使用默认的命令
3、返回容器ID

2、查看本机的容器列表

格式
docker ps [参数]
docker ps # 查看当前系统中正在运行的容器列表

参数
-a : 查看系统中所有的容器。
-q : 仅显示容器的ID

image

3、停止和启动一个容器

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

  • 停止
    docker stop [容器的ID|名称]

  • 启动(该容器必须是系统已经存在的容器)
    docker start [容器的ID|名称]

docker start nginx
docker stop nginx

4、删除容器

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

  • 参数
    -f : 强制删除
    docker rm -f [容器名称|ID]
docker rm  nginx
强制删除一个正在运行的容器。
docker rm -f nginx
# 清空容器
docker rm $(docker ps -a -q)

5、查看容器内容

查看容器详情可以使用
docker container inspect [OPTIONS] CONTAINER [CONTAINER . .. ]子命令。
格式
docker inspect [容器名称|ID]

# 怎么监控docker运行状态?
docker inspect -f '{{.State.Running}}' nginx

6、复制命令

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

1、复制到容器内
docker cp [宿主主机文件路径] 容器ID:容器内路径

2、复制到容器外
docker cp 容器ID:容器内路径 [宿主主机文件路径

docker cp 726b695a337c:/opt/start

docker cp start 726b695a337c:/root

7、进入容器

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

进入容器一般有四种

1、exec :在容器外向容器内执行一个命令(官方推荐)
既 attach 之后,exec 是官方推出的有一个新的进入容器的命令,这个命令相当于在容器中执行一个命令。
docker exec [参数] [容器的名称|ID] [cmd]

2、attach : 在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)
docker attach [容器ID|名称]

3、nsenter : 建立一个管道连接上容器主ID
需要配合 docker inspect 来使用(早期没有 exec 命令时,企业当中最长用的方式之一),Docker 是用 golang 语言开发,所以它也支持 go 语言的摸版语法。
nsenter --target $( docker inspect -f {{.State.Pid}} 30d369d70bcd) --mount --uts --ipc --net --pid

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

docker exec -it nginx /bin/bash

docker attach nginx

nsenter --target $( docker inspect -f {{.State.Pid}} nginxv1 ) --mount --uts --ipc --net --pid

总结
进入 docker container 中一般情况下有 4 种方式,最常用的是 exec 和 nsenter 这两种。
Nsenter 和 exec 之间的区别?
 Exec 是 docker 自带的命令,Nsenter 是 Linux 提供的命令。
 Exec 相当于在容器内执行一个命令,而 Nsenter 是仅仅进入容器之中而已

posted on 2021-08-17 19:34  看啥  阅读(67)  评论(0编辑  收藏  举报