多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] 容器是独立运行的一个或一组应用。Docker容器通过Docker镜像来创建。 容器与镜像的关系类似于面向对象编程中的对象与类。 >[info] 以下命令的容器名称都可以换成容器的id ## 操作 # 创建一个叫mycon的容器并传入参数php:5.6-fpm docker create --name mycon php:5.6-fpm # 如果镜像中没有cmd,报Error response from daemon: No command specified docker create ubuntu-ssh-20190622:ansible /bin/bash # 创建并运行ubuntu:15.10,输出 "Hello world" docker run ubuntu:15.10 /bin/echo "Hello world" # 创建容器,并进入容器,如果不指定name就会自己创建一个临时name # 非bash,sh。就是直接执行后退出 docker run -i -t ubuntu:18.10(镜像名) /bin/bash # 加上d的话就创建运行后就直接退出 docker run -itd ubuntu:18.10 # 在容器mycon中开启一个交互模式的终端 docker exec -i -t mycon /bin/bash # 在容器mycon中以交互模式执行容器内/data/test.sh脚本 docker exec -it mycon /bin/sh /data/test.sh # 退出容器 快捷键:Ctrl+P+Q exit; # 停止容器运行,发送信号SIGTERM docker stop mycon # 启动一个停止状态的容器 docker start mycon # 重启一个容器 docker restart mycon # 删除一个容器 doecker rm mycon # 阻塞到一个容器,直到容器停止运行 docker wait mycon # 暂停容器中所有的进程 docker pause mycon # 恢复容器中所有的进程。 docker unpause mycon # 找到目标容器的pid,然后用nsenter进入 # 老版本的docker是没有exec命令的 docker inspect -f {{.State.Pid}} 44fc0f0582d9 nsenter --target 998 --mount --uts --ipc --net --pid # 发送信号给容器,默认SIGKILL docker kill -s KILL mycon (-s表示向容器发送一个信号) ## 信息 # 显示状态为运行(Up)的容器 docker ps -a :显示所有的容器,包括未运行的。例如:docker ps -a # 深入容器内部获取容器所有信息,例如:docker inspect mycon docker inspect -f :指定返回值的模板文件。例如:docker inspect -f '{{.NetworkSettings.IPAddress}}' mycon (获取正在运行的容器mycon的 IP) -s :显示总的文件大小。 --type :为指定类型返回JSON。 # 查看容器的日志(stdout/stderr) docker logs -f : 跟踪日志输出,例如:docker logs -f mycon(查看容器mycon的日志输出,容器必须是启动状态) --since :显示某个开始时间的所有日志 -t : 显示时间戳 --tail :仅列出最新N条容器日志,例如:docker logs --since="2017-05-01" --tail=10 mycon(查看容器mycon从2017年5月1日后的最新10条日志。) # 得到docker服务器的实时的事件 docker events -f :根据条件过滤事件;例如:docker events -f "image"="mysql:5.6" --since="1466302400" (显示docker 镜像为mysql:5.6 这个时间戳对应的日期之后的相关事件。) --since :从指定的时间戳后显示所有事件;例如:docker events --since="1466302400" (显示docker 在这个时间戳对应的日期之后的所有事件。) --until :流水时间显示到指定的时间为止; # 显示容器的端口映射,例如:docker port mycon docker port # 显示容器的进程信息,支持ps参数。例如docker top mycon docker top # 显示容器文件系统的前后变化, 检查容器里文件结构的更改。例如:docker diff mycon docker diff ## 数据卷与数据卷容器 删除容器后数据还存在 # 数据卷的创建与查看 # 默认是创建在宿主机的/var/lib/docker/volumes/上 docker volume create nginx-vol docker volume ls docker volume inspect nginx-vol # 数据卷挂载 docker run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx docker run -itd --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx # 数据卷指定挂载目录 /home/docker/wwwroot # -v方式的可以自动创建目录, --mount方式的不可以 docker run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx docker run -itd --name=nginx-test --mount type=bind src=/home/docker/wwwroot,dst=/usr/share/nginx/html nginx docker run -itd --name=nginx-test -v /home/docker/wwwroot:/usr/share/nginx/html nginx 如果容器之间需要共享一些持续更新的数据 # 创建挂载卷容器 src:数据卷(必须要把名称写全) dst=把数据卷挂载到容器中的什么地方 docker run -itd --name nginx-data --mount src=nginx-vol,dst=/usr/share/nginx/html nginx # 新的容器关联数据卷容器 docker run -itd --volumes-from nginx-data --name nginx-1 nginx docker run -itd --volumes-from nginx-data --name nginx-2 nginx # 三个容器的数据卷通用 ## 导出导入 # 从容器里向外拷贝文件或目录 docker cp -L :保持源目标中的链接 docker cp /www/test mycon:/www/ # 将主机/www/test目录拷贝到容器mycon的/www目录下 docker cp /www/test mycon:/www # 将主机/www/test目录拷贝到容器mycon中,目录重命名为www docker cp mycon:/www /tmp/test # 将容器mycon中的/www目录拷贝到主机的/tmp/test目录中 # 将容器整个文件系统导出为一个tar包,不带layers、tag等信息 # 导出容器必须要先停止容器 docker export -o :将输入内容写到文件。例如:docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2 #将id为a404c6c174a2的容器按日期保存为tar文件。 # docker import <文件路径> <容器名> docker import ./ubuntu1810.tar ubuntu1810:tag >[info] 注意,docker import导入容器进去是成为一个新的镜像,要通过`docker images`来查看,相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。