查看该Linux系统是Centos 还是 ubuntu
1、centos
cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
2、ubuntu / Debian
cat /etc/issue
Debian GNU/Linux 10 \n \l
容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
docker update 命令
用于更新一个或多个容器的配置。
docker update --help
Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]

容器运行参数
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
其中OPTIONS
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-v /data/www/quwan:/www:挂载目录或文件;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持bridge/host/none/container;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--privileged=true
查看正在运行的容器
docker ps
查看全部容器
docker ps -a
查看容器正在运行的进行
docker top php-fpm
重命名容器
docker rename php-fpm php72-fpm
设置容器开机自启动
前提是docker已被设置开机自启动
重启策略:
no - 容器退出时,不重启容器;
on-failure - 只有在非0状态退出时才从新启动容器;
always - 无论退出状态是如何,都重启容器;
还可以在使用on - failure策略时,指定Docker将尝试重新启动容器的最大次数。默认情况下,Docker将尝试永远重新启动容器。
在启动容器的时候设置
docker run --restart=on-failure:3 redis
如果容器已经启动后
docker update --restart=on-failure:3 redis
docker容器与主机间文件互相拷贝,容器可以是启动的也可以是停止的。
1、将主机./RS-MapReduce目录拷贝到容器nginx的/home/cloudera目录下。
docker cp RS-MapReduce nginx:/home/cloudera
2、将容器nginx的/home/cloudera/RS-MapReduce目录拷贝到主机的/tmp目录中。
docker cp nginx:/home/cloudera/RS-MapReduce /tmp/
查看容器启动,运行,报错日志
docker logs 容器ID
停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
返回全部容器的id
docker ps -a -q
删除容器
docker rm <container-id>
容器中安装vim
apt-get install -y vim
如果提示 Unable to locate package vim 表示需要
apt-get update && apt-get install -y vim
安装wget
apt-get install -y wget
bash: ip: command not found
apt-get install iproute2 iproute2-doc
停止一个容器
docker stop nginx
进入容器
docker exec -it php72-fpm bash
将获取到一个回话,使用exit退出容器
值得注意的是,在以alpine为基础容器的容器中没有 /bin/bash 命令,此时需要改成
docker exec -it php72-fpm sh
临时执行容器中的命令
docker exec -it php72-fpm php -m
-it会获取到容器的标准输出并打印出来。
查看容器参数,运行参数,比如目录挂载,端口映射等
docker inspect mysql
容器创建后如何修改启动时的参数
比如启动参数为 docker run --name php-fpm -p 9000:9000 -v /data/www/quwan:/www -d php:fpm
有时候需要修改启动参数,新手的话一般会选择重新创建一个容器,但是如果在容器中需要做一些安装和配置,那么又需要重新来一遍。
要知道容器的配置是保存在文件的,那么最直接的修改方式就是修改配置文件,当然有一些提供了命令来修改。
容器目录:/var/lib/docker/containers/容器ID
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
service docker stop
cd /var/lib/docker/containers
ls
docker ps
你应该能找到规律
cd b725a800bd10243659b3484ef285da701f34d8951d2460309928587ea8c43552
ls
主要文件
config.v2.json hostconfig.json
修改之前一定要备份
cp config.v2.json config.v2.json.bak
cp hostconfig.json hostconfig.json.bak
修改这两个配置文件后
service docker start
启动容器
修改容器里的文件后导致容器无法启动了怎么办?
你应该遇到过这种情况,或许迟早会遇到。
方法一、
要知道在Linux下一切皆文件,所以容器内部的文件应该能在宿主机上找到。
先查看错误日志知道自己哪里改错了,一般的容器都会将错误日志重定向到标准输出,而docker会将容器的标准输出记录下来。
docker logs php72-fpm
查找文件,我这里设置的是overlay文件系统
cd /var/lib/docker/overlay
ll
find ./ -name php-fpm.conf
可能有多个,需要认为辨认。
方法二、
基于方法一的知识,如果你知道那个文件在容器中的具体位置,可以使用 docker cp 命令先将它从容器中复制出来,修改后在
复制进容器即可。这种方法显然更简单高效。
对于频繁修改的配置文件最好挂载到容器外面,比如 nginx 配置文件。
Docker 参数 -i -t 的作用
通常的解释是: -t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开.
问题
所以通常都是这样的: sudo docker run -it ubuntu 进入了命令交互界面
但是如果不加呢? sudo docker run ubuntu 或sudo docker create ubuntu & sudo docker start ubuntu
这样的话, docker容器无法启动。
原因
Docker中系统镜像的缺省命令是 bash,如果不加 -ti bash 命令执行了自动会退出。这是因为如果没有衔接输入流,本身就
会马上结束。加-ti 后docker命令会为容器分配一个伪终端,并接管其stdin/stdout支持交互操作,这时候bash命令不会自
动退出。
如果容器里运行了服务,那么它会监听一个端口,输入输出流保持打开,自然也就不需要-it参数了,比如 nginx容器,对于没
有监听的容器,比如ubuntu ,必须用-it参数来迫使容器运行起来,否则立马就退出了。