docker学习笔记

docker基本命令

  1. 启动docker
systemctl start docker #启动docker
systemctl stop docker  #停止docker
systemctl restart docker #重启docker
systemctl status docker #查看docker状态
  1. docker自启动
systemctl enable docker #设置docker开启自启动

docker镜像命令

  1. 镜像
  1. docker images 查看本机上的镜像 镜像也可以分层
  2. docker images xxx 搜索本机镜像
  3. docker images pull 镜像名 下载
  1. docker run -it --name mycentos centos:TAG +各种参数

run是从镜像中启动一个新的容器,需要配置一些参数
docker run -it centos 新从镜像中创建运行一个容器

  1. docker ps 列出当前正在运行的容器 docker ps -a 列出所有的容器
  2. 删除镜像
  • 删除单个: docker rmi -f + 镜像id
  • 删除多个: docker rmi -f 镜像名:TAG 镜像名2:TAG
  • 删除全部: docker rmi -f $(docker images -qa) #危
  1. docker system df #查看镜像/容器/数据卷所占的空间

docker容器命令

  1. 创建容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]   

--name="容器新名字"       #为容器指定一个名称;
-d: #后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
	后台守护,比如redis mysql  后台启动放着就行了 不需要前台交互
	不然容易被关闭 不让进去
-i:#以交互模式运行容器,通常与 -t 同时使用;
-t:#为容器重新分配一个伪输入终端,通常与 -i 同时使用;
	#也即启动交互式容器(前台有伪终端,等待交互);
	可以在挂着 可以和前台交互
-P: #随机端口映射,大写P
-p: #指定端口映射,小写p
  1. 查看容器

docker ps #查看正在运行的容器 docker ps -a #查看所有容器 -a # 显示所有的容器,包括未运行的 -f # 根据条件过滤显示的内容 -l # 显示最近创建的容器 -n # 列出最近创建的n个容器 -q # 静默模式,只显示容器编号 -s # 显示总的文件大小 --format # 指定返回值的模板文件 --no-trunc # 不截断输出

  1. 启动容器
#start是从已经存在的容器中重新开始启动,不需要配置参数,只需要名称就行
docker start +容器ID或者容器名称

#重启容器或者重新进入容器、
docker restart +容器ID或者容器名称 重启容器
  1. 设置容器自启动
  • 创建容器时设置
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服务重启后)
  1. 退出容器
  1. exit 容器停止并且退出
  2. Ctrl+P + Q 容器不停止退出 先Ctrl + P 再Q

docker stop +容器ID #温柔关闭 docker kill +容器Id #直接杀死

  1. 查看容器信息(内部细节)

docker inspect 容器名称或ID

  1. 删除容器

docker rm +容器id 删除未运行的
docker rm -f 容器id 强行删除容器
docker rm -f $(docker ps -qa) 删除所有容器
docker ps -a -q |xargs docker rm 一次性删除多个容器,参数传给args

  1. 进入容器

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退出,不会导致容器的停止。

  1. 容器重要命令
  • 启动守护式容器 docker run -d 容器名
  • 查看容器日志 docker logs -t 容器id -t是加上时间 -f打印最新日志 -tail 最后几条、
  • docker attach 容器ID 进入正在运行的容器
  • docker exec 容器ID + 进入的命令 比如ls -l等等 可以远程直接开命令
  • exec 是在容器中打开新的终端,并且可以启动新的进程 功能更强大一些
  • 从容器内部拷贝文件到主机上 :docker cp 容器ID:容器内路径 目的主机路径
  1. 容器备份
#export 导出容器的内容留作为一个tar归档文件[对应import命令]
docker export 容器ID > 文件名.tar    #默认导出到当前目录 可以自己选择路径

#import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]  注意-两旁要有空格
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
  1. docker提交容器到镜像
docker commit - m="add vim cmd" - a="author" 容器ID 新的容器名称:版本号
docker commit -m="我的mysql" -a="龙龙" ce33ab3a9e8a lll/mysql5.7:1.0