Docker常用命令记录

本文详细介绍了Docker的起源、发展和优点,包括其轻量级特性对比虚拟机的优势。讲解了Docker的安装过程,并列举了常用命令,如镜像管理(搜索、下载、删除)、容器操作(启动、停止、删除)以及数据卷的使用,强调了数据持久化的重要性。此外,还介绍了Dockerfile的基础知识和如何构建、运行及发布镜像。最后提到了Docker镜像的共享和容器间的数据共享技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 背景了解

1.Docker概述
  ①docker的思想来源于集装箱,刚刚诞生的时候,没有引起行业的注意。
  ②2013年将docker开源,越来越多的人发现了docker的优点。Dcoker每个月都更新一个版本,
  ③2014年4月9日,Docker 1.0发布
  ④Docker获得原因,十分的轻巧。在容器技术出来之前,我们都是使用虚拟机技术。虚拟机:安装虚拟机软件,通过该软件可以虚拟出来一台或者多台电脑。笨重
  ⑤虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术
  ⑥Docker是基于Go语言开发的仓库地址

2. Dokcer安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun  # 一条命令安装
docker version # 查看是否安装成功(显示版本信息)
3.常用命令
3.1 镜像命令
镜像命令:
1. docker images # 查看现有的镜像
   REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
   镜像的仓库源  镜像的标签   镜像的id       镜像的创建时间    镜像的大小
2. 可选项
   -a, --all    # Show all images (default hides intermediate images)列出所有的镜像
    -q, --quiet # Only show image IDs 只显示所有的id
3. docker search # 搜索
    docker search mysql
    # 可选项:
    # docker search --help
4. docker pull [name] # 下载镜像
     例:docker pull mysql<==>docker pull docker.io/library/mysql:latest

     Using default tag: latest #如果不写tag,默认就是latest
     latest: Pulling from library/mysql 
     15115158dd02: Pull complete # 分层下载,docker images的核心,联合文件系统
     d733f6778b18: Pull complete
     1cc7a6c74a04: Pull complete
     c4364028a805: Pull complete
     82887163f0f6: Pull complete
     097bfae26e7a: Pull complete
     e1b044d6a24f: Pull complete
     cd2978bd4d12: Pull complete
     28bce5cc1677: Pull complete
     907b6d695760: Pull complete
     c5049403458b: Pull complete
     f360718d6f4e: Pull complete
     Digest: sha256:0eb33f0094ef5351639d9d9847c963ee9f22f5631cde046babd4ec239aaeaf06 # 签名(防伪)
     Status: Downloaded newer image for mysql:latest
     docker.io/library/mysql:latest # 真实地址
5. docker pull mysql:5.7 # 指定版本下载
6. docker rmi -f id/名称 # 删除镜像
7. docker rmi -f id1 id2 id3 # 删除多个镜像
8. docker rmi -f $(docker images -aq) # 删除所有镜像
3.2 容器命令
# 有了镜像才有容器
1. docker run [可选参数] image 新建容器 并启动
   # 参数说明
    --name ='Name' # 容器名字 tomcat01 tomcat02 用来区分容器
    -d    # 后台启动
    -it     # 使用交互方式运行,进入容器查看内容
    -p 指定容器端口 -p 8080:8080
       -p ip:主机端口:容器端口
       -p 主机端口:容器端口(常用)
       -p 容器端口
       -p 随机指定端口
2. docker run -it centos /bin/bash #启动并进入容器
     exit #容器停止并退出主机
     ctrl+P+Q #容器不停止并退出
     docker ps # 列出当前运行的容器 
     docker ps -a # 列出历史运行过的容器+当前运行
     docker ps -n=x #显示最近创建的x个容器
     docker ps -q # 只显示容器的id
3. docker rm id #删除容器 不能删除运行当中的容器 如果要强制删除 rm -f
     ①.docker rm $(docker ps -aq) # 删除容器方式1
     ②.docker ps -a -q| xargs docker rm #  删除容器方式2
4. 启动和停止容器的操作
     docker start id # 启动容器
     docker restart id #重启命令
     docker stop id # 停止命令
     docker kill id # 杀掉容器
     docker run -d centos # 后台启动容器
5. 查看日志
   docker logs
6. docker inspect id # 查看容器源信息(比较重要)
7. docker exec -it id bashShell # docker exec -it 6dc8355cbc2d /bin/bash 进入当前运行的容器 开启新的终端可以在里面操作
   docker attach 6dc8355cbc2d  # 进入容器正在执行的终端不会启动新的进程,进去之后还是之前原来运行的界面。
8. docker cp id:容器内路径 目的主机路径  # 拷贝文件
   docker cp 6dc8355cbc2d:/root/zl/test.py /root/zhouluF/ # 从容器内考到本机上
9. 部署nginx
     docker run -d --name nginx01 -p 3344:80 # 后台启动nginx并且将80(nginx默认端口)映射到公网的中的3344端口(端口映射)
         # -d 后台运行
         # --name 给容器起名字
         # -p 服务器外部端口:容器内部端口
     docker exec -it nginx01   # 每次改动nginx配置文件,都需要进入容器 十分麻烦我们要是可以在容器外部提供一个映射路径,达到在容器外部修改文件,容器内部可以自动修改
10. tomcat #部署一个tomcat
    docker run -it --rm tomcat:9.0 #之前都是后天运行,停止后容器还可以查到  (--rm 用完即删除)
    docker run -d -p 3355:8080 --name tomcat01 tomcat:5.7 # 给容器起别名
11. docker stats # 查看docker的cpu状态
12. portainer # 可视化 Docker 图像化界面管理工具,提供一个后台面板供我们操作
13. docker commit # 提交自己的镜像
14. docker commit -m='提交的描述信息' -a='作者' 容器id 目标镜像名:[tag]
15. systemctl restart docker # 重启docker
3.3 容器数据卷
1. 什么是容器数据卷?
      如果数据都在容器中,删除容器数据就会丢失。怎么使得数据可以持久化。容器共享技术
      docker产生的数据同步到本地,将容器的目录挂载到本地上。
2. 使用数据卷
   ①. 直接使用命令挂载;
       docker run -it -v /root/zlF:/home centos bin/bash #docker run -it -v 主机目录(本地目录):docker目录 bin/bash
       docker inspect id # 检查是否挂载成功 Mounts:
            # 在容器内添加文件, 本地对应的目录下也会新增文件 (双向同步); 在本地上修改文件,容器内的数据也会修改
3. 安装mysql
   ①. docker run -d -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7 # 映射多个目录
4. 具名挂载和匿名挂载
   ①. 匿名卷挂载 
       docker run -d -P --name nginx02 -v /etc/nginx nginx # -P 随机映射端口 -v 不指定本地目录 只指定容器内命令
       docker volume ls # 查看所有卷的情况
    ②. 具名挂载
        docker run -d -P --name nginx03 -v juming_nginx:/etc/nginx nginx # -v 卷名:容器内路径
        docker volume inspect juming_nginx # 查看具体的挂载位置 通过具名挂载 
    ③. 区分具名、匿名挂载还是指定路径挂载
           -v 容器内路径 # 匿名挂载
           -v 卷名:容器内路径 # 具名挂载
           -v /本地目录路径:容器内路径 # 指定路径挂载
    ④. 拓展 # ro和rw为读写权限
       docker run -d -P --name nginx03 -v juming_nginx:/etc/nginx:ro nginx # ro只能通过本地目录操作,容器内不能改变
       docker run -d -P --name nginx03 -v juming_nginx:/etc/nginx:rw nginx
5. dockerfile初识 # dockerfile就是用来构建docker镜像的构建文件 体验
     # 通过这个脚本生成镜像 镜像都是一层一层的
     # 创建dockerfile (名字可以随机)
     # 文件内容 这里的每个命令就是一层一层的
        from centos
        VOLUME ["volume01", "volume02"] # 容器内的路径 匿名挂载

        CMD echo "---end---"
        CMD /bin/bash # 将这4行代码存入dockerfile1文件中
      ①. docker build -f /root/zhouluF/docker-test-volum/dockerfile1 -t zl/centos:1.0 . # 最后有个.
      ②. docker run -it zl/centos /bin/bash # 其中自己的容器
      ③. docker inspect 700672b95593
6. 数据卷容器(容器间数据共享)
    ①. docker run -it --name docker01 zl/centos:1.0
    ②. docker run -it --name docker02 --volumes-from docker01(数据卷容器) zl/centos:1.0 # docker02挂载到docker01上
                # 在docker01上创建的文件同步到docker02上
    ③. docker run -it --name docker03 --volumes-from docker01 zl/centos:1.0
     # docker2和docker03继承与docker01
     # 测试:删除docker01的文件,docker02和docker03文件还是存在
3.4 Dockerfile dockerfile是用来构建docker镜像 命令参数脚本
1. 构建步骤:
   ①. b编写一个dockerfile文件
   ②.docker build构建成为一个镜像
   ③. docker run运行镜像
   ④. docker push发布镜像(dockerHub、阿里云镜像仓库)
2. dockerfile的构建过程以及基础知识:
    1. 保留关键字都必须是的大写字母
    2. 执行从上到下顺序执行
    3. # 表示注释
    4. 每一个指令都会创建提交一个新的镜像层,并提交
	5.dockerfile 是面向开发的,我们以后发布项目,做镜像,就需要编写dockerfilewe文件;
    6.dockerfile:构建文件,定义了一切的步骤,源代码
    7.dockerimages:通过dockerfile构建生成的镜像,最终发布和运行产品
    8.docker容器:容器就想是镜像运行提供的服务器
3. dockerfile指令
    FROM            # 基础镜像,一切从这里开始构建 
    MAINTAINER      # 镜像是谁写的 姓名+邮箱📮
    RUN             # 镜像构建的时候需要运行的命令
    ADD             # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
    WORKDIR         # 镜像的工作目录
    VOLUME          # 挂载的目录位置
    EXPOSE          # 暴露端口命令
    CMD             # 指定容器启动的时候要运行的命令,只有一个最后命令会生效,可被替代
    ENTRYPOINT      # 指定这个容器启动的时候要运行的命令,可以追加命令
    ONBUILD         # 当构建一个被继承dockerfile 这个时候就会运行ONBUILD的指令。出发指令
    COPY            # 类似ADD 将我们的文件拷贝到镜像中
    ENV             # 构建的时候设置环境变量
 4. 构建自己的镜像(实战测试)
     1. dockerhub中的99%的镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来镜像构建的
     2. 创建自己的centos
          FROM centos:7
          MAINTAINER zl<brucezlxxx@163.com>
		  ENV MYPATH /usr/local
          WORKDIR $MYPATH

          RUN yum -y install vim
          RUN yum -y install net-tools

          EXPOSE 880 # 端口不能是被占用的

          CMD echo $MYPATH
          CMD echo "----end----"
          CMD /bin/bash
      3. 通过以上文件构建自己的镜像(初体验)
          docker build -f dockerfile_centos -t mycentos:0.1 .
          docker history id # 我们可以列出本地镜像的变更历史,平时拿到一个镜像可以研究它是怎么做的

      4. CMD和ENTRYPOINT的区别
          vim dockerfile_centos1
          """
           FROM centos:7
           CMD ["ls", "-a"]
          """
          docker build -f dockerfile_centos1 -t cmdtest .
          docker run cmdtest -l # 报错 cmd的情况下 -l 替换了cmd["ls", '-a']命令, -l不是命令所以报错
          docker run cmdtest ls -al #不报错

          vim dockerfile_centos2
              """
              FROM centos:7
              ENTRYPOINT ["ls", "-a"]    
              """
           docker build -f dockerfile_centos2 -t cmdtest2 .
           docker run cmdtest2 -l  # 不报错
        5. 制作tomcat镜像
           1. 准备镜像文件, jdk文件压缩包
           2.编写dockerfile文件 官方文件Dockerfile build会自己寻找
              FROM centos:7
              MAINTAINER brucezlxxx
              COPY readme.txt /usr/local/readme.txt
              ADD OpenJDK10U-jdk_aarch64_linux_hotspot_10.0.2_13.tar.gz /usr/local/
              ADD apache-tomcat-9.0.60.tar.gz /usr/local/
              RUN yum -y install vim
              ENV MYPATH /usr/local
              WORKDIR $MYPATH
              ENV JAVA_HOME /usr/local/jdk10.0.2
              ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
              ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.60
              ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.60
              ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin 
              EXPOSE 1234
              CMD /usr/local/apache-tomcat-9.0.60/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.60/bin/logs/catalina.out
         6. 构建镜像 
            docker build -t diytomcat .
3.5 发布自己的镜像
1. 地址https://hub.docker.com 注册账号
2.  确定自己的账号可以提交
3. 在服务器提交镜像
    docker login -u brucezldocker
    docker push  mycentos:0.1 # (一定要带上版本号)
            # 喜爱是拒绝 denied: requested access to the resource is denied
    docker tag 5adb0559c8f8 zl/mycentos:1.0
    docker push zl/mycentos:1.0

来源狂神说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值