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