zoukankan      html  css  js  c++  java
  • Docker常用指令

    Docker常用指令

    镜像操作

    下载 CentOS 镜像

    如果没有本地的镜像文件,则可以直接下载,下载的时候也是分层下载。

    docker pull centos:7
    

    查看centos7镜像

    docker images
    //可以看到name 以及id 后续操作可以通过name 或者id 进行 一般id 需要前三位及以上
    

    该命令中image 没有带 s

    docker image ls
    

    运行 centos7

    docker run -it xxx(centos:7) bash
    
    • xxxx - 镜像名, 或 image id 的前几位
    • -it 这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
    • bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

    删除镜像

    • 501 代表镜像 id 前几位,一般三位以上,足够区分即可
    docker image rm 501
    
    • 删除指定仓库的镜像
    docker image rm centos
    

    镜像导出

    docker save mysql:5.7 node:8 | gzip > app.tar.gz  
    

    镜像导入

    如果已经上传了镜像文件,则可以无需下载 ,直接导入即可

    注意 < 可以换成 -i

    docker load < apps.tar.gz  
    

    容器操作

    启动容器

    docker run -it centos:7 bash
    

    当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

    • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
    • 利用镜像创建并启动一个容器
    • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    • 从地址池配置一个 ip 地址给容器
    • 执行用户指定的应用程序
    • 执行完毕后容器被终止

    后台运行

    docker run -dit centos:7
    
    • -d 后台运行容器
    • 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。
    • -d在后台运行启动 bash,如果不加交互终端(-it),bash会立即退出,容器也会自动关闭

    查看后台运行的容器输出结果

    docker ps # 查看正在运行的容器
    docker container logs 802  # 802 指的是当前运行的容器的id
    

    查看容器

    docker container ls -a
    # 或
    docker ps -a
    
    • -a all, 全部 不管是否正在运行 都可以查看

    终止容器

    docker container stop 802
    

    重新启动容器

    docker container restart 802
    

    进入容器

    在使用 -d 参数时,容器启动后会进入后台。

    某些时候需要进入容器进行操作,可以使用 docker exec 命令

    docker exec -it 802 bash
    

    删除容器

    docker container rm 802
    
    • 如果删除运行中的容器,需要添加 -f 参数
    docker container rm -f 802
    

    删除多个容器

    用 空格隔开容器的名称
    docker rm xxx xxx xxx tomcat1 tomcat2
    

    清理所有终止状态容器

    docker container prune
    

    数据管理

    在这里插入图片描述

    在容器中管理数据主要有两种方式:

    • 数据卷(Volumes)
    • 挂载主机目录 (Bind mounts)

    数据卷

    数据卷 是一个可供一个或多个容器使用的特殊目录

    • 数据卷 可以在容器之间共享和重用
    • 对 数据卷 的修改会立马生效
    • 对 数据卷 的更新,不会影响镜像
    • 数据卷 默认会一直存在,即使容器被删除

    创建数据卷

    docker volume create my-vol
    

    查看所有数据卷

    docker volume ls
    

    查看指定 数据卷 的信息

    docker volume inspect my-vol
    

    查询的结果:

    [
        {
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
            "Name": "my-vol",
            "Options": {},
            "Scope": "local"
        }
    ]
    

    启动挂载数据卷的容器

    docker run -it --mount source=my-vol,target=/opt/app  centos:7 bash
    
    # 或者:
    
    docker run -it -v my-vol:/opt/app centos:7 bash
    12345
    
    • -v my-vol:/opt/app 把数据卷 my-vol 挂载到容器的 /opt/app 目录

    删除数据卷

    • 删除指定的数据卷,如果数据卷被容器使用则无法删除
    docker volume rm my-vol
    
    • 清理无主数据卷
    docker volume prune
    

    挂载主机目录

    docker run -it --mount type=bind,source=/usr/app,target=/opt/app centos:7 bash
    
    # 或
    
    docker run -it -v /usr/app:/opt/app centos:7 bash
    
    • -v 如果本地目录不存在 Docker 会自动为你创建一个文件夹
    • --mount 参数时如果本地目录不存在,Docker 会报错

    查看挂载目录信息

    docker inspect 91a
    

    显示结果:

    ...
    
    "Mounts": [
        {
            "Type": "bind",
            "Source": "/usr/app",
            "Destination": "/opt/app",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],
    
    ...
    

    网络

    自动分配映射端口

    一般情况下先重启启动docker 容器

    systemctl restart docker
    docker run -d -P tomcat
    
    # 查看容器信息
    docker container ls -a
    

    显示结果:

    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
    d03480b1a781        tomcat              "catalina.sh run"   3 minutes ago       Up 3 minutes        0.0.0.0:32768->8080/tcp   trusting_gagarin
    

    映射指定端口

    docker run -d -p 8090:8080 tomcat
    
    • 8090:8080 本机端口:容器端口

    映射多个端口

    docker run -d 
           -p 5000:5000 
           -p 80:8080 tomcat
    

    映射指定端口(指定网卡)

    docker run -d -p 192.168.64.150:8080:8080 tomcat
    

    自动分配映射端口(指定网卡)

    docker run -d -p 192.168.64.150::8080 tomcat
    

    查看端口配置

    docker port 8af
    

    容器互联

    新建网络

    docker network create -d bridge my-net
    
    • -d driver,网络类型,默认 bridge,也可以是 overlay(Swarm mode)

    列出网络

    docker network ls
    

    查看网络信息

    docker inspect my-net
    

    连接容器

    docker run -it --name app1 --network my-net centos:7
    

    新开终端执行:

    docker run -it --name app2 --network my-net centos:7
    

    在两个终端中分别执行:

    ping app1
    
    ping app2
    

    显示如下:

    [root@35569c623c4c /]# ping app1
    PING app1 (172.18.0.2) 56(84) bytes of data.
    64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms
    64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms
    64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms
    ......
    123456
    
    • 多个容器互联,推荐使用 Docker Compose

    构建镜像--Dockerfile

    准备

    • centos:7镜像
    • jdk压缩包 jdk-8u212-linux-x64.tar.gz
    • tomcat7压缩包 apache-tomcat-7.0.96.tar.gz

    Dockerfile文件

    #以centos7为基础,安装oracle jdk8和tomcat7
    FROM centos:7
    #ADD命令将压缩包传入镜像中的指定目录,并同时解压缩
    ADD jdk-8u212-linux-x64.tar.gz /opt/
    ADD apache-tomcat-7.0.96.tar.gz /usr/
    #为了方便,把文件夹名称改得简单一点
    RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
    #设置环境变量
    ENV JAVA_HOME=/opt/jdk1.8.0_212 
        CATALINA_HOME=/usr/tomcat 
        PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
    #暴露容器的8080端口
    EXPOSE 8080
    #设置启动容器时自动运行tomcat
    ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
    

    准备文件夹

    进入根目录

    先准备文件夹,存放构建过程中使用的所有文件

    Dockerfile, jdk....gz, tomcat....gz

    cd ~ 
    mkdir tomcat7
    

    编辑文件

    cat <<EOF > Dockerfile
    FROM centos:7
    ADD jdk-8u212-linux-x64.tar.gz /opt/
    ADD apache-tomcat-7.0.96.tar.gz /usr/
    RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
    ENV JAVA_HOME=/opt/jdk1.8.0_212 
        CATALINA_HOME=/usr/tomcat 
        PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
    EXPOSE 8080
    ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out
    EOF
    

    上传JDK和tomcat压缩文件

    上传jdk和tomcat7两个压缩文件到 tomcat7 目录
    

    使用 Dockerfile 构建镜像

    docker build -t tomcat:7 .
    
    • 注意末尾的点,表示构建过程中从当前目录寻找文件

    启动容器

    准备存储目录

    • webapps目录,例如 /opt/webapps
    • logs目录,例如 /var/lib/tomcat-logs
    mkdir /opt/webapps
    mkdir /opt/webapps/ROOT
    mkdir /var/lib/tomcat-logs
    
    # 添加欢迎页
    cat <<EOF > /opt/webapps/ROOT/index.html
    <h1>Hello Docker!!!</h1>
    EOF
    

    启动容器,挂载目录

    docker run 
    -d 
    -p 80:8080 
    --name tomcat7 
    -v /opt/webapps:/usr/tomcat/webapps 
    -v /var/lib/tomcat-logs:/usr/tomcat/logs 
    tomcat:7
    

    浏览器访问

    http://192.168.64.150

    效果:

    image-20200908214214440

  • 相关阅读:
    java中金钱计算BigDecimal
    SpringBoot的学习二:整合Redis,JPA,Mybatis
    SpringBoot的学习一:入门篇
    Java基础回顾一
    golang 实现冒泡排序
    Go统计键盘输入随机字母的个数
    破解点触码的识别之第三方平台超级鹰的SDK(python3版本)
    RuntimeError: Failed to init API, possibly an invalid tessdata path: E:python36报错
    Django项目部署
    Django REST framework 的功能
  • 原文地址:https://www.cnblogs.com/zpKang/p/13671967.html
Copyright © 2011-2022 走看看