Docker常用的命令

帮助命令

  • 显示docker的版本信息

     docker --version
    
  • 显示docker 的系统信息,包括镜像和容器的数量

     docker info
    
  • 帮助命令

     docker --help
    

docker 官网相关的帮助文档: https://docs.docker.com/engine/reference/commandline/

镜像命令

  • docker images 查看所有本地的主机上的镜像

     docker images
    

在这里插入图片描述

	REPOSITORY       镜像的仓库源
	TAG              镜像标签
	IMAGE ID         镜像ID
	CREATED          镜像的创建时间
	SIZE             镜像的大小
  • 查看images命令可选项

     docker images -aq 
    

    Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]

    List images

    Options:

     -a, --all             显示所有的镜像
     	--digests          显示摘要
     -f, --filter          根据提供的条件过滤输出
     -q, --quiet          只显示镜像ID
    
  • search查找镜像

     docker search  搜索名称
     
     例如:docker search mysql
    
  • search可选项
    过滤查询,查询收藏大于5000的镜像

     docker search MySQL --filter=STARS=5000
    

    Options:

       -f, --filter filter   Filter output based on conditions provided
     	   --format string   Pretty-print search using a Go template
     	   --limit int       Max number of search results (default 25)
           --no-trunc        Don't truncate output
    
  • 镜像下载

     docker pull 镜像名称[:tag]
     
     docker pull mysql      # 下载最新镜像
     
     docker pull mysql:5.7  #下载指定版本的镜像
    

docker pull mysql 等价于 docker pull docker.io/library/mysql:latest
docker 采用分层下载方式,docker image的核心 联合文件系统

  • docker rmi 删除镜像

     docker rmi -f 镜像ID                 # 删除指定的镜像
     
     docker rmi -f 镜像ID1 镜像ID2        # 删除多个镜像
     
     docker rmi -f $(docker images -aq)  # 删除全部镜像
    

容器命令

当我们有了镜像,才可以创建容器

  • 新建容器并启动

    docker run [可选参数] imageID

     #常用参数名
     --name='Name'         # 创建容器的名字,可以用来区分容器
     -d                    # 后台交互方式运行
     -it                   # 使用交互方式运行,进入容器查看内容
     -p                    # 指定容器端口 -p 主机端口: 容器端口
     -P                    # 随机指定端口
     .......
    
  • 列出容器

     docker ps.    # 列出当前运行的容器
     docker ps -a  # 列出当前运行的容器与历史运行过的容器
    

    可选参数

     -a    # 列出当前运行的容器与历史运行过的容器
     -n=?  # 显示最近创建的容器
     -q    # 只显示容器的编号
    
  • 退出容器

    如果docker容器在启动的时候没有加 -d 参数
    exit # 会直接停止容器并退出
    Ctrl + P + Q # 容器不停止,并退出

  • 删除容器

     docker rm 容器id                    # 删除指定的容器, 不能删除正在运行的容器,
     docker rm -f 容器ID                 # 可以强制删除 rm -f 
     docker rm $(docker ps -aq)         # 删除所有的容器
     docker ps -a -q | xargs docker rm  # 删除所有的容器
    
  • 启动与停止容器

     docker start 容器id    # 启动容器
     docker restart 容器id  # 重启容器
     docker stop 容器id     # 停止当前正在运行的容器
     docker kill 容器id     # 强制停止当前容器
    

其他命令

常见的坑:docker容器使用后台运行,就必须有一个前台进程,docker发现没有应用会自动停止容器。docker run -d -it 组合使用。
  • 查看日志

     docker logs  -tf --tail 容器id
     -ft  # 显示日志
     --tail number  # 要显示的日志条数
    
  • 查看容器中的进程信息

     docker top  容器id
    
  • 查看镜像元数据

     docker inspect 容器id
    
  • 进入容器

    方式1:docker exec -it 容器id /bin/bash
    方式2:docker attach 容器id
    区别:
    docker exec # 进入容器后开启一个新的终端,可以在里面进行操作(常用)
    docker attach # 进入容器正在执行的终端,不会开启新的进程

  • 从容器拷贝文件

     # 从容器拷贝文件到主机目录中
     docker cp 容器id:容器内路径  目录路径
     
     # 从主机拷贝文件到容器目录中
     docker cp 目录路径 容器ID:容器内路径
    
  • 修改运行中的docker容器的端口映射

     方法一:删除原有容器,重新建新容器
     		这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。
     		优缺点:优点是简单快捷,在测试环境使用较多。缺点是如果是数据库镜像,那重新建一个又要重新配置一次,就比较麻烦了。
     		
     方法二:修改容器配置文件,重启docker服务
     
     		容器的配置文件路径	/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
     		其中的[hash_of_the_container]是docker镜像的hash值,可以通过docker ps或者docker inspect containername查看。
     		
     		文件中其中有一项是PortBindings,其中8080/tcp对应的是容器内部的8080端口,HostPort对应的是映射到宿主机的端口9190。
     		8361/tcp对应的是容器内部的8361端口,HostPort对应的是映射到宿主机的端口9191。按需修改端口,然后重启docker服务,再启动容器服务就可以了。
     		
     		systemctl restart docker
     		
     		优缺点:这个方法的优点是没有副作用,操作简单。缺点是需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,就会影响其他容器服务。
    
    
     方法三:利用docker commit新构镜像
            docker commit:把一个容器的文件改动和配置信息commit到一个新的镜像。这个在测试的时候会非常有用,
            把容器所有的文件改动和配置信息导入成一个新的docker镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。
     
     		1、停止docker容器
     
     			docker stop container01
     
     		2、commit该docker容器
     
     			docker commit container01 new_image:tag
     
     		3、用前一步新生成的镜像重新起一个容器
     
     			docker run --name container02 -p 80:80 new_image:tag
     
         	优缺点:这种方式的优点是不会影响统一宿主机上的其他容器,缺点是管理起来显得比较乱,没有第二种方法那么直观。
    
  • Docker 图形化界面管理工具

    • portainer Docker 图形化界面管理工具!提供了一个后台面板供我们操作

       docker run -d -p 8888:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
      

      在这里插入图片描述

    • rancher(CI/CD)

       待补充
      

Commit 提交镜像

docker commit  -m="提交的描述信息"  -a="作者"  容器ID  镜像名:[tag]

容器数据卷

  • 什么是容器数据卷

    ​ 容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地,这就是卷技术。目录的挂载,将我们容器内的目录挂载到Linux上面。

  • 使用数据卷

     docker run -it -v 主机目录:容器内目录  -p 主机端口:容器内端口
    
  • 实战:安装MySql

     #获取mysql镜像
     
     docker pull mysql:5.7
     
     #运行容器,需要做数据挂载,安装启动mysql,需要配置密码!!
     
     docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    

具名和匿名挂载

  • 匿名挂载

     # -v 容器内路径
     
     docker run -d -P --name nginx01 -v /etc/nginx nginx
     
     #查看所有的volume(卷)的情况
     
     docker volume ls
    

    这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路径!

  • 具名挂载

     docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
     
     # -P:表示随机映射端口
     
     # 查看所有的volume(卷)的情况
     
     docker volume ls   
    

    所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/自定义的卷名/_data下,如果指定了目录,docker volume ls是查看不到的。

  • 区分三种挂载方式

    三种挂载: 匿名挂载、具名挂载、指定路径挂载
    -v 容器内路径 #匿名挂载
    -v 卷名:容器内路径 #具名挂载
    -v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的

数据卷容器

多个容器之间的数据卷共享是通过拷贝实现的,一个容器的数据卷删除或者容器删除不影响另外的容器访问,本质是数据备份。一旦数据持久化到本地,数据是不会删除的。
–volumes-from 挂载的父容器ID

docker run -it -d --name 容器名称 --volumes-from 已有的容器ID 镜像ID

容器之间可以做配置信息的传递

多个mysql容器实现数据共享

docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d --name mysql02  --volumes-from mysql01  mysql:5.7

Dockerfile的使用

Dockerfile就是用来构建docker镜像的构建文件,通过这个脚本可以生成镜像,镜像是一层层的,脚本是一个个的命令,每个命令都是一层。

  • ​ 构建步骤:

    ​ 1、编写一个dockerfile文件

    ​ 2、docker build 构建称为一个镜像

    ​ 3、docker run 运行镜像

    ​ 4、docker push发布镜像(DockerHub、阿里云仓库)

  • 基础知识:

    1、每个保留关键字都是必须是大写字母

    2、顺序执行从上到下

    3、每一个指令都会创建提交一个新的镜像层,并提交。

    4、# 表示注释

  • DockerFile的指令

     FROM                # from:基础镜像,一切从这里开始构建
     MAINTAINER          # maintainer:镜像是谁写的, 姓名+邮箱
     RUN                 # run:镜像构建的时候需要运行的命令
     ADD                 # add:步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
     WORKDIR             # workdir:镜像的工作目录
     VOLUME              # volume:挂载的目录
     EXPOSE              # expose:保留端口配置
     CMD                 # cmd:指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
     ENTRYPOINT          # entrypoint:指定这个容器启动的时候要运行的命令,可以追加命令
     ONBUILD             # onbuild:当构建一个被继承DockerFile这个时候就会运行onbuild的指令,触发指令
     COPY                # copy:类似ADD,将我们文件拷贝到镜像中
     ENV                 # env:构建的时候设置环境变量!
    
  • 实战测试

    99%的镜像都是从FROM scratch 这个基础镜像开始的,然后配置需要的软件和配置来进行构建。

     # 1、编写dockerfile文件
     
     vim DockerFile
     
     FROM centos
     MAINTAINER mfw<123456@163.com>
     
     ENV MYPATH /root
     WORKDIR $MYPATH
     
     RUN yum -y install vim
     RUN yum -y install net-tools
     
     EXPOSE 80
     CMD echo "----end----"
     CMD /bin/bash
     
     # 2、通过这个文件构建镜像
     
     docker build -f DockerFile文件路径 -t 镜像名称:[tag] .
     
     # 3、查看历史构建过程
     
     docker history 镜像ID
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值