Docker常用命令

  1. docker基础命令

    systemctl start docker          启动docker
    systemctl stop docker           关闭docker
    systemctl restart docker        重启docker
    systemctl enable dockerdocker   设置随服务启动而自启动
    systemctl status docker         查看docker运行状态
    docker version                  查看docker版本号信息
    docker info
    docker --help                   docker帮助命令
    
  2. docker镜像命令

    docker images              查看自己服务器中docker 镜像列表
    docker search 镜像名       搜索镜像
    docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 镜像
    docker pull 镜像名         拉取镜像
    docker pull 镜像名:tag
    docker pull mysql         拉取最新版 mysql
    docker run 镜像名          运行镜像
    docker run 镜像名:Tag
    
  3. docker容器命令

    docker ps:列出运行中的容器
    docker ps -a : 查看所有容器,包括未运行
    docker stop 容器id或name:停止容器
    docker kill 容器id:强制停止容器
    docker start 容器id或name:启动已停止的容器
    docker inspect 容器id:查看容器的所有信息
    docker container logs 容器id:查看容器日志
    docker top 容器id:查看容器里的进程
    docker exec -it 容器id /bin/bash:进入容器
    exit:退出容器
    docker rm 容器id或name:删除已停止的容器
    docker rm -f 容器id:删除正在运行的容器
    docker exec -it 容器ID bash :进入容器
    
  4. docker数据卷:Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用卷;卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

    • 命令:运行容器,指定挂载数据卷命令:
    docker run --name xxxx -p 8888:8888 -v /my:/docker -it imagename 
    
    --name: 为容器起名字
    -p:宿主机端口:docker端口 (端口映射)
    -v:宿主机目录:docker目录 (必须为绝对路径)
    
    docker volume create my-vol     创建数据卷
    docker volume ls                查看所有的数据卷
    docker volume inspect my-vol    查看指定数据卷的信息
    docker inspect con-name         查看指定容器的信息
    docker volume rm my-vol         删除数据卷 
    docker volume prune             删除未使用的数据卷
    
    挂载主机目录
    docker run -it --name c1 -v /宿主机目录:/docker目录 -it imagename /bin/bash
    
  5. 自定义镜像:Docker 镜像是 Docker 容器运⾏时的只读模板,每⼀个镜像由⼀系列的层 (layers) 组成

    • 基于已有镜像创建
    docker commit [选项] 容器ID/名称 仓库名称:[标签]
    -m:说明信息
    -a:作者信息
    -p:生成过程中停止容器的运行
    
    • 基于本地模板创建
    通过导入操作系统模板文件生成新的镜像,使用wget命令导入为本地镜像
    wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
    导入成功后可查看本地镜像信息
    docker images | grep new
    
    • 基于Dockerfile创建:Dockerfile是由一组指令组成的文件,Dockerfile结构四部分:基础镜像信息,维护者信息,镜像操作指令,容器启动时执行指令,Dockerfile操作指令如下:
  6. 构建一个Java项目的镜像

    • 创建Dockerfile
    # 指定基础镜像
    FROM eclipse-temurin:8-jre
    
    # 在镜像中执行命令,创建目录,并使用它作为工作目录
    RUN mkdir -p /project
    # 设置工作目录,即后续命令的默认执行路径
    WORKDIR /project
    # 复制文件或目录到镜像中。可以将本地文件或目录复制到镜像的指定位置。
    COPY ./code-safe.jar /project/code-safe.jar
    
    # 设置环境变量
    # 指定容器的时区
    ENV TZ=Asia/Shanghai
    # 用于配置 Java 虚拟机的选项,如初始堆大小、最大堆大小和随机数生成器,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
    ENV JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom"
    ## 应用参数
    ENV ARGS=""
    
    # 定义容器启动后执行的命令,启动后端项目
    CMD java ${JAVA_OPTS} -jar code-safe.jar $ARGS
    
    # 声明要监听的端口
    EXPOSE 16000
    
    • 使用eclipse-temurin:8-jre作为基础镜像,然后,我们创建一个工作目录/project,并将Java项目的可执行JAR文件复制到容器中的该目录下。设置了一些环境变量,用于配置Java虚拟机的选项和应用参数。其中,JAVA_OPTS用于配置Java虚拟机的一些选项,如初始堆大小和最大堆大小。我们还定义了一个ARGS环境变量,用于传递应用程序的命令行参数。最后,我们使用CMD指令定义容器启动后要执行的命令。

    • 构建镜像,将资源jar包,Dockerfile 放在同一个目录中

    docker build -t java .
    
    • 查看镜像是否构建成功
    docker images
    
    • 使用docker run命令来运行容器
    docker run -d -p 16000:16000 --name myjava java:latest
    
    • 容器是否运行成功
    docker ps -a
    
  7. docker自定义网络

    • 帮助命令与查看所有的网络
    docker network --help
    docker network ls
    
    • 网络模式
    网络模式 配置 说明
    bridge模式 –net=bridge 默认值,在Docker网桥docker0上为容器创建新的网络栈
    none模式 –net=none 不配置网络,用户可以稍后进入容器,自行配置
    container模式 –net=container:name/id 容器和另外一个容器共享Network namespace。kubernetes中的pod就是多个容器共享一个Network namespace
    host模式 –net=host 容器和宿主机共享Network namespace
    用户自定义 –net=自定义网络 用户自己使用network相关命令定义网络,创建容器的时候可以指定为自己定义的网络
    • 创建 mynet 网络
    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
    
    查看网络
    docker network ls
    
    查看 mynet 网络详细信息
    docker network inspect mynet
    
    • 启动容器,并加入mynet网络
    docker run -it -P --name mynet-tomcat01 --net mynet tomcat
    
posted @ 2024-05-25 21:49  Hanyta  阅读(17)  评论(0编辑  收藏  举报