Docker--容器篇

136 阅读2分钟

Docker容器

容器就是对外提供服务的一个实例。

容器启动的必要条件:容器内至少有一个进程运行在前台

Docker容器命令

创建容器

 # 格式
   docker run [参数] [镜像名称] [运行容器的启动命令]
   
 # 参数
   -d : 以守护进程的方式运行一个容器
     docker run -d [镜像名称] [cmd]
   
   --name : 指定容器的名称
     docker run -d --name [容器名称] [镜像的名称] [cmd]
   
   -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]
 ​
 # docker run 运行流程
 1、检查本地是否用指定镜像,如果没有则去对应的仓库下载镜像
 2、启动容器,如果指定了命令则使用指定的命令,如果没有则使用默认的命令
 3、返回容器ID

查看本机的容器列表

 # 格式  
   docker ps [参数]
   docker ps # 查看当前系统中正在运行的容器列表
 ​
 #参数
   -a : 查看系统中所有的容器。
   -q : 仅显示容器的ID
 [root@k8s-1 ~]# docker run -itd -p 6371:6371 -h 'redis-docker' --name redis -v /home/redis redis
 361f0797537f04526becc49d788f03f33401e0f621d7e750db4943dddae43681
 [root@k8s-1 ~]# docker ps
 CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                 NAMES
 361f0797537f   redis     "docker-entrypoint.s…"   5 seconds ago   Up 2 seconds   0.0.0.0:6371->6371/tcp, :::6371->6371/tcp, 6379/tcp   redis
 #容器ID  镜像ID或名称   容器启动执行命令   创建的时间   状态和时间up:启动,exit:停止    容器内应用监听端口   容器名称
 ​

停止和启动一个容器

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

删除容器

 # 格式
   docker rm [容器名称|ID]
 ​
 # 参数
   -f : 强制删除
   docker rm -f [容器名称|ID]
 ​
 # 清空容器
 docker rm $(docker ps -a -q)

查看容器内容

 # 格式
   docker inspect [容器名称|ID]
 ​
 # 监控docker运行状态
 docker inspect -f '{{.State.Running}}' redis

复制命令

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

进入容器

 1、exec : 在容器外向容器内执行一个命令(官方推荐)相当于创建一个新的进程来容器中操作
   docker exec [参数] [容器的名称|ID] [cmd]
   docker exec -it 361f0797537f /bin/bash
 ​
 2、attach : 在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)相当于通过管道连接了pid=1的进程,退出时容器退出
   docker attach [容器ID|名称]
 ​
 3、nsenter : 建立一个管道连接上容器主ID
   nsenter --target $( docker inspect -f {{.State.Pid}} 361f0797537f) --mount --uts --ipc --net --pid