前言
上一篇文章说到了docker的镜像以及常用命令,在docker的使用过程中,一般都是先拉去镜像,然后在镜像的基础上创建并启动容器来运行我们的项目。故此本篇主要是说下容器的创建和相关命令以及简单使用。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZ2gDMhNzN3UmY3kTL1ADNi1iY0IDNtUGNiVWLycDO5QzM5M2LcJXZsRmbhhWZnFWbp1yYpZGZvwVZnJXYs9CXt92YuAHdhR3cw5yMw9CXvwlOzBHd0hWPsJXdmYDM3YjZkJGNzQDNl1SOhRGOtETMiVWLhJTMx0SY5MWM5EzN30DZpV3ZmITPlBXe0ZyPldWYtl2LcdXZpZ3Lc12bj5SZjVjL5h3byBnLyATLn1Wavw1LcpDc0RHaiojIsJye.jpg)
新建并启动容器
在docker我们可以通过docker run来新建并启动一个容器,该命令下面有很多选项。下面来列举一些常用的命令:
-d:表示后台运行
-P:随机端口映射
-p:指定端口映射
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
–network:指定网络模式 有以下4个参数可选
【–network=bridge:默认选项,表示连接到默认的网桥】
【–network=host:容器使用宿主机的网络】
【–network=container:NAME_or_ID:告诉Docker让新建的容器使用已有容器的网络配置】
【–network=none:不配置该容器的网络,用户可自定义网络配置】
示例1
docker run java /bin/echo 'Hello World'docekr:Docker 的二进制执行文件。run:与前面的 docker 组合来运行一个容器。java:指定要运行的镜像,如果不存在,则从docekr hub上拉去。/bin/echo:可以在启动容器里执行命令。
示例2
docker run -d -p 80:80 nginx-d:表示后台运行-p:表示将容器端口80映射到宿主机端口80
注意:每次docker run都会新建并启动一个容器。
列出容器
使用docker ps可以列出所有运行中的容器,执行命令后可以看到如下的内容
docker ps命令
列出所有的容器,包括停止的容器可以使用docker ps-a,查出的列字段含义如下
CONTAINER_ID:表示容器ID。
IMAGE:表示镜像名称。
COMMAND:表示启动容器时运行的命令。
CREATED:表示容器的创建时间。
STATUS:表示容器运行的状态。Up表示运行中,Exited表示已停止。
PORTS:表示容器对外的端口号。
NAMES:表示容器名称。该名称默认由Docker自动生成,也可使用docker run命令的–name选项自行指定。
命令格式:docekr ps [options]
--all,-a default:false 列出所有容器,包括未运行的容器,默认只展示运行的容器
--filter, -f 根据条件过滤显示内容
--format 通过Go语言模板文件展示镜像
--last, -n default:-1 显示最近创建n个容器(包含所有状态)
--latest, -l default:-1 显示最近创建的容器(包含所有状态)
--no-trunc default:fallse 不截断输出
--quiet, -q default:false 静默模式,只展示容器的编号
--size, -s default :false 显示总文件大小
示例
docekr ps -n 5docekr ps -a -s
停止容器
使用docker stop
--time, -t default:10 强制杀死容器前等待的时间,单位是秒
示例
docker stop 4a30b910f793 或者 docker stop 容器名称
强制停止容器使用docker kill
--signal, -s default:KILL 向容器发送一个信号
示例
docker kill 4a30b910f793 此处为容器id
启动停止容器
docker run 是新建并启动一个容器,而docker start是启动一个已经创建的容器。
命令格式
docker start [OPTIONS] CONTAINER [CONTAINER...]
--attach, -a default:false 连接STDOUT/STDERR并转发信号
--checkpoint 从该检查点还原
--checkpoint-dir 使用自定义的检查点存储目录
--detach-keys 覆盖断开容器的关键顺序
--interactive, -i default:false 连接容器的STDIN
示例:
docker start 4a30b910f793/容器名称 启动容器
重启容器命令格式
docker restart [OPTIONS] CONTAINER [CONTAINER...]
--time, -t default:10 关闭容器前等待的时间,单位是秒
示例:
docerk restart 4a30b910f793/容器名称 实际是先stop 然后再start
进入容器
在某些场景下面我们需要进入到容器进行相关操作
1、使用docker attach命令进入到容器
docker attach 4a30b910f793
在使用attach命令时,如果是多个窗口同时进入容器,很容易发生阻塞。
2、使用nsenter进入容器
nsenter工具包含在util-linux 2.23或更高版本中。为了连接到容器,我们需要找到容器第一个进程的PID,可通过以下命令获取
docker inspect --format "{{.State.Pid}}" $CONTAINER_ID
获得pid后就可以进入容器了
nsenter --target "$PID" --mount --uts --ipc --net --pid
示例
[[email protected] ~]# docker inspect --format "{{.State.Pid}}" 784fd3b294d795492[[email protected] ~]# nsenter --target 95492 --mount --uts --ipc --net [email protected]:/#
3、使用docker exec进入到容器
docker exec -it 容器id /bin/bash
删除容器
使用docker rm可以删除指定容器
--force, -f default:false 通过SIGKILL信号强制删除正在运行中的容器
--link, -l default:false 删除容器间的网络连接
--volumes, -v default:false 删除与容器关联的卷
示例
docker rm 4a30b910f793 删除指定的容器 如果删除运行中的容器则用-f参数docker rm -f $(docker ps -a -q) 删除所有容器
导出容器
导出容器指的是将容器导出为一个压缩包
docker export [OPTIONS] CONTAINER-output, -o将内容写到文件而非STDOUT
示例
docker export docker export 容器id > latest.tar > latest.tardocker export --output="latest.tar" red_panda
导入容器
使用docker import 命令即可从归档文件导入内容并创建镜像
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
--change, -c 将Dockerfile指令应用到创建的镜像
--message, -m 为导入的镜像设置提交信息
示例
docker import nginx2.tar nginx 将打包的nginx容器导入