docker学习笔记
docker基本命令
- 启动docker
systemctl start docker #启动docker
systemctl stop docker #停止docker
systemctl restart docker #重启docker
systemctl status docker #查看docker状态
- docker自启动
systemctl enable docker #设置docker开启自启动
docker镜像命令
- 镜像
- docker images 查看本机上的镜像 镜像也可以分层
- docker images xxx 搜索本机镜像
- docker images pull 镜像名 下载
docker run -it --name mycentos centos:TAG +各种参数
run是从镜像中启动一个新的容器,需要配置一些参数
docker run -it centos
新从镜像中创建运行一个容器
docker ps
列出当前正在运行的容器docker ps -a
列出所有的容器- 删除镜像
- 删除单个:
docker rmi -f + 镜像id
- 删除多个:
docker rmi -f 镜像名:TAG 镜像名2:TAG
- 删除全部:
docker rmi -f $(docker images -qa)
#危
- docker system df #查看镜像/容器/数据卷所占的空间
docker容器命令
- 创建容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name="容器新名字" #为容器指定一个名称;
-d: #后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
后台守护,比如redis mysql 后台启动放着就行了 不需要前台交互
不然容易被关闭 不让进去
-i:#以交互模式运行容器,通常与 -t 同时使用;
-t:#为容器重新分配一个伪输入终端,通常与 -i 同时使用;
#也即启动交互式容器(前台有伪终端,等待交互);
可以在挂着 可以和前台交互
-P: #随机端口映射,大写P
-p: #指定端口映射,小写p
- 查看容器
docker ps #查看正在运行的容器 docker ps -a #查看所有容器 -a # 显示所有的容器,包括未运行的 -f # 根据条件过滤显示的内容 -l # 显示最近创建的容器 -n # 列出最近创建的n个容器 -q # 静默模式,只显示容器编号 -s # 显示总的文件大小 --format # 指定返回值的模板文件 --no-trunc # 不截断输出
- 启动容器
#start是从已经存在的容器中重新开始启动,不需要配置参数,只需要名称就行
docker start +容器ID或者容器名称
#重启容器或者重新进入容器、
docker restart +容器ID或者容器名称 重启容器
- 设置容器自启动
- 创建容器时设置
docker run -d --restart=always --name 设置容器名 使用的镜像
#(上面命令 --name后面两个参数根据实际情况自行修改)
# Docker 容器的重启策略如下:
--restart具体参数值详细信息:
no # 默认策略,容器退出时不重启容器;
on-failure # 在容器非正常退出时(退出状态非0)才重新启动容器;
on-failure:3 # 在容器非正常退出时重启容器,最多重启3次;
always # 无论退出状态是如何,都重启容器;
unless-stopped # 在容器退出时总是重启容器,不考虑在 Docker 守护进程启动时就已经停止了的容器。
- 修改已经有的容器
#如果创建时未指定 --restart=always,可通过update 命令设置
docker update --restart=always 容器ID(或者容器名)
注意事项:
- 用docker自带的–link把多个容器链接在一起,有重启或升级的问题,比如很多容器都依赖于 db 这个容器,然后db容器重启了,重启时docker分配的
ip
会变,导致其他依赖于db的容器都要重启。 - –link 链接的容器还有启动顺序的问题, 需要先启动db容器再启动其他依赖于db的容器, 这样导致 --link和–restart=always 不能一起用, 如果一起用会发现宿主机重启了, docker容器并没有全部重启,因为这时候docker容器是同时被启动的,并不知道启动顺序。
- 最后决定不用 --link 链接容器了。
Docker容器开机自动启动(在宿主机重启后或者Docker服务重启后)
- 退出容器
exit 容器停止并且退出
Ctrl+P + Q 容器不停止退出 先Ctrl + P 再Q
docker stop +容器ID #温柔关闭 docker kill +容器Id #直接杀死
- 查看容器信息(内部细节)
docker inspect 容器名称或ID
- 删除容器
docker rm
+容器id 删除未运行的docker rm -f
容器id 强行删除容器docker rm -f $(docker ps -qa)
删除所有容器docker ps -a -q |xargs docker rm
一次性删除多个容器,参数传给args
- 进入容器
docker attach 容器ID 进入正在运行的容器
attach早已过时了,因为是公用一个终端,当这个终端被一个容器所占用的时候,这个时候attach 其他容器,就会造成堵塞。所以尽量使用exec
docker exec -it containerID /bin/bash
docker exec 容器ID
docker exec 容器ID + 进入的命令 比如ls -l等等 可以远程直接开命令
exec 是在容器中打开新的终端,并且可以启动新的进程 功能更强大一些attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止。 exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止。
- 容器重要命令
- 启动守护式容器 docker run -d 容器名
- 查看容器日志 docker logs -t 容器id -t是加上时间 -f打印最新日志 -tail 最后几条、
- docker attach 容器ID 进入正在运行的容器
- docker exec 容器ID + 进入的命令 比如ls -l等等 可以远程直接开命令
- exec 是在容器中打开新的终端,并且可以启动新的进程 功能更强大一些
- 从容器内部拷贝文件到主机上 :
docker cp
容器ID:容器内路径 目的主机路径
- 容器备份
#export 导出容器的内容留作为一个tar归档文件[对应import命令]
docker export 容器ID > 文件名.tar #默认导出到当前目录 可以自己选择路径
#import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export] 注意-两旁要有空格
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
- docker提交容器到镜像
docker commit - m="add vim cmd" - a="author" 容器ID 新的容器名称:版本号
docker commit -m="我的mysql" -a="龙龙" ce33ab3a9e8a lll/mysql5.7:1.0