Docker容器命令

内容概述

1.什么是容器?
2.容器的生命周期
3.容器的基本使用

内容详细

1.什么是容器?

1.容器就是对外提供服务的一个实例
2.容器启动的必要条件:容器内至少有一个进程运行在前台
# 总结来说Docker容器就是:
一个镜像格式
一系列标准的操作
一个执行环境

2.容器的生命周期

容器的生命周期:

容器是一组具有隔离特性的进程。使用Docker运行时,会选择一个映像提供独立的文件系统,并指定相应的运行程序。这里指定的正在运行的程序称为初始进程,当initial 进程启动时,容器也将启动,当initial 进程退出时,容器也将退出。

因此,可以认为容器的生命周期与 initial流程的生命周期是一致的。当然,由于容器中不仅存在这样一个 initial流程, initial流程本身还可以生成其他子流程或docker exec生成的运维操作,这也属于 initial流程管理的范围。当初 initial程退出时,所有子进程也将退出,这也是为了防止资源泄漏。

容器之内必须至少有一个进程运行在前台,如果一个进程都没有的话,那么此容器就相当于完成了它的生命周期

3.容器的基本使用

1.)查看本机容器列表

# 格式    
    docker ps [参数]
 
# 默认
    docker ps       # 查看正在运行的容器列表
 
# 参数
    -a : 查看系统中所有的容器。
    -q : 仅显示容器的ID
 
# 实例 docker ps -a
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
6e0d7dad4928   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   0.0.0.0:8080->80/tcp   eloquent_aryabhata

# STATUS:
UP:启动状态
Exited:停止状态
Create:容器已经创建,但是并没有启动

2.)创建容器(docker run)

docker run [参数] [镜像名称] [运行容器的启动命令]
# 参数和启动命令可以省略

容器的启动流程:
1.查看本地是否存在正在使用的镜像
2.如果本地不存在要使用的镜像,则去仓库下载
3.使用镜像来启动容器

参数:
-d 以守护进程方式运行容器
# 格式
    docker run -d [镜像名称] [cmd]
 
# 实例
    docker run -d nginx

-name 指定容器名称
# 格式
    docker run -d --name [容器名称] [镜像的名称] [cmd]
 
# 实例
    docker run -d --name nginx nginx

-p 指定端口映射
# 格式
    docker run -d -p 宿主机IP:宿主主机端口:容器内端口 [镜像的名称] [cmd]
    不使用宿主机IP默认本机全网段端口开放
# 实例
    端口映射
    docker run -d -p 80:80 nginx
    docker run -d -p 10.0.0.210:81:80 nginx
 
    端口范围映射
    docker run -d -p 81-89:81-89 nginx
 
    使用UDP协议做端口映射
    docker run -d -p 90:80/udp nginx
 
    使用UDP协议做端口随机映射
    docker run -d -p ::80/udp nginx
 
    随机端口映射
    docker run -d -p ::80 nginx
    
-P 随机端口映射
# 格式
    docker run -d -P [镜像名称] [cmd]
 
# 实例
    docker run -d -P nginx
    
-i 打开标准输出
-t 创建一个终端
-it 以交互方式打开一个伪终端
# 格式
    docker run -it [镜像名称] [cmd]
 
# 实例
    以交互式方式打开一个伪终端
    docker run -it nginx bash
    以交互式方式打开一个终端在后台运行
    docker run -dit centos

-v 给容器挂载数据卷(将宿主主机的目录挂载到容器中,从而实现文件互通)
# 格式
    docker run -v 宿主主机绝对目录:容器内目录  [镜像名称] [cmd]
 
    在宿主机创建一个固定名字的目录,来持久化容器的目录下的数据
    docker run -v 宿主主机绝对目录:容器内目录  [镜像名称] [cmd]
 
# 实例
    docker run -dit -v /root/test:/root centos7
    docker run -dit -v /root/test1:/root centos7
    
–rm 容器生命周期结束立即删除
# 格式
    docker run --rm [镜像名称] [cmd]
 
# 实例
    docker run -d --rm nginx
    
-e 在容器中创建一个环境变量
#格式
    docker run -e 环境变量 -d [镜像名称] [cmd]
 
# 实例
    docker run -it -e NAME=abc centos:7
    printenv
    NAME=abc
    
–link 连上一个容器,实现网络互通
# 格式
    docker run --link 被连接的容器的名称:连接别名 [镜像名称] [cmd]
 
# 实例
     docker run -it --link dc1dab96297a:nginx centos
     ping nginx
    64 bytes from nginx (172.17.0.5): icmp_seq=1 ttl=64 time=0.158 ms
    
-h 设置容器主机名
# 格式
    docker run -h "主机名"  [镜像名称] [cmd]
 
# 实例
    docker run -it -h "xiaowu" nginx bash
root@jerryli:/#

# 补充:
在宿主机上执行一个容器内部的命令
docker exec [容器内部的ID或名称] [需要在容器内部执行的命令]
docker exec centos printenv

启动一个容器
docker start [容器的名称|ID]
docker start centos2

3.)创建容器不启动(docker create)

docker create [参数] [镜像名称] [运行容器的启动命令]
# 参数
大部分参数与docker run相同
区别:
没有-d 参数

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

4.)start/stop启停容器

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

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

5.)docker rm删除容器

# 格式
    docker rm [容器名称|ID]
 
# 参数
    -f : 强制删除
    docker rm -f [容器名称|ID]
 
# 清空容器
    正在运行的不会删除
    docker rm $(docker ps -a -q)
    正在运行的也会被删除
    docker rm -f $(docker ps -a -q)

6.)docker inspect查看容器信息

# 格式
    docker inspect [容器名称|ID]
 
# 查看容器运行状态
    # 格式
    docker inspect -f '{{信息名称}}' [容器名称|ID]
 
    # 实例
    判断指定的容器是否在运行?
    docker inspect -f '{{.State.Running}}' nginx

7.)docker cp复制命令

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

8.)docker exec/attach进入容器

1. exec : 进入正在运行的容器(分配一个新终端)(官方推荐)
    docker exec [参数] [容器的名称|ID] [cmd]
exec其本质是在宿主主机上执行一个容器内的命令,但是加上-it参数,可以达到进入容器的效果,原理是在容器内部新创建一个bash进程。所以当exec退出时不影响容器的正常运行。
    # 实例
        docker exec -it nginx bash
 
2. attach : 进入正在运行的容器(使用相同的终端),原理是将容器内PID为1的进程开辟一个管道,连接到宿主主机
当在宿主主机上退出时,容器也随之退出(容器的生命周期结束)
    docker attach [容器ID|名称]
 
    直接离开会关掉容器
    偷偷离开的快捷键ctrl +p,ctrl +q
    
# 其他进入容器的方法
3、nsenter : 建立一个管道连接上容器主ID
    nsenter --target $( docker inspect -f {{.State.Pid}} [容器名|ID]) --mount --uts --ipc --net --pid	# 有exec之后就不怎么使用了
 
4、ssh : 通过ssh连接  (很麻烦,及其不推荐)

9.)保存容器为镜像(commit)

# 保存正在运行的容器直接为镜像
# 格式:
    docker commit [容器ID|容器名称] 保存名称:版本
 
# 参数
    -a 镜像作者
    -p 提交期间暂停容器
    -m 容器说明
    
# 实例
[root@docker ~]# docker commit -a "jerry" -m "测试镜像" -p 6e0d7dad4928 test:version1
sha256:4ce624f73c67f7d232ec9f580004e30f09a740fe8f5eb56a7c16eee84babbd3b
[root@docker ~]# docker images
REPOSITORY   TAG        IMAGE ID       CREATED         SIZE
test         version1   4ce624f73c67   7 seconds ago   133MB
nginx        latest     87a94228f133   10 days ago     133MB

10.)保存容器为镜像包(export/import)

# export保存正在运行的容器为镜像包
#保存容器为镜像
    docker export [容器的ID] > [包名称]
 
# 实例
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                  NAMES
6e0d7dad4928   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:8080->80/tcp   eloquent_aryabhata
[root@docker ~]# docker export 6e0d7dad4928 > nignx:version.tar
[root@docker ~]# ll
总用量 373204
-rwxr-xr-x. 1 root root      4364 8月  18 16:09 1.sh
-rw-------. 1 root root      1565 8月  18 15:59 anaconda-ks.cfg
-rw-------  1 root root 246371328 10月 22 16:47 image.tar
-rw-r--r--  1 root root 135770624 10月 22 21:47 nignx:version.tar

# import 将镜像包解为镜像
# docker import [包名称] [自定义镜像名称]

# 实例
[root@docker ~]# docker import nignx:version.tar nginx:version2
sha256:188c206b4388f6769d68169a29ebd47e5bb680a86970236822666c090ee2fdcc
[root@docker ~]# docker images
REPOSITORY   TAG        IMAGE ID       CREATED         SIZE
nginx        version2   188c206b4388   6 seconds ago   132MB
test         version1   4ce624f73c67   4 minutes ago   133MB
nginx        latest     87a94228f133   10 days ago     133MB

11.)保存镜像(针对点是镜像)

将镜像打包,发送到远程服务器
docker save	# 将镜像保存成压缩包
docker save -o image.tar    nginx:latest   centos:latest
docker save > image.tar  nginx:latest   centos:latest

docker load # 将镜像包导入
docker load -i image.tar
docker load < image.tar

12.)查看容器的运行日志

docker logs [容器的ID或名称]docker logs modest_tharp# 参数:-f:持续监控docker logs -f 4ce624f73c67
posted @ 2021-10-22 22:09  堇雪月寒风  阅读(135)  评论(0编辑  收藏  举报
Live2D